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

已有requirements、setup.py的Python/Django包如何使用tox做多版本测试

问题1:使用tox针对多版本进行兼容性测试的方法

  • 首先安装tox:pip install tox
  • 在项目根目录新建tox.ini配置文件,示例配置如下:
[tox]
# 这里可以根据你需要覆盖的Python、Django、DRF版本自定义envlist
envlist =
    py{36,37,38,39}-django{22,30,31,32}-drf{310,311,312}
skipsdist = true

[testenv]
deps =
    # 先加载开发依赖
    -rrequirements_dev.txt
    # 按环境变量注入对应版本的核心依赖,会覆盖requirements.txt里的版本定义
    django22: Django~=2.2.0
    django30: Django~=3.0.0
    django31: Django~=3.1.0
    django32: Django~=3.2.0
    drf310: djangorestframework~=3.10.0
    drf311: djangorestframework~=3.11.0
    drf312: djangorestframework~=3.12.0
    # 如果有私有PyPI源的依赖,在这里加--extra-index-url 你的私有源地址即可
commands =
    # 替换为你实际执行测试的命令
    python -m pytest tests/
  • 配置完成后直接执行tox命令,即可自动为每个版本环境安装对应依赖并运行测试,输出各环境的兼容结果。

问题2:完成测试后install_requires的版本指定规则

你可以继续沿用读取requirements.txt赋值的模式,只需要将requirements.txt中的依赖版本按以下规则调整即可:

  • 核心依赖(如Django、DRF)根据测试出的兼容范围设置,比如测试确认兼容Django2.2~3.2所有LTS版本,就写Django>=2.2,<3.3,不要锁死单个版本避免和用户其他依赖冲突
  • 有特定功能绑定的依赖(如django-restql)如果测试发现只有0.13.x版本兼容,就写django-restql~=0.13.1,限定在兼容的小版本范围内
  • 通用工具依赖(如requests、Pillow)只要测试确认最低兼容版本即可,比如requests>=2.24.0、Pillow>=8.2,不做多余的版本限制
  • 私有源依赖保持原写法即可,不需要额外调整

问题3:install_requires和requirements.txt的合理定义方式

两者的职责要做明确拆分:

  • install_requires(对应你现在的requirements.txt内容):只存放项目运行必须的最小依赖集合,版本为兼容范围,不包含任何开发、测试相关的依赖,保证用户安装你的包时只会安装必要的依赖,不会出现冗余包或版本冲突
  • requirements.txt:和install_requires内容保持一致即可,如果需要固定版本用于部署场景,可以单独生成requirements-lock.txt,用pip freeze导出所有依赖的精确版本,专门给部署用
  • requirements_dev.txt:只存放开发、测试阶段需要的依赖(如格式化工具、测试框架、覆盖率工具等),通过-r requirements.txt继承运行依赖即可,不要混入运行依赖放到install_requires中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:07