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 来确保输出的包包含版本信息。