如何将带factors的tox legacy-ini配置迁移为原生TOML格式?
将tox 4的Legacy Ini配置转为原生TOML格式(避免重复配置)
完全可以保留原有的envlist简写逻辑,不用逐个定义环境表,通过tox 4原生TOML的环境模板和条件配置就能实现和原ini一致的效果,同时符合现代格式规范。
转换后的完整原生TOML配置
[tool.tox] envlist = [ "py39-django42", "py{310,311,312}-django{42,50,51,52}", "py313-django{51,52,main}" ] isolated_build = true skipsdist = true [tool.tox.env_template] # 所有测试环境共享的依赖配置 deps = [ "flake8", "psycopg2-binary", "dj-database-url>=2.3.0,<3.0", { value = "Django>=4.2,<4.3", condition = "env.django == '42'" }, { value = "Django>=5.0,<5.1", condition = "env.django == '50'" }, { value = "Django>=5.1,<5.2", condition = "env.django == '51'" }, { value = "Django>=5.2,<5.3", condition = "env.django == '52'" }, { value = "git+https://github.com/django/django.git@main#egg=django", condition = "env.django == 'main'" }, ] # 若有共享的测试命令,可在此添加 # commands = ["pytest"]
关键特性说明
- 保留envlist简写:tox 4原生TOML完全兼容原ini中的环境扩展语法(如
py{310,311,312}-django{42,50,51,52}),自动生成所有需要的Python-Django组合环境,无需手动枚举。 - 用env_template消除重复:
[tool.tox.env_template]是所有测试环境的基础模板,所有通过envlist生成的环境都会继承这里的配置,不用为每个环境单独编写配置表。 - 条件依赖映射:TOML中通过
{ value = "...", condition = "..." }的结构,对应原ini里的django42: ...条件语法。env.django是从环境名中自动提取的因子(例如py39-django42中django因子的值为42),实现不同Django版本的依赖分支。
特殊场景扩展
如果需要给特定环境添加额外配置(比如某Python版本的专属依赖),只需单独定义该环境的配置表即可,它会自动继承env_template的内容:
[tool.tox.env.py39-django42] # 追加py39专属依赖 deps = [ "some-py39-only-package" ]
内容的提问来源于stack exchange,提问作者Shai Berger
相关产品推荐
相关产品推荐

