我应该如何在 Windows 中设置默认 Python 版本?
Posted
技术标签:
【中文标题】我应该如何在 Windows 中设置默认 Python 版本?【英文标题】:How Should I Set Default Python Version In Windows? 【发布时间】:2011-07-02 13:12:26 【问题描述】:我在 Windows 7 上安装了 Python 2.6
和 Python 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 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_PYTHON3
或PY_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 版本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CMFCEditBrowseCtrl::EnableFileBrowseButton 中设置默认文件扩展名?