Python技术迷

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

嗨,大家好,我是虎哥,今天聊聊Python项目的 requirements.txt 文件,教大家如何生成项目的最小依赖环境文件。

想想开发Python项目的小伙伴们,多少有时候是直接上 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 后,你可以打开看看,是不是干净、精简,和你在项目中手动引用的包完全吻合呢?这就是“最小依赖文件”!

📌 注意点

  1. pipreqs 是通过扫描你的代码文件来确定项目依赖的,所以它更像是“按需打包”。
  2. 如果项目代码中没有直接导入的包, 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 ,可以进一步扩展,定制筛选条件。

选择适合你的方法

  1. 如果时间紧、工作量大 :直接用 pipreqs ,一条命令解决问题。
  2. 如果项目较小,依赖明确 :用 pip freeze 和手动筛选,或者写个自动化脚本。
这两种方法,都能帮你生成“最小requirements.txt”,以最精简的依赖文件,解决项目需求。

额外技巧:如何保持 requirements.txt 与项目同步

在项目维护过程中,依赖包经常会增加或减少,这时候建议大家在项目代码中加上依赖检查步骤。每次更新代码时,定期更新 requirements.txt :
pipreqs ./ --force
--force 参数会覆盖之前的 requirements.txt ,确保项目依赖文件是最新的。 谁说项目管理不重要?记得我有次,直接在 base 环境写代码, pip freeze 出来几百行的依赖文件,结果运维同事看到后眼珠子差点掉出来! 所以各位,千万不要小瞧 requirements.txt 的精简程度,该删的就删,能少一个包就少一个包。
对编程、职场感兴趣的同学,大家可以联系我微信: golang404 ,拉你进入“程序员交流群”。
🔥 虎哥私藏精品 热门推荐 🔥 虎哥作为一名老码农,整理了全网最全 《python高级架构师资料合集》 。
资料包含了 《IDEA视频教程》 、 《最全python面试题库》 、 《最全项目实战源码及视频》 及 《毕业设计系统源码》 ,总量高达 650GB 。 全部 免费领取 !全面满足各个阶段程序员的学习需求 。