2016-12-28 15 views
1

у меня есть tox.ini файл и хотите, чтобы проверить на разных версиях Джанго:токсикодендрон зависимость по умолчанию для всех сред

[tox] 
envlist = 
    py27-django16-{[base]deps] 
    py32-django16-{[base]deps] 
    py27-django17-{[base]deps] 
    py32-django17-{[base]deps] 

[base] 
deps = 
    nose 

[testenv] 
commands = 
    {envpython} setup.py nosetests 
basepython = 
    py27: python2.7 
    py32: python3.2 

deps = 
    django16: Django>=1.6,<1.7 
    django17: Django>=1.7,<1.8 

Но это не работает, и поднять исключение, invalid command 'nosetests', я думаю, что из-за нос не установлен.

+0

любые вопросы о моем ответе? Дай мне знать. –

ответ

0

Ваш tox.ini две проблемы:

Первое: сгенерированные имена среды в envlist

([email protected]) 17:26:11 [email protected] [1] < ~/work/tox/tests > 1744 % 
tox -l 
py27-django16-{[base]deps] 
py32-django16-{[base]deps] 
py27-django17-{[base]deps] 
py32-django17-{[base]deps] 

Как вы видите, ничего не делается с записями в фигурные скобки не закрыты. Но даже если бы они были закрыты, замена не происходила бы, так как реферал к папкам там не принадлежал. То, что вы хотите сказать, для создания правильных условий для ваших потребностей выглядит следующим образом (если я предполагаю, что ваши намерения правильно - в противном случае просьба уточнить в комментарии):

envlist = {py27,py32}-django{16,17} 

Это создает эти имена среды:

([email protected]) 17:26:20 [email protected] [0] < ~/work/tox/tests > 1745 % 
tox -l 
py27-django16 
py27-django17 
py32-django16 
py32-django17 

Затем вы можете использовать факторы (например, py27 или django16), чтобы указать, что должно произойти, когда вы это делаете правильно. Трудно понять эту концепцию, но это может заставить вас начать. Также посмотрите на docs about this feature - IMO, они объясняют это довольно хорошо.

Основная проблема заключается в том, что вам нужно обратиться к папкам, где они вам нужны, - в записи депо вашей секции testenv, как указано в tox configuration specification.

Минимальный рабочий пример был бы:

[base] 
deps = nose 

[testenv] 
deps = {[base]deps} # <-- reference your base deps here 
commands = pip freeze 

adpated tox.ini из вашего вопроса будет выглядеть так:

[tox] 
envlist = {py27,py32}-django{16,17} 

[base] 
deps = nose 

[testenv] 
commands = {envpython} setup.py nosetests 
basepython = 
    py27: python2.7 
    py32: python3.2 
deps = 
    {[base]deps} 
    django16: Django>=1.6,<1.7 
    django17: Django>=1.7,<1.8 

В вашем случае, хотя - если вы просто хотите установить его во всех вам даже не нужен обход через раздел [base]. Поэтому рекомендованный tox.ini в вашем случае будет:

[tox] 
envlist = {py27,py32}-django{16,17} 

[testenv] 
basepython = 
    py27: python2.7 
    py32: python3.2 
deps = 
    nose # just add the dep here unconditionally for all envs 
    django16: Django>=1.6,<1.7 
    django17: Django>=1.7,<1.8 
commands = {envpython} setup.py nosetests