PyPI Package 版本号规范

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

最佳实践建议#

  1. 生产环境:建议使用精确版本 (==) 以确保环境一致性
  2. 开发环境:可以使用范围指定以获得安全更新
  3. 库开发:建议使用兼容性发布 (~=) 或适当版本范围
  4. 避免过度限制:不要过度限制版本范围,以免造成依赖冲突

这些规范确保了依赖管理的灵活性和可靠性。

本文共 472 字,创建于 Oct 15, 2025

相关标签: Python, Linux