Запуск tox на всех интерпретаторах, включая широкий и узкий 2.7 скомпилированный Python

ruamel.yaml имеет регрессию, представленную объединенным PR, которая изменила код, который имеет существенно разные пути для версий Python, скомпилированных с широкими и узкими символами Unicode.

Регрессия не была обнаружена во время тестирования перед сборкой / фиксацией, потому что тесты, которые выполняются с toxникогда не запускались на Python с узкими ('--enable-unicode=ucs2') символами Unicode. Мой 2.7.X компилируется с помощью `--enable-unicode=ucs4', а в Python 3.4+ строки имеют динамическую ширину Unicode, действующую так, как будто они имеют ширину 4 байта для соответствующего кода.

Я собрал узкую версию 2.7.15.Как я могу протестировать узкую версию вместе с другими версиями Python (в частности, широкие 2.7) в одномtoxзапустить, чтобы при сбое одной или нескольких версий 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 ответ

То, что вы не можете перегрузить список интерпретаторов, вероятно, связано с удаленной поддержкой 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 ... Команда должна иметь дополнительную обратную связь об установленной версии Python, в частности о ширине символа, в каждом из virtualenv окружающие среды tox создает по умолчанию 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 теперь приводит к:

.
.
.
2.7.15 (default, Jun 30 2018, 23:05:50)  [GCC 7.3.0] ucs-4
py27m runtests: commands[1] | /bin/bash -c pytest _test/test_*.py
============================= test session starts =============================
platform linux2 -- Python 2.7.15, pytest-3.6.2, py-1.5.4, pluggy-0.6.0
.
.
.
2.7.15 (default, Jul  1 2018, 11:43:51)  [GCC 7.3.0] ucs-2
py27m runtests: commands[1] | /bin/bash -c pytest _test/test_*.py
============================= test session starts ==============================
platform linux2 -- Python 2.7.15, pytest-3.6.2, py-1.5.4, pluggy-0.6.0
.
.
.
============= 320 passed, 1 skipped, 7 xfailed in 32.36 seconds ===============
___________________________________ summary ____________________________________
  py36: commands succeeded
  py27: commands succeeded
  py35: commands succeeded
  py34: commands succeeded
  pypy: commands succeeded
  py27m: commands succeeded
  congratulations :)

Таким образом, пути кода, которые различаются для одной и той же версии Python, скомпилированной с узким и широким Unicode, могут быть протестированы за один раз.

Другие вопросы по тегам