如何管理 Windows 10 中的多个 Python 版本以与 Python tox 一起使用?
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\
添加到我的 Path 环境变量中,这将无法区分它们... python
将只引用列出的第一个。那么我是否需要手动将 python.exe
文件重命名为 python37.exe
和 python38.exe
之类的名称?这一切看起来非常手动和笨拙,但我找不到关于此步骤的任何更简单的方法或教程。
tox
文档只是给出了使用 conda 的解决方案,但我没有使用 conda,也不想切换到它只是为了使用 tox
。
如果 Python 版本路径和别名是手动设置的,那么如果有人克隆我的项目来处理 PR 并想 运行 在本地测试,如果他们 Python 安装位置不同或它们在不同的 OS。是否有一些标准的方法来定义和设置这一切,以便所有机器之间的事情变得简单和一致?
如果这一切都无法避免,那么 tox
的替代方案是什么,可以跨多个 Python 版本持续测试可以在任何机器或 CI/CD 管道上运行的项目?
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 解释器。
特别是第二个看起来很有前途 - 它使用已经提到的 Windows 启动器 Python,另见 https://www.python.org/dev/peps/pep-0514/
据我了解,您只需安装 Python 解释器,它们将自动被发现。
tox
绝对是针对多个解释器测试 Python 应用程序的好方法,无论是在本地还是在 CI.
中
P.S.: 是的,它有效!!
我刚刚通过 rdp 进入 Windows 框,安装了 Python 3.8 和 Python 3.9 - 只是点击了默认安装程序,并创建了以下内容 tox.ini
[tox]
envlist = py38, py39
[testenv]
commands = python -c "print('hello')"
skip_install = true
两个解释器都被检测到,两个环境都被执行了。
(venv) C:\Users\jugmac00\Projects\Whosebug>tox
py38 create: C:\Users\jugmac00\Projects\Whosebug\.tox\py38
py38 run-test-pre: PYTHONHASHSEED='296'
py38 run-test: commands[0] | python -c 'print('"'"'hello'"'"')'
hello
py39 create: C:\Users\jugmac00\Projects\Whosebug\.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\Whosebug>
我正在尝试使用 tox
在 Python 3.7 和 3.8 上自动对我的项目进行 pytest
测试,但我正在为如何最好地设置它而苦苦挣扎。在我的 Windows 10 机器上安装多个 Python 版本以便将它们与 tox
一起使用的最简单方法是什么?
如果我只是使用官方安装程序手动安装它们,我该如何设置我的环境变量?因为每个安装都包含 python.exe
,所以如果我安装两个版本并将它们的路径 C:\Program Files\Python37\
和 C:\Program Files\Python38\
添加到我的 Path 环境变量中,这将无法区分它们... python
将只引用列出的第一个。那么我是否需要手动将 python.exe
文件重命名为 python37.exe
和 python38.exe
之类的名称?这一切看起来非常手动和笨拙,但我找不到关于此步骤的任何更简单的方法或教程。
tox
文档只是给出了使用 conda 的解决方案,但我没有使用 conda,也不想切换到它只是为了使用 tox
。
如果 Python 版本路径和别名是手动设置的,那么如果有人克隆我的项目来处理 PR 并想 运行 在本地测试,如果他们 Python 安装位置不同或它们在不同的 OS。是否有一些标准的方法来定义和设置这一切,以便所有机器之间的事情变得简单和一致?
如果这一切都无法避免,那么 tox
的替代方案是什么,可以跨多个 Python 版本持续测试可以在任何机器或 CI/CD 管道上运行的项目?
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 解释器。
特别是第二个看起来很有前途 - 它使用已经提到的 Windows 启动器 Python,另见 https://www.python.org/dev/peps/pep-0514/
据我了解,您只需安装 Python 解释器,它们将自动被发现。
tox
绝对是针对多个解释器测试 Python 应用程序的好方法,无论是在本地还是在 CI.
P.S.: 是的,它有效!!
我刚刚通过 rdp 进入 Windows 框,安装了 Python 3.8 和 Python 3.9 - 只是点击了默认安装程序,并创建了以下内容 tox.ini
[tox]
envlist = py38, py39
[testenv]
commands = python -c "print('hello')"
skip_install = true
两个解释器都被检测到,两个环境都被执行了。
(venv) C:\Users\jugmac00\Projects\Whosebug>tox
py38 create: C:\Users\jugmac00\Projects\Whosebug\.tox\py38
py38 run-test-pre: PYTHONHASHSEED='296'
py38 run-test: commands[0] | python -c 'print('"'"'hello'"'"')'
hello
py39 create: C:\Users\jugmac00\Projects\Whosebug\.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\Whosebug>