如何生成python项目需要的最小requirements.txt文件?

今天咱们来聊聊 Python 项目中如何生成一个“最小的” requirements.txt 文件。我们都知道,当我们开发一个 Python 项目的时候,很多时候都会在一个虚拟环境中进行,这样一来,就能避免不同项目之间的依赖冲突。

可有时候,也不一定每次都会特意为项目创建一个独立的虚拟环境,尤其是当我们懒得去设置时,往往会在一个全局的环境中进行开发。比如,大家可能习惯了用 conda 中的 base 环境开发项目,这种情况就很常见。

问题来了:如何生成这个项目所需要的最小 requirements.txt 文件呢?也就是说,怎么确保 requirements.txt 文件里,既包含了所有依赖的库,又不会因为没有用到的库,导致文件过于臃肿?

这个问题其实很常见,我们有几个常见的解决办法,今天就来跟大家聊一聊,怎么高效且干净地生成你所需要的依赖清单。

首先,不得不提的一个传统方法是使用 pip freeze,但是这个方法并不是最优解,尤其是在你没有使用虚拟环境的情况下。我们一起来看看这个方法有什么问题,再讨论一下更好的解决方案。

使用 pip freeze 命令生成 requirements.txt(但其实不推荐)

pip freeze 命令的作用是列出当前 Python 环境下安装的所有依赖包,它会输出所有包的版本信息。如果你在全局环境或者一个已经装满各种包的虚拟环境下运行这个命令,那么生成的 requirements.txt 里就会包含你环境中所有的包。这显然是多余的,因为你可能只用到了其中的很少一部分,而其他的包完全不相关。

怎么用 pip freeze 来生成 requirements.txt 文件?

在项目根目录下打开命令行或者终端,运行以下命令:

这样会生成一个 requirements.txt 文件,内容大致会像这样:

如上所示,它会列出所有安装的包,而不管你在项目中有没有实际用到这些包。你可以看到,即使你只用了 flaskpandas 可能只是其他包依赖的,结果它们都会出现在你的依赖清单里。

如果你没意识到这个问题,直接将这个文件分享给别人,别人就可能会在安装依赖时,得到一些他们根本不需要的包,这显然是有点问题的。那么,我们该怎么办呢?

使用 pipreqs 生成精准的 requirements.txt(推荐)

一个更好的方法是使用 pipreqs 这个工具,它的优势在于它会根据你的项目源代码文件分析出实际用到的库,并只将这些库和对应的版本列出在 requirements.txt 文件中。这样就避免了像 pip freeze 那样将整个环境中的所有包都列出来的问题。

如何使用 pipreqs?

首先,你需要安装 pipreqs。你可以通过下面的命令来安装:

安装完成后,我们就可以在项目根目录下运行 pipreqs 来生成一个只包含你项目实际依赖库的 requirements.txt 文件。命令如下:

这条命令会做以下几件事情:

  • ./ 表示当前目录,告诉 pipreqs 在当前项目目录下扫描源代码文件;

  • --encoding=utf8 指定编码格式为 UTF-8,确保处理中文或其他非ASCII字符时不会出错;

  • --force 强制覆盖已有的 requirements.txt 文件(如果文件已经存在的话)。

运行命令之后,pipreqs 会自动扫描你的项目目录中的 Python 文件,分析出你使用到的所有第三方库,并将它们和版本号写入 requirements.txt 文件。

结果是什么样的?

假设你有一个使用了 flaskrequests 库的项目,使用 pipreqs 生成的 requirements.txt 文件可能会是这样的:

你看,只有你实际用到的库被列出,而项目中没有使用到的包就不会出现在里面了。简洁且精确,不会有冗余。

为什么推荐 pipreqs?

  • 准确性:它只会列出实际用到的依赖包,避免了像 pip freeze 那样的冗余。

  • 易用性:命令简单直观,几乎不需要额外配置,直接在项目根目录运行即可。

  • 清洁性:生成的 requirements.txt 文件非常干净,不会有多余的包。

当然,如果你的项目是一个比较简单的脚本,只有几个常见的库,那用 pip freeze 也无妨。但对于大项目,尤其是在没有虚拟环境的情况下,使用 pipreqs 会更合适。

一键安装依赖

不论你是使用 pip freeze 还是 pipreqs 生成的 requirements.txt 文件,使用方法都是一样的。如果你想让别人快速安装这些依赖,只需要提供给他们这个 requirements.txt 文件,并执行以下命令:

这会自动安装文件中列出的所有依赖包,省去了手动逐个安装的麻烦。

今天我们讨论了两种生成 requirements.txt 文件的方法:一种是传统的 pip freeze,另一种是更精确的 pipreqs

虽然 pip freeze 简单易用,但它会把你环境中所有安装的包都列出来,而不仅仅是你项目需要的那些。相比之下,pipreqs 能够精确地扫描项目代码,找到实际需要的依赖包,生成的 requirements.txt 文件更干净、更准确。

如果你在一个干净的虚拟环境中开发,pip freeze 也许可以用,但如果你没有为项目创建虚拟环境,或者希望只列出项目中实际依赖的库,那 pipreqs 就是你最好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18966.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

每日论文22-24ESSERC一种54.6-65.1GHz多路径同步16振荡器

《A 54.6-65.1 GHz Multi-Path-Synchronized 16-Core Oscillator Achieving −131.4 dBc/Hz PN and 195.8 dBc/Hz FoMT at 10 MHz Offset in 65nm CMOS》24欧洲固态 本文是在60GHz 16核VCO的工作,主要亮点在于每一组中四个VCO之间的三路同步拓扑结构,有…

web——upload-labs——第十一关——黑名单验证,双写绕过

还是查看源码, $file_name str_ireplace($deny_ext,"", $file_name); 该语句的作用是:从 $file_name 中去除所有出现在 $deny_ext 数组中的元素,替换为空字符串(即删除这些元素)。str_ireplace() 在处理时…

网络安全之国际主流网络安全架构模型

目前,国际主流的网络安全架构模型主要有: ● 信息技术咨询公司Gartner的ASA(Adaptive Security Architecture自适应安全架构) ● 美国政府资助的非营利研究机构MITRE的ATT&CK(Adversarial Tactics Techniques &…

StarRocks 架构

StarRocks 是什么?( What is StarRocks?) StarRocks 是 MPP 的查询引擎,用来做实时查询,提供亚秒级的查询性能。 兼容 MYSQL 协议,可以和大部分 BI 工具进行无缝衔接。 Apache 2.0 开源产品。 使用场景&…

图像处理 之 凸包和最小外围轮廓生成

“ 最小包围轮廓之美” 一起来欣赏图形之美~ 1.原始图片 男人牵着机器狗 2.轮廓提取 轮廓提取 3.最小包围轮廓 最小包围轮廓 4.凸包 凸包 5.凸包和最小包围轮廓的合照 凸包和最小包围轮廓的合照 上述图片中凸包、最小外围轮廓效果为作者实现算法生成。 图形几何之美系列&#…

【机器学习】决策树算法原理详解

决策树 1 概述 1.1 定义 决策树是一种解决分类问题的算法,决策树算法采用树形结构,使用层层推理来实现最终的分类。 决策树即可以做分类,也可以做回归。它主要分为两种:分类树 和 回归树。 1.2 决策树算法 第一个决策树算法…

基于深度学习的车牌检测系统的设计与实现(安卓、YOLOV、CRNNLPRNet)+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

中国省级金融发展水平指数(金融机构存款余额、贷款余额、GDP)2020-2023年

数据范围: 包含的数据内容如下: 分省份金融机构存款余额、分省份金融机构贷款余额、分省份金融机构存贷款余额、分省份GDP、分省份金融发展指数 西藏自治区、贵州省、黑龙江省2023年数据暂未公布,计算至2022年,其他省份数据无缺失…

如何在 Ubuntu 上安装 Mosquitto MQTT 代理

如何在 Ubuntu 上安装 Mosquitto MQTT 代理 Mosquitto 是一个开源的消息代理,实现了消息队列遥测传输 (MQTT) 协议。在 Ubuntu 22.04 上安装 MQTT 代理,您可以利用 MQTT 轻量级的 TCP/IP 消息平台,该平台专为资源有限的物联网 (IoT) 设备设计…

【青牛科技】带 ALC 双通道前置放大器电路D3308

概述: D3308 是一块带有 ALC 的双通道前置放大器。它适用于立体声收录机 和盒式录音机。 采用 SIP9、SOP14 的封装形式封装。 主要特点: ● 带内置 ALC 回路的双通道均衡放大器。 ● 低噪声: VNI1.0V(典型值)。 …

Spring Cloud微服务下如何配置I8n

什么是I8n 国际化(I18n)指的是设计和开发产品的过程,使得它们能够适应多种语言和文化环境,而不需要进行大量的代码更改。这通常涉及到创建一个基础版本的产品,然后通过配置和资源文件来添加对不同语言和地区的支持。 这…

百度AI人脸检测与对比

1.注册账号 打开网站 https://ai.baidu.com/ &#xff0c;注册百度账号并登录 2.创建应用 3.技术文档 https://ai.baidu.com/ai-doc/FACE/yk37c1u4t 4.Spring Boot简单集成测试 pom.xml 配置&#xff1a; <!--百度AI--> <dependency> <groupId>com.baidu.…

MoeCTF 2024 web

ProveYourLove 前端页面限制了重复提交, 需要绕过, 可以通过BurpSuite抓包爆破, 或者代码直接发包 import requestsurlhttp://127.0.0.1:44395/questionnairedata {nickname: 1,target: 1,message: 1,user_gender: male,target_gender: male,anonymous: false }for i in ran…

使用WebHooks实现自动化工作流程的技术详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用WebHooks实现自动化工作流程的技术详解 文章目录 使用WebHooks实现自动化工作流程的技术详解引言WebHooks 的基本概念什么是…

如何通过低代码逻辑编排实现业务流程自动化?

随着数字化转型的加速&#xff0c;企业对高效、灵活的业务流程自动化需求日益增加。传统开发模式下的定制化解决方案往往周期长、成本高且难以适应快速变化的需求。低代码平台以其直观、简便的操作界面和强大的功能逐渐成为企业实现业务流程自动化的理想选择。本文将探讨低代码…

DNS记录类型详解(DNS Record Detailed Type)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

分布式专题-Redis核心数据结构精讲

1. redis安装&#xff1a; redis.conf是redis启动配置文件&#xff1b; redis连接&#xff1a; 数据类型&#xff1a; redis命令&#xff1a; String类型&#xff1a; INCRBY orderId 1000 是 Redis 数据库中的一个命令&#xff0c;用于将存储在键 orderId 中的整数值增加 10…

原生微信小程序中封装一个模拟select 下拉框组件

1.首先在components 里面设置组件名称&#xff1a;van-select&#xff08;随便取名字&#xff09;&#xff1b; 2.新建文件写代码&#xff1a; wxml&#xff1a; <view class"w100 select_all_view"><!-- 标题&#xff0c;可以没有 --><view class…

C++小白实习日记——Day 1 怎么跑github上下载的程序

研二&#xff0c;通信专业&#xff0c;实习&#xff0c;记录一下实习经历 在本地服务器跑github代码&#xff1a; 第一天老板给了一个github上的小项目链接让我看&#xff1a; https://github.com/MengRao/tscns 用git clone 命令下载下来&#xff0c;文件夹下有这些&#…

C++设计模式行为模式———迭代器模式

文章目录 一、引言二、迭代器模式三、总结 一、引言 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素。C标准库中内置了很多容器并提供了合适的迭代器&#xff0c;尽管我们不…