【问题标题】:Can I install Python 3.x and 2.x on the same Windows computer?我可以在同一台 Windows 计算机上安装 Python 3.x 和 2.x 吗?
【发布时间】:2010-09-25 08:47:26
【问题描述】:

我正在运行 Windows,当您在命令行上运行程序时,shell/OS 会根据注册表设置自动运行 Python。如果我在同一台机器上安装 2.x 和 3.x 版本的 Python,这会中断吗?

我想在使用 Python 3 的同时仍然能够在同一台机器上运行 2.x 脚本。

【问题讨论】:

  • 在我的发行版 Fedora 中,它在 /usr/bin/python 安装 Python 2.7,在 /usr/bin/python3 安装 Python 3.3。也为 Python3 的 Pip 和 IPython 提供了不同的名称。非常方便。
  • @user - 在精神上我同意你的回答,但我已经被这种精神燃烧了很多次,我明白为什么有人会在做出飞跃之前问。
  • 这里的答案似乎都是关于如何选择何时运行哪个python。我的问题是安装程序 (3.6.2) 无法运行,因为它显示“已安装此产品的另一个版本”。原来我已经安装了 3.6.3。

标签: python windows python-3.x compatibility


【解决方案1】:

官方的共存解决方案似乎是Python Launcher for Windows,PEP 397 包含在Python 3.3.0 中。安装发布转储 py.exepyw.exe 启动器到 %SYSTEMROOT% (C:\Windows) 然后分别与 pypyw 脚本相关联。

为了使用新的启动器(无需手动设置您自己的关联),请启用“注册扩展”选项。我不太清楚为什么,但在我的机器上它把 Py 2.7 作为“默认”(启动器)。

通过直接从命令行调用它们来运行脚本,它们将通过启动器并解析 shebang(如果存在)。您还可以显式调用启动器并使用开关:py -3 mypy2script.py

各种shebangs似乎都有效

  • #!C:\Python33\python.exe
  • #!python3
  • #!/usr/bin/env python3

还有肆无忌惮的虐待

  • #! notepad.exe

【讨论】:

  • “他们”确实应该在当前适用于 Windows 的 Python 2 发行版中包含 plauncher(或者让人们更加了解它的可用性以及自己在哪里获得它)。
  • 也许吧,但如果你只是生活在 Python 2 的世界里,这没什么大不了的。
  • 这个启动器至少从 2012 年年中开始作为独立程序提供。
  • @Mooncrater 您可以检查哪个将与where.exe pip 一起使用。我认为 Python 3 安装程序为其 pip 安装了一个 pip3 别名,但我认为您也可以执行类似 py -3 -m pip install requests 的操作。
【解决方案2】:

这是我的设置:

  1. 使用windows installers 安装 Python 2.7 和 3.4。
  2. 转到C:\Python34(默认安装路径)并将python.exe更改为python3.exe
  3. 编辑 your environment variables 以包含C:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

现在,您可以在命令行中使用 python 用于 2.7 和 python3 用于 3.4。

【讨论】:

  • 比如pip在cli呢?
  • 最新版本的 python 2 和 3 附带 pip。所以你可以分别使用pippip3
  • 我只是指出您最终不得不重命名所有这些实用程序。即便如此,如果 python3 显式(例如:硬编码)调用 pip 而不是 pip3,则存在中断的风险。
  • 这是个坏主意,最终会重命名所有内容,而 pip 不能那样工作。
  • 停止在 python3 上遇到 pip 问题。您需要从初始 python3 安装向导中 UNSLECT“安装 pip”,然后将 python3.7/python.exe 重命名为 python3.exe,然后下载 get-pip.py 并运行 python3.exe get-pip.py。所以 pip3 知道重命名的 python3.exe 是为 python3 而不是原来的 /python3.7/python.exe
【解决方案3】:

从 3.3 版开始,Python 引入了 Launcher for Windows 实用程序 https://docs.python.org/3/using/windows.html#python-launcher-for-windows

所以要能够使用多个版本的 Python:

  1. 安装 Python 2.x(x 是您需要的任何版本)
  2. 安装 Python 3.x(x 是您需要的任何版本,也必须有一个版本 3.x >= 3.3)
  3. 打开命令提示符
  4. 键入 py -2.x 以启动 Python 2.x
  5. 键入 py -3.x 以启动 Python 3.x

【讨论】:

  • 那些使用 IDE 的人呢?这也适用吗?
  • @emorphus 我猜这取决于 IDE,但通常你应该能够选择解释器的版本。因此,如果您安装了多个 Python 版本,只需选择要在项目中使用的那个。此外,IDE 中的终端与命令提示符的工作方式相同,因此这些命令也应该在那里工作。
  • 这是 IMO 的最佳解决方案,它从一开始就完美运行。不需要-3.x 你可以做py -3 filename.py
【解决方案4】:

你可以同时安装。

你应该在你的脚本前面写下这个:

#!/bin/env python2.7

或者,最终……

#!/bin/env python3.6

更新

我的解决方案在 Unix 上完美运行,在 Google 上快速搜索后,这里是 Windows 解决方案:

#!c:/Python/python3_6.exe -u

同样的事情:在你的脚本前面。

【讨论】:

  • 嗯,它可以安装在Linux上,也可以安装在Windows上。你只需要设置环境变量..你可以在 Windows 中做到这一点......
  • 此解决方案不适用于 Windows(除非您从 unix 样式的 shell(例如 cygwin)调用它)。这 #!由shell处理,windows不支持。我相信在你用谷歌搜索的示例中,它是由网络服务器处理的,不是在 Windows 中启动
  • 是的,在 Windows 上的 Apache 上...问题自动请求 shell,您可以使用 Cygwin、Apache 等...
  • @Daok :我没有对你投反对票。我很感激你的帮助,即使是尝试帮助。
  • 可以使用pylauncher 来完成类似的工作(如2011 年PEP 397 -- Python launcher for Windows 中所述。
【解决方案5】:

我正在使用 shell 中的 2.5、2.6 和 3.0 以及以下形式的一行批处理脚本:

:: The @ symbol at the start turns off the prompt from displaying the command.
:: The % represents an argument, while the * means all of them.
@c:\programs\pythonX.Y\python.exe %*

将它们命名为 pythonX.Y.bat 并将它们放在 PATH 中的某个位置。将首选次要版本(即最新)的文件复制到pythonX.bat。 (例如copy python2.6.bat python2.bat。)然后您可以在任何地方使用python2 file.py

但是,这无助于甚至影响 Windows 文件关联情况。为此,您需要一个读取 #! 行的启动程序,然后将其与 .py 和 .pyw 文件相关联。

【讨论】:

  • 请参阅 my comment 了解 Patrick Desjardins 的回答。
【解决方案6】:

当您将两者都添加到环境变量时,会发生冲突,因为这两个可执行文件具有相同的名称:python.exe

只需重命名其中一个。就我而言,我将其重命名为 python3.exe

所以当我运行python 时,它将执行python.exe,即2.7 当我运行python3 时,它将执行python3.exe,即3.6

【讨论】:

  • 你能详细说明一下注释部分吗?当我将 python 重命名为 python3 时,我无法再运行 pip,因为似乎 pip.exe、pip3.exe 和 pip3.7.exe 都依赖于 python.exe。当我运行 pip 时,我得到错误 => Fatal error in launcher: Unable to create process using '"c:\users\<my_username>\appdata\local\programs\python\python37-32\python.exe" "C:\Users\<my_username>\AppData\Local\Programs\Python\Python37-32\Scripts\pip.exe" '.
  • 我不知道我没有这个问题
  • @MandarSadye 可以在记事本中打开pip.exe,搜索python.exe..然后将python.exe替换成python3.exe
【解决方案7】:

给你...

winpylaunch.py​​

#
# Looks for a directive in the form: #! C:\Python30\python.exe
# The directive must start with #! and contain ".exe".
# This will be assumed to be the correct python interpreter to
# use to run the script ON WINDOWS. If no interpreter is
# found then the script will be run with 'python.exe'.
# ie: whatever one is found on the path.
# For example, in a script which is saved as utf-8 and which
# runs on Linux and Windows and uses the Python 2.6 interpreter...
#
#    #!/usr/bin/python
#    #!C:\Python26\python.exe
#    # -*- coding: utf-8 -*-
#
# When run on Linux, Linux uses the /usr/bin/python. When run
# on Windows using winpylaunch.py it uses C:\Python26\python.exe.
#
# To set up the association add this to the registry...
#
#    HKEY_CLASSES_ROOT\Python.File\shell\open\command
#    (Default) REG_SZ = "C:\Python30\python.exe" S:\usr\bin\winpylaunch.py "%1" %*
#
# NOTE: winpylaunch.py itself works with either 2.6 and 3.0. Once
# this entry has been added python files can be run on the
# commandline and the use of winpylaunch.py will be transparent.
#

import subprocess
import sys

USAGE = """
USAGE: winpylaunch.py <script.py> [arg1] [arg2...]
"""

if __name__ == "__main__":
  if len(sys.argv) > 1:
    script = sys.argv[1]
    args   = sys.argv[2:]
    if script.endswith(".py"):
      interpreter = "python.exe" # Default to wherever it is found on the path.
      lines = open(script).readlines()
      for line in lines:
        if line.startswith("#!") and line.find(".exe") != -1:
          interpreter = line[2:].strip()
          break
      process = subprocess.Popen([interpreter] + [script] + args)
      process.wait()
      sys.exit()
  print(USAGE)

我刚刚在阅读此线程时将其击倒(因为这也是我所需要的)。我在 Ubuntu 和 Windows 上都有 Python 2.6.1 和 3.0.1。如果它对您不起作用,请在此处发布修复。

【讨论】:

  • 最好使用sys.exit(process.returncode) 将调用脚本的退出状态传播给调用者。
【解决方案8】:

这是在 Windows 上安装 Python2 和 Python3 的一种简洁明了的方法。

https://datascience.com.co/how-to-install-python-2-7-and-3-6-in-windows-10-add-python-path-281e7eae62a

我的情况:我必须安装 Apache cassandra。我的 D: drive 中已经安装了 Python3。由于正在进行大量的开发工作,我不想弄乱我的 Python3 安装。而且,我只需要用于 Apache cassandra 的 Python2。

所以我采取了以下步骤:

  1. 已下载并安装 Python2。
  2. 将 Python2 条目添加到类路径 (C:\Python27;C:\Python27\Scripts)
  3. python.exe修改为python2.exe(如下图)

  1. 现在我可以同时运行两者了​​。对于 Python 2(python2 --version) 和 Python 3 (python --version)。

所以,我的 Python3 安装保持不变。

【讨论】:

    【解决方案9】:

    尝试使用 Anaconda。

    使用 Anaconda 环境的概念,假设您需要 Python 3 来学习编程,但您不想通过更新 Python 来消灭您的 Python 2.7 环境。您可以创建并激活一个名为“snakes”(或任何您想要的)的新环境,然后安装最新版本的 Python 3,如下所示:

    conda create --name snakes python=3
    

    它比听起来简单,看看这里的介绍页面:Getting Started with Anaconda

    然后要处理您的 2.x 版和 3.x 版并排运行的具体问题,请参阅:

    【讨论】:

      【解决方案10】:

      据我所知,Python 使用 PATH 变量而不是注册表设置从命令行运行。

      因此,如果您在 PATH 上指向正确的版本,您将使用它。请记住重新启动命令提示符以使用新的 PATH 设置。

      【讨论】:

      • 如果你输入 'python myscript.py' 这是正确的,你可以输入 C:\python30\python.exe 但如果你只输入 myscript.py 而我不输入,命令提示符会自动执行此操作不想打破2。?如果我在同一台机器上安装 3.0 的脚本。
      • 哦,天哪,在您对问题的第一条评论中添加信息可能会有所帮助,这有点模糊。
      【解决方案11】:

      Python 安装通常将.py.pyw.pyc 文件与Python 解释器相关联。因此,您可以通过在资源管理器中双击它或在命令行窗口中输入其名称来运行 Python 脚本(因此无需输入 python scriptname.py,只需输入 scriptname.py 即可)。

      如果您想手动更改此关联,您可以在 Windows 注册表中编辑这些键:

      HKEY_CLASSES_ROOT\Python.File\shell\open\command
      HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command
      HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command
      

      Python 启动器

      人们一直在为 Windows 开发 Python 启动器:一个与 .py.pyw 文件关联的轻量级程序,它将在第一行查找“shebang”行(类似于 Linux 等),然后启动根据需要使用 Python 2.x 或 3.x。详情请参阅"A Python Launcher for Windows" 博文。

      【讨论】:

        【解决方案12】:

        这是在同一台机器上运行 Python 2 和 3 的方法

        1. 安装 Python 2.x
        2. 安装 Python 3.x
        3. 启动 Powershell
        4. 键入 Python -2 以启动 Python 2.x
        5. 键入 Python -3 以启动 Python 2.x

        Windows 的 Python 启动器自 3.3 版开始嵌入 Python,正如 2011 年 Standalone 首次亮相时所承诺的那样:

        Python Launcher for Windows

        【讨论】:

        • 那些使用 IDE 的人呢?这也适用吗?
        【解决方案13】:

        Easy-peasy,在安装两个 python 版本后添加环境变量的路径;see。然后转到 python 2 和 python 3 文件夹并将它们分别重命名为 python2 和 python3,如 所示。现在在 cmd 中键入 python2 或 python3 以使用您所需的版本,请参阅

        【讨论】:

          【解决方案14】:

          我认为有一个选项可以在安装程序中为 .py 文件设置 Windows 文件关联。取消选中它,你应该没问题。

          如果没有,您可以轻松地将 .py 文件与以前的版本重新关联。最简单的方法是右键单击 .py 文件,选择“打开方式”/“选择程序”。在出现的对话框中,选择或浏览到您要默认使用的 python 版本,并选中“始终使用此程序打开此类文件”复选框。

          【讨论】:

          • 这就是我所做的。我的 Windows Vista 机器上还有 2.5.2 和 3.0.1。我在安装向导中没有选中它(可能说过“向系统注册”之类的东西——我忘了​​)。两者都工作正常。对于命令行的东西,我在启动 python 3 的路径中放了一个 py.bat 文件 - 没什么花哨的,但可以满足我的需要。
          【解决方案15】:

          您应该确保 PATH 环境变量不包含两个 python.exe 文件(添加您当前用于日常运行脚本的那个),或者按照 Kniht 建议的批处理文件. 除此之外,我不明白为什么不这样做。

          P.S :我安装了 2.6 作为我的 "primary" python 和 3.0 作为我的 "play" python 。 2.6 包含在 PATH 中。一切正常。

          【讨论】:

            【解决方案16】:

            在我勇敢地同时安装两者之前,我有很多问题。如果我给python,当我想要py2时它会去py3吗? pip/virtualenv 会在 py2/3 下发生吗?

            现在看起来很简单。

            只是盲目地安装它们。确保你得到正确的类型(x64/x32)。 安装时/安装后确保添加到environment variables 的路径。

            [ENVIRONMENT]::SETENVIRONMENTVARIABLE("PATH", "$ENV:PATH;C:\PYTHONx", "USER")
            

            替换上面命令中的x来设置路径。

            然后转到这两个文件夹。

            导航到

            python3.6/Scripts/
            

            并将 pip 重命名为 pip3。

            如果 pip3 已经存在,则删除 pip。这将确保 pip 将在 python2 下运行。您可以通过以下方式进行验证:

            pip --version
            

            如果您想将 pip 与 python3 一起使用,那么只需使用

            pip3 install 
            

            您可以对 python 文件和其他文件进行类似的操作。

            干杯!

            【讨论】:

              【解决方案17】:

              我遇到了同样的问题,我想在大多数工作中使用 python3,但 IDA pro 需要 python2。所以,这就是我所做的。

              我先在用户环境变量中创建了3个变量如下:

              1. PYTHON_ACTIVE : 这最初是空的
              2. HOME_PYTHON27 :具有安装 Python 2 的文件夹的路径。例如。 ";/脚本;"
              3. HOME_PYTHON38 : 与 python 2 类似,此变量包含指向 python 3 文件夹的路径。

              现在我添加了

              %PYTHON_ACTIVE%

              到 PATH 变量。所以,基本上说这个“PYTHON_ACTIVE”包含的任何东西都是活动的python。我们以编程方式更改“PYTHON_ACTIVE”的包含以切换 python 版本。

              这是示例脚本:

              :: This batch file is used to switch between python 2 and 3.
              @ECHO OFF
              
              set /p choice= "Please enter '27' for python 2.7 , '38' for python 3.8 : "
              
              IF %choice%==27 (
              setx PYTHON_ACTIVE %HOME_PYTHON27%
              )
              
              IF %choice%==38 (
              setx PYTHON_ACTIVE %HOME_PYTHON38%
              )
              
              
              PAUSE
              

              此脚本将 python 版本作为输入,并相应地将 HOME_PYTHON27 或 HOME_PYTHON38 复制到 PYTHON_ACTIVE。从而更改全局 Python 版本。

              【讨论】:

                【解决方案18】:

                我假设是这样,我在同一台计算机上并排安装了 Python 2.4、2.5 和 2.6。

                【讨论】:

                • 我为 2.x 的多个版本工作,但 minty 询问他们是否可以将 2.x 与 3.x 一起运行。两者之间存在一些显着差异。见:Differences Between 2.x and 3.x
                【解决方案19】:

                我现在才刚开始使用 python。我正在阅读 Zed Shaw 的书“Learn Python the Hard Way”,它需要 python 2.x 版,但我也在学习需要 python 3.x 的课程

                这就是我所做的。

                1. 下载python 2.7
                2. 运行power shell(应该已经安装在windows上)
                3. 在 POWERSHELL 中运行 python(如果无法识别则转到第 4 步)
                4. 仅当 powershell 无法识别 python 2.7 输入以下内容:

                "[ENVIRONMENT]::SETENVIRONMENTVARIABLE("PATH", "$ENV:PATH;C:\PYTHON27", "USER")" (没有外引号)

                1. 现在输入 python,你应该会看到它说 python 2.7 blah blah blah

                现在适用于 python 3.x

                简单,python 3.x 下载附带 python for windows 应用程序。因此,只需将 Python for Windows 应用程序固定到您的任务栏,或创建桌面快捷方式即可完成!

                为 Windows 3.x 打开 Python

                为 python 2.x 打开 Powershell

                我希望这会有所帮助!

                【讨论】:

                  【解决方案20】:

                  嗯..我现在通过在https://www.python.org/downloads/release/python-365/ 下载适用于 Windows 的 Python 3.6.5 来做到这一点,并确保安装了启动器。然后,我按照使用 python 2 和 python 3 的说明进行操作。重新启动命令提示符,然后使用 py -2.7 使用 Python 2 和 pypy -3.6 使用 Python 3。您也可以使用 pip2 用于 Python 2 的 pippip 用于 Python 3 的 pip

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-04-18
                    • 2014-01-10
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多