【问题标题】:How Should I Set Default Python Version In Windows?我应该如何在 Windows 中设置默认 Python 版本?
【发布时间】:2020-04-09 22:24:54
【问题描述】:

我在 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文件就可以了

标签: batch-file windows-7 environment-variables python-2.6 python-3.1


【解决方案1】:

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

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

运行“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(不良版本)路径对我有用。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    如果您是 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)。


    另请参阅

    【讨论】:

      【解决方案6】:

      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

      【讨论】:

        【解决方案7】:
        1. 编辑注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\python.exe\default
        2. 设置默认程序打开.py文件为python.exe

        【讨论】:

          【解决方案8】:

          这对我有用:

          前往

          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 变量中只保留您想要的版本。

          【讨论】:

            【解决方案9】:

            这对我有用。

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

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

            第一步

            第二步

            第三步

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

            python--版本

            >>> Python 3.6
            

            【讨论】:

            • Oraios @George C.
            【解决方案10】:

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

            assoc .py=<Python 3.1 directory>
            

            【讨论】:

              【解决方案11】:

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

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

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

              【讨论】:

                【解决方案12】:

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

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

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

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

                【讨论】:

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

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

                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

                【讨论】:

                  【解决方案14】:

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

                  SET PATH=C:\Program Files\Python 3.5
                  

                  【讨论】:

                    【解决方案15】:

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

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

                    【讨论】:

                    • 我已经正确设置了环境变量,对于我的问题,它在 bat 文件中不起作用
                    • 还是谢谢你!我找到了正确的方法,我修改了HKEY_LOCAL_CLASS\Applications\Python.exe\shell\open\command中的注册表项的值,然后对bat文件就可以了
                    猜你喜欢
                    • 2012-03-10
                    • 2022-11-20
                    • 2016-04-29
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-09-25
                    • 2020-11-22
                    • 1970-01-01
                    相关资源
                    最近更新 更多