先用 pip install tox 安装,再运行 tox --version 验证;若仍报错,检查 path 是否包含 pip 的 bin 目录(如 ~/.local/bin),macos/linux 需添加 export path="$home/.local/bin:$path" 到 ~/.zshrc,windows 用户需重启 cmd 或改用 powershell。

tox 命令不识别,提示 command not found 怎么办
说明:tox 是独立安装的命令行工具,不是 Python 标准库或 pip 自带组件。很多人误以为装了 pip 就能直接用 tox,其实得单独装。
实操建议:
- 用
pip install tox安装(推荐在全局或用户级,不用进虚拟环境) - 验证是否生效:运行
tox --version,看到输出版本号才算成功 - 如果仍报错,检查
$PATH是否包含 pip 的 bin 目录(如~/.local/bin),macOS/Linux 用户可能需要把这行加进~/.zshrc:export PATH="$HOME/.local/bin:$PATH" - Windows 用户注意:不要用 PowerShell 的
pip install tox后立刻在 CMD 里跑tox——CMD 不自动重载 PATH,重启终端或改用 PowerShell
tox.ini 里怎么指定多个 Python 版本(比如 py38 和 py310)
说明:tox 默认只跑 py(即当前系统默认 Python),要矩阵测试就得显式列出环境名。这些名字不是随便写的,必须对应已安装的 Python 解释器可执行文件名(或通过 pyenv/asdf 管理的版本)。
实操建议:
- 基础写法:
[tox]下写envlist = py38, py310;每个环境会自动找系统中名为python3.8、python3.10的可执行文件 - 如果本地只有
python3.8但没python3.10,tox 会报错InterpreterNotFound: python3.10—— 这时候得先装好对应版本(例如用pyenv install 3.10.12+pyenv global 3.8.18 3.10.12) - 想让 tox 自动 fallback 到相近版本?加配置项:
ignore_basepython_conflict = true(仅 tox 4+ 支持),否则旧版会直接失败 - 别写成
py3.8或python3.10—— tox 环境名规范是py38、py310,点号会被当分隔符解析
测试跑一半卡住,或者报 ModuleNotFoundError: No module named 'pytest'
说明:tox 每个环境都是干净隔离的全新虚拟环境,不会继承你当前项目的依赖,也不会复用全局安装的测试工具。所有依赖都得在 tox.ini 里声明。
实操建议:
- 确保
[testenv]下有deps = pytest(或pytest>=7.0),否则连pytest都没有,更别说你的项目包 - 要让 tox 安装当前项目(比如带
setup.py或pyproject.toml),加deps = .或install_command = pip install {opts} {packages}(新版 tox 默认已支持) - 如果用
poetry或flit构建,tox 4 默认兼容,但 tox 3 需要额外插件(如tox-poetry-installer),否则.安装会失败 - 常见陷阱:把
pytest写在项目requirements.txt里,却不告诉 tox —— tox 不读那个文件,它只认deps和commands
为什么 tox -e py38 比直接 python3.8 -m pytest 慢那么多
说明:tox 每次运行都会重建虚拟环境(除非缓存开启),还要重新安装依赖、解析配置、激活环境……不是简单转发命令。
实操建议:
- 启用环境缓存:在
[tox]加skipsdist = true(跳过打包)+recreate = false(默认行为,但显式写上更安心);更重要的是设置isolated_build = false(tox 4)或关掉isolated_build(tox 3)避免重复构建源码 - 开发时快速验证单个环境,优先用
tox -e py38 --notest进入 shell,再手动跑pytest,省去反复创建销毁开销 - CI 场景下别省这点时间:tox 的价值恰恰在于“每次都是干净环境”,手动模拟反而容易漏掉依赖或版本冲突
- 注意
.tox目录位置:默认在项目根目录下,如果项目在 NFS 或慢盘上,IO 会拖慢整个流程 —— 可通过TOX_WORK_DIR环境变量挪到 SSD 路径
真正麻烦的从来不是写几行 tox.ini,而是搞清楚你本地到底装了哪些 Python 解释器、它们叫什么名字、能不能被 tox 找到。很多问题表面是配置错,实际是 which python3.10 根本没输出,或者 pyenv versions 里显示的版本没被 shell 正确加载。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











