【问题标题】:Set up multiple python installations on windows with tox使用 tox 在 windows 上设置多个 python 安装
【发布时间】:2012-12-12 06:53:34
【问题描述】:

我正在尝试在 Windows 上设置 tox 以针对多个 python 安装运行测试。我已将每个 python 安装在名为 C:\Python\PythonXX_YY 的文件夹中,XX 是 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 版本。有没有办法让它做到这一点?

【问题讨论】:

  • 您使用的是哪个 virtualenv 版本?如果不是最新的,你可以试试吗?
  • @hpk42 我刚刚更新到最新的,但没有任何区别。

标签: python virtualenv tox


【解决方案1】:

看起来 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()

所以你应该把你的 python 放在 c:\Python3.3\ 等处。注意点 . 而不是下划线 _。虽然这很痛苦。

【讨论】:

【解决方案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

【讨论】:

    猜你喜欢
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 2016-02-29
    • 2018-03-18
    • 1970-01-01
    相关资源
    最近更新 更多