https://pip.pypa.io/en/stable/reference/requirements-file-format/
# The syntax supported here is the same as that of requirement specifiers.
docopt == 0.6.1
requests [security] >= 2.8.1, == 2.8.* ; python_version < "2.7"
urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip在 pip 的 requirements.txt 文件中,PyPI package 的版本号指定遵循 PEP 440 规范。以下是主要的版本指定方式:
1. 精确版本匹配#
package==1.2.3 # 精确匹配版本 1.2.3
package===1.2.3 # 精确匹配,包括版本格式2. 版本范围指定#
package>=1.2.3 # 大于等于 1.2.3
package>1.2.3 # 大于 1.2.3
package<=1.2.3 # 小于等于 1.2.3
package<1.2.3 # 小于 1.2.3
package!=1.2.3 # 排除 1.2.3 版本3. 兼容性发布#
package~=1.2.3 # 兼容版本,相当于 >=1.2.3, ==1.2.*
package~=1.2 # 兼容版本,相当于 >=1.2, ==1.*4. 版本范围组合#
package>=1.2.3,<2.0.0 # 1.2.3 到 2.0.0 之间(不包括 2.0.0)
package>1.0,!=1.5.0,<2.0 # 多个条件组合5. 通配符匹配#
package==1.2.* # 1.2 系列的任意版本
package==1.* # 1.x 系列的任意版本6. 预发布版本#
package>=1.2.3rc1 # 包含预发布版本
package==1.2.3a1 # alpha 版本
package==1.2.3b2 # beta 版本
package==1.2.3rc1 # release candidate 版本实际应用示例#
# requirements.txt
Django==4.2.0
requests>=2.25.0,<3.0.0
numpy~=1.21.0
flask>=2.0.0,!=2.0.1,<3.0.0
pandas==1.5.*
celery>=5.0.0最佳实践建议#
- 生产环境:建议使用精确版本 (
==) 以确保环境一致性 - 开发环境:可以使用范围指定以获得安全更新
- 库开发:建议使用兼容性发布 (
~=) 或适当版本范围 - 避免过度限制:不要过度限制版本范围,以免造成依赖冲突
这些规范确保了依赖管理的灵活性和可靠性。