如何生成python项目需要的最小requirements.txt文件?
嗨,大家好,我是虎哥,今天聊聊Python项目的
资料包含了 《IDEA视频教程》 、 《最全python面试题库》 、 《最全项目实战源码及视频》 及 《毕业设计系统源码》 ,总量高达 650GB 。 全部 免费领取 !全面满足各个阶段程序员的学习需求 。
requirements.txt
文件,教大家如何生成项目的最小依赖环境文件。
conda base
环境写代码的吧?在这种情况下直接生成的
requirements.txt
文件,通常是一个“大杂烩”,包含了项目用不到的各种包。今天就教你们几个操作,轻松搞定这个最小依赖文件!💡
首先,关于为什么需要“最小requirements.txt”
我们在开发Python项目时,项目的依赖管理关系到后续的代码部署、打包以及版本控制。一个精简的
requirements.txt
能帮我们避免冗余依赖的困扰。特别是当项目在“非独立环境”(比如
conda base
)下开发时,这个需求就尤为重要,因为
base
环境通常有我们可能并不需要的其他包。越小的依赖文件,越方便项目的打包和迁移,还能避免版本冲突。
那么,如何生成一个项目最小的
requirements.txt
呢?下面我给大家两种思路,操作简单,效果明显。
方法一:使用 pipreqs 生成最小依赖文件
首先强烈安利
pipreqs
,这是一个可以帮你直接生成仅包含项目实际依赖包的工具。
1. 安装 pipreqs
确保你的环境中安装了
pipreqs
,没有的话一行命令搞定:
pip install pipreqs
2. 运行 pipreqs
接下来,确保你在项目的根目录下运行以下命令:pipreqs ./ --encoding=utf-8
这个命令会在项目根目录下生成一个
requirements.txt
文件,它只包含项目所需的依赖包,不会夹带上
conda base
里那些不相关的包。
代码解读
-
./:代表当前目录,pipreqs会从这里开始查找依赖。 -
--encoding=utf-8:用于指定编码方式,防止出现编码问题。
requirements.txt
后,你可以打开看看,是不是干净、精简,和你在项目中手动引用的包完全吻合呢?这就是“最小依赖文件”!
📌 注意点
-
pipreqs是通过扫描你的代码文件来确定项目依赖的,所以它更像是“按需打包”。 -
如果项目代码中没有直接导入的包,
pipreqs就不会识别(比如通过某个插件或间接依赖安装的包)。
方法二: pip freeze + 手动筛选
如果因为某些原因不能用
pipreqs
,可以试试
pip freeze
的经典老方法,再手动清理不需要的依赖。
1. 使用 pip freeze 命令
在终端中输入以下命令生成一个所有包的列表:pip freeze > all-requirements.txt
这会生成一个叫
all-requirements.txt
的文件,记录了环境中的所有依赖包和版本。可以用这个文件作为参考,筛选出仅包含项目所需的包。
2. 手动筛选
打开
all-requirements.txt
文件,逐行查看,并只保留项目代码中确实引用的包。最终的内容就是这个项目的最小依赖包了。
示例代码
举个简单的筛选例子。假设
all-requirements.txt
长这样:
Django==3.2.7
numpy==1.21.2
requests==2.26.0
Pillow==8.3.1
scipy==1.7.1
matplotlib==3.4.3
项目里我们只用了
Django
和
requests
,那可以筛选出如下内容作为最终的
requirements.txt
:
Django==3.2.7
requests==2.26.0
有点像筛菜,选出那些真正吃得上的。
3. 小tips:自动化筛选的代码脚本(更方便的选择)
为了少花些时间,你可以写个Python脚本来自动完成筛选,比如下面这个简单脚本:# 自动筛选requirements.py
import re
# 假设我们只需Django和requests包
needed_packages = ['Django', 'requests']
with open('all-requirements.txt', 'r') as f_in, open('requirements.txt', 'w') as f_out:
for line in f_in:
if any(pkg in line for pkg in needed_packages):
f_out.write(line)
这个脚本只会将
all-requirements.txt
中的
Django
和
requests
写入新的
requirements.txt
,可以进一步扩展,定制筛选条件。
选择适合你的方法
-
如果时间紧、工作量大
:直接用
pipreqs,一条命令解决问题。 -
如果项目较小,依赖明确
:用
pip freeze和手动筛选,或者写个自动化脚本。
额外技巧:如何保持 requirements.txt 与项目同步
在项目维护过程中,依赖包经常会增加或减少,这时候建议大家在项目代码中加上依赖检查步骤。每次更新代码时,定期更新
requirements.txt
:
pipreqs ./ --force
--force
参数会覆盖之前的
requirements.txt
,确保项目依赖文件是最新的。
谁说项目管理不重要?记得我有次,直接在
base
环境写代码,
pip freeze
出来几百行的依赖文件,结果运维同事看到后眼珠子差点掉出来!
所以各位,千万不要小瞧
requirements.txt
的精简程度,该删的就删,能少一个包就少一个包。
对编程、职场感兴趣的同学,大家可以联系我微信: golang404 ,拉你进入“程序员交流群”。🔥 虎哥私藏精品 热门推荐 🔥 虎哥作为一名老码农,整理了全网最全 《python高级架构师资料合集》 。
资料包含了 《IDEA视频教程》 、 《最全python面试题库》 、 《最全项目实战源码及视频》 及 《毕业设计系统源码》 ,总量高达 650GB 。 全部 免费领取 !全面满足各个阶段程序员的学习需求 。