在Windows中如何设置默认的Python版本?

150

我在Windows 7上安装了Python 2.6Python 3.1,并设置了环境变量:path = d:\python2.6

当我在cmd中运行python时,它显示的是我想要的Python 2.6版本!但是,当我编写一个bat文件并运行它时,显示的Python版本是3.1。

import sys
print (sys.version)

这里发生了什么?


将Python代码放在.bat文件中不会被Python解释,而是由cmd.exe尝试解释,这不起作用。将Python代码放在.py文件中,然后在.bat文件中放置python scriptfile.py - martineau
谢谢你的回复!我已经找到正确的方法,我修改了注册表项 HKEY_LOCAL_CLASS\Applications\Python.exe\shell\open\command 的值,然后.bat文件就可以正常运行了。 - rooney
19个回答

164

如果您同时安装了两个版本,请按以下步骤进行操作。

进入此电脑右键单击点击属性高级系统设置

您将看到系统属性。从这里导航到高级选项卡-〉单击环境变量

您将看到用户变量的上半部分和系统变量的下半部分。

检查系统变量,并双击路径(以编辑路径)。

检查Python的路径(您希望运行的Python 2.x或3.x),并将其移到路径列表的顶部

重新启动命令提示符,现在当您检查Python的版本时,它应该正确显示所需的版本。


20
请确保同时获取路径中的“Scripts”部分:C:\Python27;C:\Python27\Scripts; - eliteproxy
10
需要注意一个细节:如果在自定义安装过程中没有选择“为所有用户安装”(或未以管理员身份安装),Python将被安装到%LOCALAPPDATA%\Programs\Python,并添加到您的用户环境变量的PATH中。如果其他 Python 确实是以管理员/为所有用户安装的,则会安装在C:\Program Files\中,并在系统环境变量的PATH中添加。通常,用户环境变量会覆盖系统环境变量,但 PATH 始终为(系统PATH + 用户PATH)。这就是我刚刚遇到的问题,所以我想在这里记录一下。 - Ryan Plant
5
不要将它们添加到路径中,而是使用Python启动程序。为什么每次切换时都要编辑路径?你也可以使用“py -x.y -m venv <environment>”创建安装所需版本的虚拟环境,其中 x.y 是Python版本(必须已安装)。 - Mark Tolonen
4
不再与Python 3.11兼容(在3.9中可用)。 - JinSnow
请注意,如果您在Windows上进行安装并选择“添加到Python路径”,安装程序会自动将最新版本放在首位(若存在其他版本)。 - Ralph Willgoss
这已经过时了。 - Marcel

112
Python安装程序会安装Windows Python Launcher。该程序(py.exe)与Python文件扩展名相关联,并查找"shebang"注释以指定要运行的Python版本。这允许许多版本的Python共存,并允许Python脚本明确指定要使用的版本(如果需要的话)。如果未指定,则默认使用当前架构(x86或x64)的最新Python版本。可以通过py.ini文件或PY_PYTHON环境变量自定义此默认值。有关详细信息,请参见文档
Python的新版本会更新启动器。最新版本具有py -0选项,可列出已安装的Python并指示当前默认值。
以下是如何从控制台检查启动器是否正确注册的方法:
C:\>assoc .py
.py=Python.File

C:\>ftype Python.File
Python.File="C:\Windows\py.exe" "%1" %*

上面的.py文件与Python.File类型相关联。 Python.File的命令行是Python Launcher,由于它始终在PATH中,因此安装在Windows目录中。
为了使关联起作用,请使用script.py从命令行运行脚本,而不是“python script.py”,否则将运行python而不是py。 实际上,最好从PATH中删除Python目录,这样“python”就不会运行任何内容并强制使用pypy.exe也可以使用开关来强制使用Python版本:
py -3 script.py       # select latest Python 3.X version to be used.
py -3.6 script.py     # select version 3.6 specifically.
py -3.9-32 script.py  # select version 3.9 32-bit specifically.
py -0                 # list installed Python versions (latest PyLauncher).

此外,将.py;.pyw;.pyc;.pyo添加到PATHEXT环境变量中,然后命令行就可以只使用script而无需扩展名。

@TomW,下次我会用我的水晶球。刚刚发布的版本安装程序可能与该回答两年前不同。如果再有类似情况,我会使用Python 3.3附带的py.exe启动器通过shebang注释来控制脚本使用的Python版本。 - Mark Tolonen
1
事后看来,我的语气并不太合适,所以我道歉了。我想修改我的评论,但似乎无法做到。尽管StackOverflow的目的是为了帮助,但我认为指出行为似乎不再相同是恰当的。 - Tom W
此外,我认为在Python 3.3之前,没有选项将Python添加到PATH中,但现在有了。然而,当Python向Windows注册时,以前它只会将一个明确的python.exe与文件扩展名关联,因此最后安装的注册选项获胜。Python 3.3通过Python Launcher改变了这一点,并且可以在脚本中使用注释来明确指定任何Python版本。 - Mark Tolonen
我在Python安装文件夹中有一个Launcher.zip(与多个Python版本处于同一级别)。我只需解压该文件夹。运行cmd,输入“py”,启动器将被识别并发送适当的Python版本。 - JinSnow

82

运行 'py' 命令将告诉您正在运行的版本。如果您当前正在运行 3.x 并且需要切换到 2.x,则需要使用开关 '-2'

py -2

如果您需要从Python 2.x切换到Python 3.x,则必须使用“-3”开关。

py -3
如果您想将 Python 3.x 设置为默认版本,那么您需要创建环境变量 'PY_PYTHON' 并将其值设置为 3。

3
这个很有用,不需要编辑注册表键值... 在命令行运行 Python 2 脚本时... 可以输入 py -2 test.py ...然后默认使用 python test.py 如果是基于 Python 3 的代码。 - sasori
1
PY_PYTHON无法工作,将不需要的Python版本路径从PATH变量中删除对我有用。 - Naveen Kumar
输入 py -0 查看可用版本列表。然后从列表中选择,例如 py -3.10,如果你的列表中有 3.10 版本。 - pds

28

如果你了解环境变量(Environment variables)和被称为path的系统变量,那么可以考虑任何先到的任何二进制版本都将被用作默认版本。

看一下下面的图片,我有3个不同的Python版本,但是Python 3.8将作为默认版本使用,因为它比另外两个版本更早。(在这张图片中,更早指的是更高的版本!)

输入图片说明


23
如果你是Windows用户,拥有Python 3.3或更高版本,则应该在你的计算机上安装Python Launcher for Windows。这是推荐的方法,用于启动所有Python脚本(无论脚本需要哪个Python版本)。
作为用户: - 在命令行运行脚本时,始终使用py而不是python。 - 将“打开方式...”资源管理器默认程序关联设置为C:\Windows\py.exe - 设置命令行文件扩展名关联使用Python Launcher for Windows。(这将使输入py变成可选项)。在管理员cmd终端中运行以下命令:

ftype Python.File="C:\Windows\py.exe" "%L" %*

ftype Python.NoConFile="C:\Windows\pyw.exe" "%L" %*

- 通过设置PY_PYTHON环境变量来设置首选默认版本 (例如:PY_PYTHON=3.11))。你可以通过输入py来查看默认Python版本。还可以设置PY_PYTHON3PY_PYTHON2来指定默认Python 3和Python 2版本(如果你有多个版本)。
  • 如果您需要运行特定版本的Python,可以使用py -M.m(其中M是主要版本号,m是次要版本号)。例如,py -3将运行任何已安装的Python 3版本。

  • 使用py -0列出已安装的Python版本。

  • 作为脚本编写者

    • 在脚本顶部包含一个shebang行,指示所需的Python主要版本号。如果脚本与其他任何次要版本不兼容,请同时包括次要版本号。例如:

      #!/usr/bin/env python3

      注意:(请参见此问题)如果python3对您不起作用,请确保您已从Windows商店安装了Python(例如通过winget install --id 9NRWMJP3717K),因为winget软件包Python.Python.3.11似乎不包括python3.exe)。

    • 您还可以使用shebang行指示虚拟环境(请参见下面的PEP 486)。


    另请参阅


    很好的答案。关于您的第二点“设置您的打开方式...” - 我想在这里补充一点,如果您已经将Python 2.7设置为默认的打开方式,则需要先取消关联,然后才能将Python 3.x设置为默认的打开方式。例如,C:\ Python27 \ python.exe需要重命名为python_old.exe。之后,运行您的.py文件,它应该无法找到python.exe。接下来,设置打开方式指向例如C:\ Python39 \ python.exe,这将解决问题。然后,您可以将python_old.exe重新命名为C:\ Python27下的python.exe。 - shadowz1337

    16

    See here for original post

    ;
    ; This is an example of how a Python Launcher .ini file is structured.
    ; If you want to use it, copy it to py.ini and make your changes there,
    ; after removing this header comment.
    ; This file will be removed on launcher uninstallation and overwritten
    ; when the launcher is installed or upgraded, so don't edit this file
    ; as your changes will be lost.
    ;
    [defaults]
    ; Uncomment out the following line to have Python 3 be the default.
    ;python=3
    
    [commands]
    ; Put in any customised commands you want here, in the format
    ; that's shown in the example line. You only need quotes around the
    ; executable if the path has spaces in it.
    ;
    ; You can then use e.g. #!myprog as your shebang line in scripts, and
    ; the launcher would invoke e.g.
    ;
    ; "c:\Program Files\MyCustom.exe" -a -b -c myscript.py
    ;
    ;myprog="c:\Program Files\MyCustom.exe" -a -b -c
    

    因此,在我的系统上,我在 c:\windows\ 下创建了一个 py.ini 文件,其中包含以下内容:
    [defaults]
    python=3
    

    现在,当您双击一个.py文件时,它将由新的默认版本运行。现在我只在我的旧脚本中使用Shebang #! python2

    9

    这对我有效。

    如果您想使用python 3.6,必须将python3.6移动到列表的顶部。

    同样适用于python2.7。如果您想将2.7设置为默认值,请确保将python2.7移到列表的顶部。

    步骤1

    enter image description here

    步骤2

    enter image description here

    步骤3

    enter image description here

    然后关闭任何命令提示符并重新打开,它应该按预期工作。

    python --version

    >>> Python 3.6
    

    2
    Oraios @George C. - Datacrawler

    9
    1. 编辑注册表键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\python.exe\default
    2. 将默认程序设置为 python.exe,用于打开 .py 文件。

    注:以上内容涉及 IT 技术,请谨慎操作。

    6

    我在我的Windows 11操作系统上安装了Python版本2.73.73.93.11,但是之前建议的解决方案都遇到了问题。然而,我找到了一个简单的方法,可以解决这个问题。

    首先,让我们了解如何使用py命令设置默认的Python版本。运行py --help提供了一些提示,包括引用位于%LOCALAPPDATA%\py.ini中的py.ini文件。该文件允许我们指定默认的Python版本。

    要设置特定的默认Python版本:

    1. 打开文本编辑器或在%LOCALAPPDATA%\py.ini中创建一个文件。

    2. 将以下内容添加到py.ini文件中:

    [defaults]
    python=3.7
    
    1. 保存文件。

    现在,当您在控制台中运行 py --version 时,它应该显示指定的默认 Python 版本。

    请注意以下其他需要考虑的要点:

    • 设置默认 Python 版本的目的:设置特定的默认 Python 版本可以有助于确保与某些依赖项兼容或在项目间保持一致性。

    • %LOCALAPPDATA% 的位置%LOCALAPPDATA% 环境变量通常指 C:\Users\<username>\AppData\Local。如果在该位置不存在 py.ini 文件,则可以手动创建。


    可以在3.9版本上工作,但无法在3.11版本上工作(相关链接:https://stackoverflow.com/questions/68121982/multiple-python-versions-installed-how-to-set-the-default-version-for-py-exe/68139696#68139696)。 - JinSnow
    2
    通过设置 python=3.11,使用 C:\Users\bob>py --version 命令可以获得 Python 3.11.0 版本。不过也有可能我并没有理解你的评论点。 - flydev

    5

    This worked for me:

    Go to

    Control Panel\System and Security\System
    

    选择

    Advanced system settings from the left panel
    from Advanced tab click on Environment Variables
    

    在系统变量部分搜索 (如果不存在则创建)。
    PYTHONPATH
    

    并设置

    C:\Python27\;C:\Python27\Scripts;
    

    或者您需要的版本

    您需要重新启动CMD。

    如果仍然无法正常工作,您可能希望在PATH变量中仅保留您需要的版本。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接