在所有解释器上运行tox,包括宽和窄2.7编译的Python

时间:2018-07-01 12:13:52

标签: python-2.7 unicode tox tox-globinterpreter

ruamel.yaml进行了回归,并引入了合并PR,从而更改了使用宽和窄Unicode字符编译的Python版本具有本质上不同路径的代码。

在预构建/提交测试期间未找到回归,因为用tests执行的tox从未在狭窄('--enable-unicode = ucs2')Unicode字符。我的2.7.X正在使用“ --enable-unicode = ucs4”进行编译,在Python 3.4+中,字符串具有动态Unicode宽度,对于所涉及的代码,它们好像是4字节宽。

我已经编译了2.7.15的窄版。 如何在一次tox运行中测试窄版和其他Python版(尤其是宽版2.7),这样当一个或多个Python版本失败时,就不会有新版本了版本已提交,是否没有软件包被推送到PyPI?

我尝试将目标py27m添加到tox-globinterpreter使用的解释器列表中:

p python2.7m /opt/python/2.7.15m/bin/python

并运行:

tox -r -e py27m

但这没有用,因为它使用Python 3.6.6来运行测试(执行插入程序tox就是这样)。

解释器列表中的“重载” Python 2.6使用窄版2.7:

p python2.6 /opt/python/2.7.15m/bin/python

也不起作用。

1 个答案:

答案 0 :(得分:1)

您不能使解释器列表超载,可能与放弃对2.6的支持有关(目标Python3.3并使用tox -e py33例如不起作用)。但是在您的py27m中为tox.ini添加特定目标相对容易:

[tox]
toxworkdir = /data2/DATA/tox/ruamel.yaml 
envlist = py36,py27,py35,py34,pypy,py27m

[testenv]
commands =
    python -c "import sys, sysconfig; print('%s ucs-%s' % (sys.version.replace('\n', ' '), sysconfig.get_config_var('Py_UNICODE_SIZE'), ))"
    /bin/bash -c 'pytest _test/test_*.py'
deps =
    pytest

[testenv:py27m]
basepython = /opt/python/2.7.15m/bin/python

python -c ...命令将对virtualenv创建的每个tox环境中默认安装的python版本,特别是字符宽度,提供一些额外的反馈,{ 1}}的输出不包括该内容。 (为清楚起见,删除了在实际tox中运行flake8 / codestyle的条目。)

连同解释器列表(tox.ini):

~/.config/tox/interpreters.lst

,运行v 1 # Original pattern used: g /opt/python/?.?/bin/python?.? /opt/python/pypy2/bin/pypy # Interpreters found: p python3.6 /opt/python/3.6/bin/python3.6 p python3.4 /opt/python/3.4/bin/python3.4 p python2.7 /opt/python/2.7/bin/python2.7 p python3.5 /opt/python/3.5/bin/python3.5 p python3.7 /opt/python/3.7/bin/python3.7 p pypy /opt/python/pypy2/bin/pypy e 现在会导致:

tox -e

通过这种方法,可以一次性测试使用窄带和宽Unicode编译的同一Python版本的不同代码路径。