如何用tox-conda基于多Python版本测试Python包?
tox-conda 多Python版本兼容性测试配置方案
问题场景
作为地球科学从业者,使用Miniforge管理Python环境(适配非Python依赖及R项目),操作流程如下:
- 创建含tox-conda的sandbox环境:
mamba create -n sandbox python=3.10 tox-conda mamba activate sandbox
- 手动创建全局Conda环境:
mamba create -n py311 python=3.11 mamba create -n py310 python=3.10
- 使用原tox.ini测试包兼容性:
[tox] requires = tox-conda envlist = py310, py311 isolated_build = True [testenv] deps = pytest commands = pytest
运行后py310测试正常,但py311报错:
ERROR: cowardly refusing to delete envdir (it does not look like a virtualenv): /home/timh/Code/pgongrid_sandbox/.tox/py311
尝试指定解释器绝对路径、在deps/conda-deps中设置Python版本均未解决问题。
解决配置方案
推荐方案:让tox-conda自动创建隔离测试环境(符合tox设计原则)
无需手动创建全局py310/py311环境,tox-conda会自动在.tox目录下生成隔离的Conda测试环境,修改后的tox.ini如下:
[tox] requires = tox-conda envlist = py310, py311 isolated_build = True [testenv] # 自动匹配envlist的py标签对应的Python版本 conda_python_version = {envconfig:basepython:split:1} # 用conda安装依赖(若依赖需从conda源获取,优先用此项) conda_deps = pytest # 若依赖仅需pip源,可替换为deps = pytest commands = pytest # 强制使用conda创建环境,避免fallback到virtualenv basepython = python
备选方案:复用已存在的全局Conda环境(不推荐,破坏隔离性)
如果必须复用已手动创建的全局环境,可使用以下配置(需替换为你的环境实际路径):
[tox] requires = tox-conda envlist = py310, py311 isolated_build = True [testenv:py310] basepython = /path/to/miniforge/envs/py310/bin/python conda_deps = pytest commands = pytest [testenv:py311] basepython = /path/to/miniforge/envs/py311/bin/python conda_deps = pytest commands = pytest
关键注意事项
- 清理残留异常环境:如果之前的
.tox/py311目录存在异常,先手动删除后再重新运行tox:
rm -rf .tox/py311
- 避免手动创建全局测试环境:tox的核心是隔离测试,手动创建的全局环境会干扰tox-conda的自动环境管理逻辑,导致识别错误。
内容的提问来源于stack exchange,提问作者Timothy W. Hilton
相关产品推荐
相关产品推荐

