如何在tox中使用支持多Python版本的命名环境?
更简洁的Tox配置实现方式
当然有更省心的解决办法!Tox本身支持环境继承和**因子(Factors)**特性,能帮你避免重复写配置,同时实现用标签名快速调用多Python版本的环境。下面给你两种实用方案:
方案1:环境继承(保留原有命名风格)
如果你想继续用mytag37、mytag38这类命名,可以把通用配置抽成一个基础环境,让各个版本环境直接继承它:
[tox] envlist = mytag37, mytag38 # 通用基础配置,所有mytag环境都继承这个 [testenv:mytag] deps = pytest coverage pytest-cov commands = pytest ... # Python3.7版本的环境,继承mytag的配置 [testenv:mytag37] basepython = python37 extends = mytag # Python3.8版本的环境,同样继承基础配置 [testenv:mytag38] basepython = python38 extends = mytag
新增Python版本时,只需要两步:
- 在
envlist里添加mytagXX - 新增一个对应的
[testenv:mytagXX]section,指定basepython并继承mytag
调用方式还是你熟悉的:tox -e mytag37,mytag38,或者直接跑所有mytag环境:tox
方案2:因子语法(更灵活易扩展)
如果你想进一步简化配置,推荐用Tox的因子特性,它能自动生成多版本环境,新增版本只需要修改一行配置:
[tox] # 用{37,38,39}这种语法自动生成多个环境 envlist = mytag-py{37,38} # 通用配置,所有环境默认继承 [testenv] deps = pytest coverage pytest-cov commands = pytest ... # 匹配所有以mytag-py开头的环境,指定Python版本规则 [testenv:mytag-py*] # {py}会自动匹配因子里的数字(比如py37对应37) basepython = python{py}
调用方式
- 跑单个版本:
tox -e mytag-py37 - 跑多个版本:
tox -e mytag-py37,mytag-py38 - 跑所有mytag相关环境:
tox -e mytag-py*
新增Python版本时,只需要在envlist的{37,38}里加新的版本号,比如{37,38,39},不用新增任何section,扩展性拉满!
这两种方案都能帮你摆脱重复配置的麻烦,根据你的命名偏好选就行~
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

