安装了多个 Python 版本:如何为 CMD 和 "Open with" 设置 py.exe(Python Launcher Windows)的默认版本

Multiple Python versions installed : how to set the default version for py.exe (Python Launcher for Windows) for CMD and for "Open with"

简述:
我安装了两个版本的 Python:Python 3.6 和 Python 3.9。 我想使用 Windows 的 Python 启动器打开所有 .py.pyw(例如:当我双击它们时)。我希望 Windows 的 Python 启动器的默认版本为 Python 3.6,这样没有 shebang 的文件可以使用 Python 3.6 打开。 Python 3.9 应该只用于带有 shebang 的文件 #! python3.9

当我右键单击一个文件时,选择open with和select C:\Windows\py.exe,然后默认情况下(没有任何shebang)打开的是Python 3.9 . 当我在 CMD 中键入 py 时,我得到 Python 3.6.5.
但是如果我双击 C:\Windows\py.exe 控制台是 Python 3.9.5.

如果我设置 open all .py' to C:\Windows\py.exe, then if they don't have a sheband they will be started with Python 3.6.5`?

如何确定

详情:

在安装 Python 3.9 之前,我一直在 运行 上使用 Python 3.6。我还没有将所有包更新到 Python 3.9,所以我希望默认的 Python 是 3.6。对于需要使用 Python 3.9 的脚本,我使用了 shebang #! python3.9.

所以我想将 Opens with... 默认设置为 C:\Windows\py.exe,但如果我这样做,我的脚本在 Python 3.9.5 中打开,所以它们失败了。

我已经做过的事情:

  1. 我创建了一个 C:\Windows\py.ini,默认设置为 python=3.6(与 pyw 相同)。

  2. 在路径中,我将 C:\Users\user\AppData\Local\Programs\Python\Python36\ 移动到 C:\Users\user\AppData\Local\Programs\Python\Python39 上方。

  3. 我已经将另一个环境变量 PY_PYTHON 设置为 PY_PYTHON=3.6

  4. 我有运行 assoc .py=Python

  5. Windows documentationThe py.exe launcher will automatically select the most recent version of Python you've installed,所以我重新安装了Python 3.6(在已经安装了Python 3.9之后)但是,仍然是默认的当我用 C:\WINDOWS\py.exe

    打开文件时设置为 Python 3.9
  6. ftype | find "Python"return这个

    Python.ArchiveFile="C:\WINDOWS\py.exe" "%L" %*
    Python.CompiledFile="C:\WINDOWS\py.exe" "%L" %*
    Python.File="C:\WINDOWS\py.exe" "%L" %*
    Python.NoConArchiveFile="C:\WINDOWS\pyw.exe" "%L" %*
    Python.NoConFile="C:\WINDOWS\pyw.exe" "%L" %*

我在 Windows 10

一旦您安装了 Python 的第二个版本(在本例中为 Python 3.9),如果您仍希望之前的版本(在本例中为 Python 3.6)是默认的,那么你可以这样做:
1) 在CMD

中为py命令设置默认Python版本
  • 转到 C:\WINDOWS\ 并创建 2 个文件 py.inipyw.ini

  • 这两个文件都应该包含

    [默认值]
    python=3.6

完成后,如果您在 CMD 中输入 py,它将打开 Python 3.6 控制台。如果您想要 Python 3.9 控制台,请输入 py -3.9。要查看默认值,运行 py -0p 并查找 *

Installed Pythons found by py Launcher for Windows    
 -3.9-64        C:\Users\<user>\AppData\Local\Programs\Python\Python39\python.exe    
 -3.6-64        C:\Users\<user>\AppData\Local\Programs\Python\Python36\python.exe *   

不要再在 CMD 中使用 python,始终使用带有正确参数的 py [如@karl-knechtel 的评论所示:如果您有一个活动 venv, using python instead of py` 将优先考虑 venv 的 Python,这通常是您想要的]:

py -3.9 pip install     # will install package for 3.9
py pip install     # will install package for 3.6

2) 设置文件双击打开时的默认Python版本

  • 转到 C:\Users\<user>\AppData\Local\Programs\Python\Launcher\ 并创建 2 个文件 py.inipyw.ini

  • 这两个文件都应该包含

    [默认值]
    python=3.6

  • 右键单击任何 .py、select open with,选中 Always use this app...,一直向下滚动并单击 more app,再次向下滚动并单击 look for another app...,然后单击 select C:\WINDOWS\py.exe

完成后,如果文件不包含 shebang,那么它将使用默认的 Python 版本启动,即 3.6。要使用 Python 3.9,请将此 #!python3.9 添加到脚本的最顶部

如果你想在设置 open all with... 之前进行测试,你可以在一些测试脚本的最顶部添加这些以查看将使用哪个版本,然后使用 open with 而不检查 use for all:

  • 应该是3.9

    #!python3.9
    导入系统
    打印(sys.version_info)
    输入(“关闭”)

  • 应该是 3.6 因为它会调用默认值

    #!python
    导入系统
    打印(sys.version_info)
    输入(“关闭”)

  • 应该是 3.6 因为它会调用默认值

    导入系统
    打印(sys.version_info)
    输入(“关闭”)

  • 应该是 3.9 因为它是最新的 python 3 安装

    #!python3
    导入系统
    打印(sys.version_info)
    输入(“关闭”)