繁体   English   中英

如何管理 Windows 10 中的多个 Python 版本以与 Python 一起使用?

[英]How to manage multiple Python versions in Windows 10 to use with Python tox?

我正在尝试使用tox在 Python 3.7 和 3.8 上对我的项目进行pytest测试自动化,但我正在努力解决如何最好地设置它。 在我的 Windows 10 机器上安装多个 Python 版本以便将它们与tox一起使用的最简单方法是什么?

如果我只是使用官方安装程序手动安装它们,我该如何设置我的环境变量? 因为每个安装都包含python.exe ,所以如果我安装两个版本并添加它们的路径C:\Program Files\Python37\C:\Program Files\Python38\来区分它们... python将仅指列出的第一个。 那么我是否需要 go 并手动将python.exe文件重命名为python37.exepython38.exe之类的名称? 这一切看起来都非常手动和笨重,但我找不到任何更简单的方法或关于这一步的教程。

tox文档只是提供了一个使用 conda 的解决方案,但我没有使用 conda 并且不想切换到它只是为了使用tox

如果 Python 版本路径和别名是手动设置的,那么如果有人克隆我的项目以在 PR 上工作并希望在本地运行测试,如果他们的 Python 安装位置不同或它们在不同的操作系统上,则 tox 将无法正常工作。 是否有一些标准的方法来定义和设置这一切,以便在机器之间保持简单和一致?

如果这一切都是不可避免的,那么在可以在任何机器或 CI/CD 管道上运行的多个 Python 版本中持续测试项目的tox替代方案是什么?

tox实现了相当多的逻辑来查找已安装的 Python 解释器。

虽然文档缺少一些细节(也许你想创建一个问题?),我们仍然可以查看源代码:

@tox.hookimpl
def tox_get_python_executable(envconfig):
    spec, path = base_discover(envconfig)
    if path is not None:
        return path
    # second check if the py.exe has it (only for non path specs)
    if spec.path is None:
        py_exe = locate_via_pep514(spec)
        if py_exe is not None:
            return py_exe

    # third check if the literal base python is on PATH
    candidates = [envconfig.basepython]
    # fourth check if the name is on PATH
    if spec.name is not None and spec.name != envconfig.basepython:
        candidates.append(spec.name)
    # or check known locations
    if spec.major is not None and spec.minor is not None:
        if spec.name == "python":
            # The standard names are in predictable places.
            candidates.append(r"c:\python{}{}\python.exe".format(spec.major, spec.minor))
    return check_with_path(candidates, spec)

如您所见,有五种方法可以确定 Windows 系统上可用的 Python 解释器。

Especially the second one looks promising -it is using the already mentioned Python launcher for Windows, also see https://www.python.org/dev/peps/pep-0514/

据我了解,您只需要安装您的 Python 解释器,它们就会自动被发现。

tox绝对是针对本地和 CI 中的多个解释器测试 Python 应用程序的非常好的方法。

PS:是的,它有效!

我刚刚 rdp'ed 到一个 Windows 盒子,安装了 Python 3.8 和tox.ini 3.9 - 只需单击以下默认安装程序,然后创建。

[tox]
envlist = py38, py39

[testenv]
commands = python -c "print('hello')"
skip_install = true

两个解释器都被检测到并且两个环境都被执行了。

(venv) C:\Users\jugmac00\Projects\stackoverflow>tox
py38 create: C:\Users\jugmac00\Projects\stackoverflow\.tox\py38
py38 run-test-pre: PYTHONHASHSEED='296'
py38 run-test: commands[0] | python -c 'print('"'"'hello'"'"')'
hello
py39 create: C:\Users\jugmac00\Projects\stackoverflow\.tox\py39
py39 run-test-pre: PYTHONHASHSEED='296'
py39 run-test: commands[0] | python -c 'print('"'"'hello'"'"')'
hello
_______________________________________________________ summary _______________________________________________________
  py38: commands succeeded
  py39: commands succeeded
  congratulations :)

(venv) C:\Users\jugmac00\Projects\stackoverflow>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM