了解 tox.ini 中的非默认 Python 配置

Understanding Non-Default Python Configuration in tox.ini

我正在尝试详细了解配置 tox.ini 文件的详细信息。在 one of the files for the Jupyter project and in this demo project 中,他们没有使用默认的 python 环境,而是在命令中定义了新环境:

[testenv]
basepython =
    py27: {env:TOXPYTHON:python2.7}
    py33: {env:TOXPYTHON:python3.3}

这样做有什么好处?另外,带有 env:TOXPYTHON 命令的命令完成了什么?我在 tox 文档中找不到它。

这里要理解的主要概念是:

  1. Generating environments, conditional settings

如果 运行 的环境包含冒号前列出的因素之一,则这是有效的。

  1. Environment variable substitutions with default values

花括号中的元素根据 shell 中设置的环境变量的状态进行替换是 运行 in.

把它放在一起你的代码片段的意思是:

py27: {env:TOXPYTHON:python2.7}

如果因素 py27 是 tox 环境名称的一部分(例如 "py27-unittests"),则将环境变量 TOXPYTHON 的值或文字 "python2.7" 用作 basepython未设置变量。

相同的原则适用于包含因素 py33 的环境。

优点是,作为开发人员,您可以根据需要设置 TOXPYTHON 环境变量,以防 python2.7 或 python3.3 不在您的路径中。这是(我猜)tox 在不同 Osses 和发行版上发现解释器时存在一些弱点的结果。参见:https://github.com/tox-dev/tox/projects/3

python2.7python3.3 是 unix 风格的名称。在 w32 python 二进制文件通常被命名为 C:\Python27\python.exeC:\Python33\python.exe。要创建在 Linux 和 w32 中同样有效的 tox.ini,可以不同地定义 TOXPYTHON

例如,参见我如何为 AppVeyor tests 定义 TOXPYTHON