You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在存在依赖冲突的场景下同时支持多个Python版本

多Python版本依赖兼容最佳方案

第一步:拆分依赖声明,使用PEP 508环境标记适配版本差异

将依赖分两类维护在setup.py中,利用Python版本条件标记自动适配不同环境的依赖要求:

  • 核心运行依赖写入install_requires字段,针对存在版本冲突的依赖添加环境判断:
install_requires = [
    # 其余核心依赖省略
    "ipdb==0.13.7",
    # Python 3.6环境适配低版本ipython
    "ipython>=7.15,<7.17; python_version == '3.6'",
    # Python 3.7及以上环境适配指定版本ipython
    "ipython==7.17; python_version >= '3.7'"
]
  • 开发专属依赖(测试工具、调试工具等普通用户不需要的依赖)写入extras_require字段:
extras_require = {
    "dev": [
        # 其余开发依赖省略
        "pytest",
        "flake8"
    ]
}

上述写法是Python官方规定的标准依赖声明规则,pip安装时会自动根据当前环境的Python版本匹配对应的依赖版本,无需人工判断。

第二步:用工具自动生成锁定版本的依赖文件,替代手动pip freeze

你之前担心手动修改pip freeze输出不符合最佳实践的问题,可以通过pip-tools工具解决:

  • 新增一个requirements.in文件,仅需要写一行内容:.[dev],指向setup.py中声明的所有依赖
  • 分别在Python 3.6、Python 3.7的干净虚拟环境中执行pip-compile requirements.in命令,工具会自动生成全版本锁定的依赖文件,你可以分别命名为requirements-py36.txt、requirements-py37.txt
  • 开发时根据你当前使用的Python版本,执行对应命令即可:pip install -r requirements-py3x.txt && pip install -e .,依然能保证使用的是经过测试的稳定依赖版本

所有锁定文件都是工具自动生成的,你只需要维护setup.py和requirements.in两份文件即可,没有额外的多文件维护成本。


内容的提问来源于stack exchange,提问作者CIsForCookies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:51:02