5

我正在尝试在 Windows 上设置tox以针对多个 python 安装运行测试。我已经将每个 python 安装在名为 的文件夹中C:\Python\PythonXX_YYXX它是 python 版本(例如 27)并且YY是 32 或 64。目前,我的 PATH 中唯一的 python 是C:\Python\Python33_64,因为我使用新的 python 启动器来运行我想要的任何版本。我也在从这个版本运行 tox。

第一个问题是 tox 没有检测到这些安装,大概是因为它们不在默认位置。我可以通过在 tox.ini 中为每个环境设置路径来解决这个问题,但它使设置非常适合我的计算机。有没有更好的方法让 tox 知道我的蟒蛇在全球范围内的位置?

第二个问题是,在 tox.ini 中设置 python 位置,当我运行它时出现以下错误(对于 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)

看起来它试图从 Python3.3 安装 Python2.7 的东西,但我以前从未真正使用过 virtualenv,所以我可能会误解这个错误。

我不确定解决方案是什么,但在我看来,显而易见的解决方案应该是让 tox 使用 python 启动器来获取它需要的 python 版本。有没有办法让它做到这一点?

4

2 回答 2

3

看起来 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\ 等处。注意点.而不是下划线_。虽然这是一种痛苦。

于 2013-08-16T09:14:08.460 回答
2

我不确定当 OP 第一次提出问题时 Tox 是否这样做了,但现在似乎可以单独设置每个环境,如下所示:

[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
于 2018-06-04T11:06:59.920 回答