2017-09-13 40 views
1

這裏是我的tox.ini:蟒蛇TOX:如何在環境中使用不同的Python envlist

[tox] 
envlist = py27,py35 

[testenv] 
deps = 
    Flask 
    connexion 
    pytest 
    coverage 
    pytest-cov 
    requests 
    six 
commands=pytest --junitxml xunit-reports/xunit-result-XXX.xml --cov {envsitepackagesdir} --cov-report=xml 

[testenv:local] 
#HOW DO I SPECIFY A NEW LIST OF PYENV LIKE 31,36 IN HERE???? 
commands= 
    pytest --cov {envsitepackagesdir}/XXX --cov-report html 

當我運行tox它運行在py27py35。我想要tox -e local在不同的多個Python環境中運行。我無法弄清楚如何做到這一點。我該怎麼做呢?現在它甚至不尊重初始環境列表,只運行在Python 2.7上。

回答

3

[tox]envlist只是一個默認值 - 當調用tox時沒有選項-e且沒有TOXENV環境變量時要運行的環境列表。一旦使用tox -e[tox]envlist將被忽略。

您可以使用不同的python版本運行local環境,但我不知道有多種方式來運行它多次。你必須列出所有的環境中明確:

tox -e py33-local,py34-local 

可以使用TOX」公約縮短命令行:

tox -e 'py3{3,4}'-local 
1

所以,你想要的是有兩套不同的環境中獨立運行它們。

您首先必須瞭解的是,envlist是如果在不使用-e選項的情況下調用tox時將運行的所有環境的列表。

接下來你必須明白的是,每個tox.ini只有一個這樣的列表,其中一個在全球[tox]部分。

你要了解的另一件事是,pyXX因素(因素是由-號分隔環境名的部分)有TOX特殊的意義,因爲他們指示其與特定構建環境翻譯。它們也被稱爲「默認環境」(參見basic usage)。如果在調用tox時不要求這個因子,那麼將使用basepython解釋器來構建virtualenv(您從中調用tox的解釋器)。

所以如果你調用tox -e local像你這樣一個tox.ini,它將執行什麼是[tox:local]與basepython定義的,因爲你不是確定哪些蟒蛇應該用來創造的virtualenv,所以它使用相同的解釋你用tox調用tox。

如果你希望能夠與其他環境與其他翻譯援引當地因素,獨立,下面可以讓你開始(在v2 config docs描述):

[tox] 
envlist = {py27,py35}-remote,{py31,py36}-local 

[testenv] 
deps = 
    Flask 
    connexion 
    pytest 
    coverage 
    pytest-cov 
    requests 
    six 

[testenv:remote] 
commands=pytest --junitxml xunit-reports/xunit-result-XXX.xml --cov {envsitepackagesdir} --cov-report=xml 

[testenv:local] 
commands= pytest --cov {envsitepackagesdir}/XXX --cov-report html 

檢查其ENVS這創造搭配:

$ tox -a 

py27-remote 
py35-remote 
py31-local 
py36-local 

什麼envlist用花括號符號呢,是與他們的排列結合所有因素(這可以有更多的尺寸也可以)創造環境名。

如果你說的tox沒有-e,他們將全部運行並且全部使用正確的解釋器。

如果你想運行本地ENVS只有你將不得不與調用它:

$ tox -e py31-local,py36 

那麼只有他們兩個會運行。這裏要說的是,如果你想運行所有環境的一個子集,你必須要求他們的全名。沒有「次世代」或額外的envlist魔法。只需在逗號分隔列表中列出envorenments的全名,您就是金牌。

UPDATE

TIL瞭解到,實際上你可以使用一代語法命令行,所以你可以鍵入:

$ tox -e 'py{31,36}'-local 

謝謝@phd指點出來。

0

好的,我非常感謝和upvoted在這裏的另外兩個答案,但我最終做的是不同的。實現單獨的 python版本和命令似乎很麻煩。 我最終做的只是做一個單獨的tox.ini,並將它稱爲tox -c tox-local.ini