网站首页 > 开源技术 正文
【回复“python”,送你十本电子书】
更正:昨天图文中提到的车万翔老师组织的翻译版地址为:
https://github.com/carfly/thinkpython-cn。另外,已有两位同学加入《Think Python》最新版的翻译,所以后续微信号更新的节奏有可能会加快。其他希望参与的同学也可以fork本书翻译的代码库:
https://github.com/bingjin/ThinkPython2-CN。
原文作者:Kenneth Reitz
原文发布日期:2016/02/25
译者:EarlGrey@编程派
本文由编程派原创编译,首发于微信公众号“编程派”。
requests等知名Python第三方库的作者:Kenneth Reitz
现在大家开发Python应用时,在代码库的根目录中添加一个requirements.txt文件已经成了标准实践。
这个文件用处挺多,一般有以下两种形式:
项目的顶层依赖包清单(top-level dependencies),通常不会指定版本号
项目的全部依赖包清单,每个依赖包都指定版本号
01
方法1:简单的requirements文件
项目的顶层依赖包清单,通常不会指定版本号。
$ cat requirements.txt requests[security]flask gunicorn==19.4.5
方法1非常简单,也是每个使用requirements文件的开发者希望获得的用户体验。但是,如果将这样一个requirements.txt文件部署到生产环境,有可能会出现预料之外的问题。因为你没有指定版本号,所以在运行pip install后,你今天安装的Python包可能和明天安装的就会不一样。
这是很糟糕的。因为子依赖包可能经常更新版本号,所以重新运行pip install -r requirements.txt可能会让你安装不一样的Python包。这有可能会让你的应用因为未知的原因而无法运行。
2
方法2:精确的requirements文件
项目的全部依赖包清单,每个依赖包都指定版本号
$ cat requirements.txt cffi==1.5.2
cryptography==1.2.2
enum34==1.1.2
Flask==0.10.1
gunicorn==19.4.5
idna==2.0
ipaddress==1.0.16
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
ndg-httpsclient==0.4.0
pyasn1==0.1.9
pycparser==2.14
pyOpenSSL==0.15.1
requests==2.9.1
six==1.10.0
Werkzeug==0.11.4
方法2是部署应用时应采取的最佳实践,可以确保你的运行环境不会出现问题。
所有的依赖包,包括子依赖包都明确列出,而且指定了各自的版本号。
这种类型的requirements.txt是在应用当前工作运行环境下,运行pip freeze命令自动生成的。这种做法鼓励开发者平等对待开发/生产环境(dev/prod parity),对待外部依赖包,就像对待本身应用的代码一样尊敬(因为它们也是你应用代码的一部分)。
3
麻烦之处
尽管方法2是使用requirements.txt的最佳实践,但实际上还是有点麻烦。举个例子,如果我有一个较大的代码库,希望通过pip install --upgrade命令更新部分或全部Python包,我没有办法轻松地做到这点。
之前我的方法是,一个一个地把顶层的依赖包挑出来,然后手动输入pip install requests[security] flask --upgrade。这个过程可不好受。
我思考了很久,还想过要开发一个工具来解决这个问题。当然,现在已经有了像pip-tools这样的工具。可是,我不想再往自己的工具链(tool chain)里加东西了;这个问题应该利用已有的工具就能解决。
最后,我想出了一个很好的方案,利用我现有的工具解决了这个问题,而且兼具方法1和方法2的优势。我已经在项目中使用这个工作流一段时间,对结果非常满意。
4
工作流
其实很简单:我们不只放一个requirements文件,而是两个:
requirements-to-freeze.txt
requirements.txt
requirements-to-freeze.txt
requests[security]flask gunicorn==19.4.5
requirements.txt
cffi==1.5.2
cryptography==1.2.2
enum34==1.1.2
Flask==0.10.1
gunicorn==19.4.5
idna==2.0
ipaddress==1.0.16
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
ndg-httpsclient==0.4.0
pyasn1==0.1.9
pycparser==2.14
pyOpenSSL==0.15.1
requests==2.9.1
six==1.10.0
Werkzeug==0.11.4
requirements-to-freeze.txt遵循的是方法1,文件中说明了项目的顶层依赖包,以及你需要指定的明确版本号。
requirements.txt遵循的是方法2,其中的内容是运行pip install
requirements-to-freeze.txt命令后,pip freeze生成的。
基本用法
$ cd project-repo $ pip install -r requirements-to-freeze.txt --upgrade Installing collected packages: six, enum34, ipaddress, ...
$ pip freeze > requirements.txt
鱼与熊掌,二者兼得。
我建议你尝试一下这个工作流,很有可能会避免你未来碰到构建失败等问题。
...
最新版《Think Python》中文翻译计划
猜你喜欢
- 2025-06-04 python用requests BeautifulSoup下载网页到txt并去掉html标记
- 2025-06-04 测试进阶:实现跨请求地保持登录的神器session你get了么?
- 2025-06-04 Requestium一个比Requests跟实用的python库
- 2025-06-04 Python模拟登入的N种方式,总有一种方式适合你(建议收藏)
- 2025-06-04 RobotFramework之http接口测试库RequestsLibrary使用介绍(十)
- 2025-06-04 Kafka Producer 参数 max.in.flight.requests.per.connection 配置
- 2025-06-04 如何搭建接口自动化测试框架?(接口自动化测试框架设计)
- 2025-06-04 python编程实践:网络爬虫,从学习Requests 模块开始
- 2025-06-04 一文详解 requests 库中 json 参数和 data 参数的用法
- 2025-06-04 Python爬虫5 requests库get、post的使用
你 发表评论:
欢迎- 最近发表
-
- 后端服务太慢?试试这 7 招(后端 服务端 区别)
- 做一个适合二次开发的低代码平台,把程序员从curd中解脱出来-1
- Caffeine缓存 最快缓存 内存缓存(caffeine缓存使用)
- Java性能优化的10大策略(java性能调优从哪几个方面入手)
- New Balance M576PGT 全新配色设计
- x-cmd pkg | qrencode - 二维码生成工具
- 平和精英抽奖概率是多少 平和精英抽奖物品一览
- x-cmd pkg | tmux - 开源终端多路复用器(terminal multiplexer)
- 漫威官方App中文版上线:全站漫画限时免费
- macOS Monterey 12.7.4 (21H1123) 正式版发布,ISO、IPSW、PKG 下载
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)