Automatically create file ‘requirements.txt’
技术背景
在Python项目开发中,requirements.txt
文件用于记录项目所依赖的第三方库及其版本,方便在不同环境中重现项目所需的依赖。但手动维护该文件较为繁琐,且容易出错,因此需要自动化的方法来生成 requirements.txt
文件。
实现步骤
使用 pipreqs
生成项目所需依赖
pipreqs
可以遍历项目代码,找出实际使用的第三方库,并生成 requirements.txt
文件。
1 2 3 4
| pip install pipreqs
pipreqs /path/to/project
|
使用 pip freeze
生成环境中所有安装的依赖
pip freeze
会将当前环境中使用 pip install
安装的所有包记录下来。
1 2 3 4
| pip3 freeze > requirements.txt
pip freeze > requirements.txt
|
- 安装
pipreqs
和 pip-tools
1 2
| pip3 install pipreqs pip3 install pip-tools
|
- 使用
pipreqs
生成 requirements.in
文件
1
| pipreqs --savepath=requirements.in
|
- 使用
pip-compile
生成包含子依赖的 requirements.txt
可以将上述两步合并为一个命令:
1
| pipreqs --savepath=requirements.in && pip-compile
|
Anaconda 环境下生成 requirements.txt
1
| conda list -e > requirements.txt
|
使用 pipreqsnb
支持 Jupyter 笔记本
1 2
| pip install pipreqsnb pipreqsnb .
|
核心代码
1 2 3
| pip3 install pipreqs pip3 install pip-tools pipreqs --savepath=requirements.in && pip-compile
|
Anaconda 环境下生成 requirements.txt
1
| conda list -e > requirements.txt
|
最佳实践
- 使用虚拟环境:在创建
requirements.txt
文件前,使用虚拟环境(如 virtualenv
或 conda
),避免将不必要的全局包包含在文件中。
1 2 3 4 5 6 7 8 9
| pip3 install virtualenv python3 -m venv <myenvname>
source <myenvname>/bin/activate
pip install <dependencies name>
pip freeze > requirements.txt
|
- 结合
pipreqs
和 pip-tools
:使用 pipreqs
生成项目实际使用的依赖列表,再用 pip-tools
生成包含子依赖的 requirements.txt
文件,确保项目依赖的完整性和确定性。
常见问题
pip freeze
包含了不需要的包
pip freeze
会保存环境中所有使用 pip install
安装的包,包括当前项目未使用的包。可以使用 pipreqs
代替,它只会保存项目中实际使用的包。
pipreqs
未包含子依赖
pipreqs
不会自动包含子依赖,可以结合 pip-tools
来解决这个问题。
pipreqs
生成的 requirements.txt
有重复依赖或遗漏依赖
pipreqs
可能会出现重复依赖或遗漏依赖的情况,可以手动检查和调整,或者结合其他方法(如 pip freeze
)来补充。
pip freeze
输出的包没有版本信息
可以使用 pip list --format=freeze > requirements.txt
来确保输出的包包含版本信息。