Настройте несколько установок Python в Windows с помощью tox

Я пытаюсь настроить tox в Windows для запуска тестов на нескольких установках Python. Я установил каждый питон в папки с именем C:\Python\PythonXX_YY, XX - это версия Python (например, 27), а YY - либо 32, либо 64. В настоящее время единственный питон в моем PATH - C:\Python\Python33_64, поскольку я использую новую программу запуска Python для запуска любой версии Я хочу. Я тоже использую tox из этой версии.

Первая проблема заключается в том, что tox не обнаруживает эти установки, предположительно потому, что они не находятся в местах по умолчанию. Я могу обойти это, установив путь в tox.ini для каждой среды, но это делает настройку очень специфичной для моего компьютера. Есть ли лучший способ сообщить tox, где находятся мои питоны во всем мире?

Вторая проблема заключается в том, что при установке местоположений python в tox.ini я получаю следующую ошибку при запуске (для Python27):

Traceback (most recent call last):
  File "c:\Python\Python33_64\lib\site-packages\virtualenv.py", line 2557, in <module>
    main()
  File "c:\Python\Python33_64\lib\site-packages\virtualenv.py", line 961, in main
    never_download=options.never_download)
  File "c:\Python\Python33_64\lib\site-packages\virtualenv.py", line 1062, in create_environment
    site_packages=site_packages, clear=clear))
  File "c:\Python\Python33_64\lib\site-packages\virtualenv.py", line 1255, in install_python
    copy_required_modules(home_dir)
  File "c:\Python\Python33_64\lib\site-packages\virtualenv.py", line 1193, in copy_required_modules
    dst_filename = change_prefix(filename, dst_prefix)
  File "c:\Python\Python33_64\lib\site-packages\virtualenv.py", line 1164, in change_prefix
    (filename, prefixes)
AssertionError: Filename c:\Python\Python33_64\lib\site-packages\readline.py does not start with any of these prefixes: ['c:\\python\\python27_64']

ERROR: InvocationError: c:\python\python27_64\python.exe c:\Python\Python33_64\lib\site-packages\virtualenv.py --distribute py27 (see C:\Users\david.townshend\Documents\Global\Programming\norman\.tox\py27\log\py27-0.log)

Похоже, он пытается установить материал Python2.7 из Python3.3, но я никогда особо не использовал virtualenv, поэтому я могу неправильно интерпретировать эту ошибку.

Я не уверен, как это решить, но мне кажется, что очевидным решением должно быть использование tox средства запуска Python для получения необходимой версии Python. Есть ли способ заставить его это сделать?


person aquavitae    schedule 12.12.2012    source источник
comment
Какую версию virtualenv вы используете? Если не последний, можно попробовать?   -  person hpk42    schedule 13.12.2012
comment
@ hpk42 Я только что обновился до последней версии, но без разницы.   -  person aquavitae    schedule 13.12.2012


Ответы (2)


Похоже, tox ищет питонов в таких местах:

m = re.match(r"python(\d)\.(\d)", name)
if m:
    # The standard names are in predictable places.
    actual = r"c:\python%s%s\python.exe" % m.groups()

Таким образом, вы должны поместить своих питонов в c: \ Python3.3 \ и т. Д. Обратите внимание на точку . вместо подчеркивания _. Хотя это боль.

person agroszer    schedule 16.08.2013
comment
зарегистрировал проблему: bitbucket.org/hpk42/tox/issue/ 114 / - person agroszer; 16.08.2013
comment
Также работает с c:\python(\d)(\d) - без запятой. - person Ilya Kurnosov; 30.04.2014
comment
то, что не поддерживает 32- и 64-битные бок о бок - person agroszer; 07.05.2014

Я не уверен, сделал ли Tox это, когда OP впервые задал вопрос, но кажется, что теперь можно настроить каждую среду индивидуально следующим образом:

[tox]
envlist = pyw35,pyw36
skip_missing_interpreters=True

[testenv]
commands = {envpython} setup.py test

[testenv:pyw35]
basepython = C:/Python/64bit/351/python.exe

[testenv:pyw36]
basepython = C:/Python/64bit/362/python.exe

user330612 предлагает вариант этого, но мне лично не удалось заставить его работать.

[testenv]
commands = {envpython} setup.py test
basepython=
   pyw35: C:/Python/64bit/351/python.exe
   pyw36: C:/Python/64bit/362/python.exe
person Carel    schedule 04.06.2018