我应该如何在 Windows 中设置默认 Python 版本?

Posted

技术标签:

【中文标题】我应该如何在 Windows 中设置默认 Python 版本?【英文标题】:How Should I Set Default Python Version In Windows? 【发布时间】:2011-07-02 13:12:26 【问题描述】:

我在 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)

这是怎么回事?

【问题讨论】:

.bat 文件中的 Python 代码不会被 Python 解释,而是 cmd.exe 尝试解释它,但这是行不通的。将 Python 代码放入 .py 文件中,然后在 .bat 中放入 python scriptfile.py 还是谢谢你!我找到了正确的方法,我修改了HKEY_LOCAL_CLASS\Applications\Python.exe\shell\open\command中的注册表项的值,然后对bat文件就可以了 【参考方案1】:

尝试修改windows注册表中的路径(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)。

警告:不要破坏注册表 :)

【讨论】:

我已经正确设置了环境变量,对于我的问题,它在 bat 文件中不起作用 还是谢谢你!我找到了正确的方法,我修改了HKEY_LOCAL_CLASS\Applications\Python.exe\shell\open\command中的注册表项的值,然后对bat文件就可以了 【参考方案2】:

Python 安装程序安装 Python Launcher for Windows。该程序 (py.exe) 与 Python 文件扩展名相关联,并查找“shebang”注释以指定要运行的 Python 版本。这允许 Python 的多个版本共存,并允许 Python 脚本在需要时明确指定要使用的版本。如果未指定,则默认使用当前架构的最新 Python 版本(x86 或 x64)。可以通过py.ini 文件或PY_PYTHON 环境变量自定义此默认值。有关详细信息,请参阅docs。

较新版本的 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,它安装在 Windows 目录中,因为它始终位于 PATH 中。

要使关联生效,请使用script.py 而非“python script.py”从命令行运行脚本,否则将运行python 而不是py。如果事实上最好从 PATH 中删除 Python 目录,那么“python”将不会运行任何东西并使用py 强制执行。

py.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 版本。 事后看来语气不太合适,所以我很抱歉 - 我想修改我的评论,我似乎无法做到 - 尽管 *** 的重点是有帮助,所以我认为指出行为似乎不再相同是适当的。 另外,我认为在 Python 3.3 之前,没有将 Python 添加到 PATH 的选项,但现在有了。但是,当 Python 向 Windows 注册自身时,以前它只会将一个显式 python.exe 与文件扩展名关联,因此最后安装时使用注册选项获胜。 Python 3.3 使用 Python Launcher 进行了更改,任何 Python 版本都可以通过脚本中的注释显式指定。 我在 python 安装文件夹中有一个 Launcher.zip(与多个 python 版本相同级别)。我刚刚解压了文件夹。运行cmd,输入“py”,启动器被识别并发送正确的python版本。【参考方案3】:
    编辑注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\python.exe\default 设置默认程序打开.py文件为python.exe

【讨论】:

【参考方案4】:

现在 Python 3.3 已经发布,使用此处描述的 py.exe 实用程序是最简单的: http://www.python.org/dev/peps/pep-0397/

它允许您使用 UNIX 样式指令在脚本文件中指定 Python 版本。还有用于控制运行哪个版本的 Python 的命令行和环境变量选项。

获取此实用程序的最简单方法是安装 Python 3.3 或更高版本。

【讨论】:

【参考方案5】:

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

因此,在我的系统上,我在 py.exe 所在的c:\windows\ 下创建了一个py.ini 文件,内容如下:

[defaults]
python=3

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

【讨论】:

【参考方案6】:

在 Windows CMD 中使用SET 命令临时设置当前会话的默认 python。

SET PATH=C:\Program Files\Python 3.5

【讨论】:

【参考方案7】:

上面没有任何效果,这对我有用:

ftype Python.File=C:\Path\to\python.exe "%1" %*

此命令应在以管理员身份启动的命令提示符下运行

警告:即使此命令中的路径设置为 python35,如果您安装了 python36,它也会将默认设置为 python36。为了防止这种情况,您可以暂时将文件夹名称从 Python36 更改为 xxPython36,运行命令,然后删除对 Python 36 文件夹的更改。

【讨论】:

这不会改变在命令提示符中调用python 时的行为。 这将在我们仅使用其名称运行 python 时起作用【参考方案8】:

运行“py”命令会告诉你你运行的是什么版本。如果您当前运行的是 3.x 并且需要切换到 2.x,则需要使用 switch '-2'

py -2

如果您需要从 python 2.x 切换到 python 3.x,则必须使用 '-3' 开关

py -3

如果您希望将 Python 3.x 作为默认版本,则需要创建环境变量“PY_PYTHON”并将其值设置为 3。

【讨论】:

这个很有用,不需要编辑注册表项...在命令行中运行python 2脚本时...可以做到py -2 test.py ...然后默认python test.py if这是基于 python 3 的代码 PY_PYTHON 不起作用,从 PATH 变量中删除 python(不良版本)路径对我有用。【参考方案9】:

这对我有用:

前往

Control Panel\System and Security\System

选择

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

在系统变量部分搜索 (create if doesn't exist)

PYTHONPATH

设置

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

或您想要的版本

你需要重启 CMD。

如果它仍然不起作用,您可能希望在 PATH 变量中只保留您想要的版本。

【讨论】:

【参考方案10】:

检查系统当前使用的是哪一个:

python --version

将主文件夹位置(例如 C/ProgramFiles)和脚本位置(C/ProgramFiles/Scripts)添加到系统的环境变量中。添加 3.x 版本和 2.x 版本

路径位置在环境变量中排名。如果你想使用 Python 2.x 只需将 python 2.x 的路径放在首位,如果你想使用 Python 3.x 只需将 3.x 放在首位

This uses python 2

【讨论】:

【参考方案11】:

如果您同时安装了这两个版本。

转到This PC -> Right-click -> Click on Properties -> Advanced System Settings.

您将看到System Properties。从这里导航到"Advanced" 选项卡-> 单击Environment Variables

您将看到用户变量的上半部分和System variables下半部分

勾选System Variables并双击Path(编辑路径)。

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

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

【讨论】:

确保也获得路径的脚本部分:C:\Python27;C:\Python27\Scripts\; 这里要注意的一个细节:如果您在自定义安装期间没有勾选“为所有用户安装”(或没有以管理员身份安装),Python 将安装到 %LOCALAPPDATA%\Programs \Python,并在 user 环境变量中添加到 PATH。如果其他 Python 确实以管理员/所有用户的身份安装,它将进入 C:\Program Files\,并添加到 system 环境变量中的 PATH。通常,用户环境变量会覆盖系统变量,但 PATH 始终是(系统 PATH + 用户 PATH)。这就是让我绊倒的原因,所以我想我会在这里记录一下。 只是不要将它们中的任何一个添加到路径中并使用 Python 启动器。为什么每次切换时都要编辑路径?您还可以使用“py -x.y -m venv ”选择已安装的 python 创建虚拟环境,其中 x.y 是 Python 版本(必须已安装)。【参考方案12】:

这对我有用。

如果要使用python 3.6,则必须将python3.6移到列表顶部。

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

第一步

第二步

第三步

然后关闭任何 cmd 命令提示符并再次打开,它应该可以正常工作。

python--版本

>>> Python 3.6

【讨论】:

Oraios @George C.【参考方案13】:

如果您是 Windows 用户并且您拥有 Python 3.3 或更高版本,您应该在您的计算机上安装 Python Launcher for Windows,这是用于启动所有python 脚本(无论脚本需要什么 python 版本)。

作为用户

从命令行运行脚本时,始终键入py 而不是python

使用C:\Windows\py.exe 设置您的“打开方式...”资源管理器默认程序关联

设置命令行文件扩展名关联以使用适用于 Windows 的 Python 启动器(这将使输入 py 成为可选):

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

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

通过设置PY_PYTHON 环境变量(例如PY_PYTHON=3.7))设置您首选的默认版本。您可以通过输入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

您也可以使用 shebang 线来指示虚拟环境(请参阅下面的 PEP 486)。


另请参阅

PEP 397 -- Python launcher for Windows PEP 486 -- Make the Python Launcher aware of virtual environments Python Launcher for Windows - User Guide

【讨论】:

【参考方案14】:

如果您知道Environment variables 和名为path 的系统变量,请考虑任何较早出现的二进制版本的任何版本都将被用作默认值。

看下图,我有 3 个不同的 python 版本,但 python 3.8 将被用作默认值,因为它比其他两个版本来得早。 (如果是提到的图像,越早意味着越高!)

【讨论】:

【参考方案15】:

如果您使用的是 Windows,请使用 ASSOC 命令更改 Python 程序的默认 Python 版本。

assoc .py=<Python 3.1 directory>

【讨论】:

以上是关于我应该如何在 Windows 中设置默认 Python 版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows cmd终端中设置cd命令的默认目录?

如何在 Apache FOP 中设置默认语言

如何在 CMFCEditBrowseCtrl::EnableFileBrowseButton 中设置默认文件扩展名?

如何在 Eureka-Form 中设置默认值

如何在 Visual Studio 2010 中设置默认编码

如何在python类中设置此默认值