Python中requirements.txt的全面解析与最佳实践
本文详解Python项目中requirements.txt的核心作用,涵盖手动维护与自动生成的多种方法(如pip freeze、pipreqs、pigar等),对比各工具优劣。重点解析多环境依赖管理策略,并深入辨析requirements.txt与setup.py的功能边界及共存必要性,通过Flask案例说明实际应用场景,为开发者提供规范的依赖管理最佳实践。
requirements.txt简介
简介
在Python项目中,必须包含一个requirements.txt文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署。
requirements.txt基本写法
其主要写法如下所示:
pip freeze > requirements.txt # 生成requirements.txt
pip install -r requirements.txt # 从requirements.txt安装依赖
支持的写法包括:
-r base.txt # base.txt下面的所有包
pypinyin==0.12.0 # 指定版本(最日常的写法)
django-querycount>=0.5.0 # 大于某个版本
django-debug-toolbar>=1.3.1,<=1.3.3 # 版本范围
ipython # 默认(存在不替换,不存在安装最新版)
自动生成依赖文件的工具对比
除了手动编写,还可以使用第三方工具自动生成。
需要注意的是,pip freeze命令会附带一些不必要的包,以及某些包依赖的其他包。
pipreqs可以自动分析项目中引用的包,但对Django项目自动构建时会忽略Mysql包,且版本信息可能不准确;此外,联网搜索时若遇到404错误会直接报错退出。
pigar的功能与上述类似,会显示包被项目文件引用的位置(这似乎是一个伪需求,因为通过搜索即可解决),同样存在404报错的问题。
pip-tools通过第三方文件生成requirements.txt,这实际上增加了一层转换,直接编写可能更为简便。
多环境依赖管理最佳实践
推荐用法:
一般项目会分为开发环境、测试环境、生产环境等,各环境依赖的包可能不同。推荐在文件夹下为每个环境建立一个requirements.txt文件,公有的包存放在base.txt中供引用。
➜ meeting git:(sync) ✗ tree requirements -h
requirements
├── [ 286] base.txt
├── [ 80] local.txt
└── [ 28] production.txt
鉴于上述自动化工具存在诸多不便,仍推荐手动维护依赖列表。毕竟在pip安装后手动编辑依赖文件并非难事。
setup.py与requirements.txt的区别
setup.py与requirements.txt的区别:
setup.py文件用于管理模块,你可以将项目打包为模块上传到PyPI,或者将项目作为模块放入Python的系统加载模块目录中。
requirements.txt文件仅列举项目引用的非本项目依赖,除此之外没有其他作用。
因此,可以看出这两个文件并没有冲突关系,而且有很大共存的必要。
- 如果你的项目需要保存为系统模块,或者可安装为系统命令,那么setup.py就必不可少了。
- 如果你的项目是可以直接运行的,那么requirements.txt也是必不可少的。
- 如果你两种功能都需要,那么两个文件都不能少。
Flask案例:两种功能的共存
是否存在需要这两种功能的情况?
当然有,而且很多,例如Flask就支持两种方式:
- 以系统命令的方式启动,在Flask 0.11.1中新加入了一个Click包,它可以让你setup之后以命令的方式运行。
- 直接运行,传统的Flask启动方式一般是app.run()或者python manage.py runserver。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助。如果有任何疑问,欢迎大家留言交流,谢谢大家对本站的支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













