tox插件,允许指定要使用的解释器位置路径
项目描述
用法
tox --scan 显示之前找到的名称到可执行路径映射。
tox --scan PATTERN1 PATTERN2 在模式中搜索Python可执行文件,并将找到的路径以这种方式存储以供tox将来使用
这允许您轻松指定多个Python可执行文件以供tox使用。无需永久或临时将其路径添加到您的PATH中,这在所有情况下都有不可接受的副作用,除非通过别名直接在命令行中调用tox(正如您所猜,这不是我的典型用法)。
在Windows上,可以通过注册表找到可执行文件。因此,指定模式以找到可执行文件是不必要的,并且相对繁琐。使用 tox --scan 注册表 将扫描注册表以查找可执行路径并提供这些路径供未来运行。这最终允许在Windows上运行tox,而无需在C:\中安装Python时造成混乱。
安装
从tox 2.0开始,基于pluggy的插件机制已包含在tox中。您只需做
pip安装tox_globinterpreter
如果您安装 pytest(pip install pytest)来测试此模块本身,并且您使用的是 bash shell,请确保重新哈希 bash(hash -r 或重新激活虚拟环境)。
默认的 tox 解释器查找行为
非 Windows 系统
tox 会搜索在 $PATH 中指定的路径来查找 python 可执行文件(待检查)。
对于许多 Linux 发行版,系统 python(以及最近的一些 python,因为 Linux 发行版逐渐转向 Python3,系统工具同时使用 2.7.x 和 3.4.X)不能替换为较新的微版本,而不会带来很多麻烦。这些新的微版本应安装在一些“其他”目录中,例如 /opt/python/2.7.9。其 bin 目录在启动时不能添加到正常的 PATH 中,因为这会破坏一些依赖于较旧 python 微版本(及其附加安装的库)的系统程序。
可以通过为 tox 创建别名来临时将此目录添加到 tox 的每次调用中,但如果 tox 从 Makefile 中调用,则不起作用。将 make 别名为包括该路径可能会破坏来自同一 Makefile 的系统工具调用。
Windows
在 Windows 上,tox 在 C:\\python?.? 中查找安装,并根据目录名确定版本(待检查)。
如果您将 python 解释器安装在非默认位置,则此方法将不起作用,例如,当您需要安装 64 位和 32 位版本时,或者当它们安装在更合适的 C:\Program Files\ 或类似目录中时。
tox_globinterpreter 插件扩展
非 Windows 系统
tox_globinterpreter 为 tox 添加了一个命令行选项:--scan。如果带有参数调用,则这些参数应是一个模式,或模式的列表,这些模式将被 glob 和 shlex 匹配,形成一个基础名称到 python 二进制文件路径的映射,然后存储在用户全局范围内供将来使用(在 $XDG_CONFIG_HOME/tox 下,默认为 ~/.config/tox)。例如:
tox --scan '/opt/python/2.?/bin/python?.?' ../../../opt/python/pypy*/bin/pypy
(请注意,只有第二个参数不会被 shell 展开,第一个参数被 tox_globinterpreter 引用并展开)。
如果没有参数调用 tox --scan,则输出当前存储的映射(基础名称到可执行文件)。例如:
python2.7 /opt/python/2.7/bin/python2.7 pypy /opt/python/pypy-2.5.0/bin/pypy
(如果找到多个相同的基础名称,则使用列表中的 第一个)。
如果设置了环境变量 TOX_INTERPRETER_GLOBS,则这将导致使用该环境变量指定的模式搜索 python 二进制文件(每次展开和搜索)。
如果设置了 TOX_INTERPRETER_GLOBS,它将防止使用 –scan 列表,并且如果设置了任何一个,则不会执行通过 PATH 的正常搜索。
在 --scan 过程中,确定用于 tox.ini 中 envlist 的基础名称(例如 py27)的依据是二进制文件名,如果它包含版本号(例如 python2.7)。如果二进制文件等于 python,则基础名称(包括版本)是通过调用解释器确定的。当展开 TOX_INTERPRETER_GLOBS 时,此调用确定版本信息的当前成本被认为太高。
Windows
tox_globinterpreter 为 tox 添加命令行选项,其中主要的是:--scan。
在Windows上,您应该首先指定 --scan c:/python/*/python.exe c:/pypy*/*/*/pyp.exe 以创建基础名称到路径的映射。这不会从注册表中获取它们,因为注册表是不完整的(只有特定CPython的64位和32位版本被注册,pypy根本未注册)。
如果使用不带参数的 tox --scan,则会打印出当前存储的映射。例如。
python2.7 c:\python\2.7\python2.7.exe python2.7 c:\python\2.7-32\python2.7.exe
如果您安装了64位和32位版本,请通过执行
tox -r --32
(这可能在某个时候在 tox 本身中得到支持,但目前您不能指定 py27-32 作为32部分从未传递给 tox_get_python_executable)
历史记录
我最初实现了将解释器列表作为对 tox 的补丁,为这个补丁我提交了一个PR,这个PR拖延了两年(进行了重复更新),直到我被要求更新它(再次,但这次是由tox的作者)。在提供插件接口后,这个tox插件取代了早期的PR请求。
项目详细信息
tox-globinterpreter-0.4.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b5b6cfee69abf463f1baab2e92f99dbd13db02aa6b8b235ccf177e95000559ff |
|
MD5 | de16884e31ace2af2bceb0143bf9a798 |
|
BLAKE2b-256 | 46956e2b089e45ef5f05a902944730c47e9e5f45feaf80ff26d2c883acd7aaf6 |