如何在Windows系统中安装Python 2.x和Python 3.x?

240

我大部分的编程工作都是在Windows 7上使用Python 3.x完成的,但现在我需要使用Python Imaging Library(PIL)、ImageMagick和wxPython等程序,这些程序都需要Python 2.x。

我能否在Windows 7上同时安装Python 2.x和Python 3.x?当我运行脚本时,如何“选择”应该使用哪个版本的Python来运行它?前面提到的程序是否能够处理多个版本的Python同时安装?我已经搜索了几个小时,但找不到如何做到这一点。

谢谢。


15
为了得到一个干净、官方的解决方案,请安装Python 3.3(https://dev59.com/nnRC5IYBdhLWcg3wUfJ2#13297878),其中包括Windows版的Python启动器(http://blog.python.org/2011/07/python-launcher-for-windows_11.html)。 - Nick T
2
是的,正如@NickT所说,那是最容易的。不幸的是,下面的回答都没有提供简单明了的方法。(提到版本3.3的回答最接近。)为了更好的答案,请参考重复问题下的被接受的回答:https://dev59.com/8WUo5IYBdhLWcg3wmQZN#17245543 简而言之,使用新的“py”启动器,带或不带-3参数。并考虑将shebangs(#!)添加到您的脚本中,这样您就不需要参数了。 - Jon Coombs
1
此外,一些人发现我在这里发布的细节很有帮助:https://dev59.com/ZG445IYBdhLWcg3w7urD#13533958 - Jon Coombs
19个回答

152
我发现正式的做法如下:
只需在Windows 7上安装两个(或更多,使用它们的安装程序)Python版本(对我来说是3.3和2.7)。
按照下面的说明进行操作,根据您的需要更改参数。
创建以下环境变量(默认双击):
Name:  PY_PYTHON
Value: 3

要在特定的解释器中启动脚本,请添加以下 shebang(脚本开头):

#! python2

要使用特定的解释器执行脚本,请使用以下提示命令:

> py -2 MyScript.py

启动特定的解释器:

> py -2

启动默认解释器(由PY_PYTHON变量定义):

> py

资源

文档: 在Windows上使用Python

PEP 397 - Windows上的Python启动器


8
此外,如果要同时使用 easy_installpip 两个版本,请更改路径以包括 c:\python35;c:\python35\scripts;c:\python27\scripts;。这将允许使用 pip2/pip3easy_install-2.7/easy_install-3.5 而不是 pipeasy_install - rdtsc
2
无法与不提供自己的Python并坚持使用系统版本且不尊重启动器的各种程序一起使用。 - Jonathan Baldwin
1
不要将Python添加到路径中。使用 py -m pip install ...。在py后添加开关以选择在哪个Python下运行pip,如上所述。 - Mark Tolonen

84
我所做的是下载Python 2.7.6和3.3.4。Python 3.3.4有一个选项可以将其路径添加到环境变量中,所以我已经这样做了。因此,我只是手动添加了Python 2.7.6。
如何...
  1. 启动菜单 > 在搜索框中输入 '环境变量',选择“编辑您的帐户的环境变量”1

  2. 向下滚动找到“Path”,选择它,点击“编辑”。

  3. 添加 C:\Python27; 这样你就应该在那里拥有两个版本的 Python 路径,但如果你没有,你可以轻松地编辑它,使其存在... C:\Python27;C:\Python33;

  4. 转到 C:\Python27 文件夹并将 python.exe 的副本重命名为 python2.exe

  5. 转到 C:\Python34 文件夹并将 python.exe 的副本重命名为 python3.exe

  6. 测试:打开命令提示符并键入 python2 ....BOOM! Python 2.7.6,退出。

  7. 测试:打开命令提示符并键入 python3 ....BOOM! Python 3.4.3,退出。

注意:(为了不破坏第 4 步和第 5 步中的 pip 命令,请将 python.exe 的副本保留在与重命名文件相同的目录中)

46
这将同时破坏pip2和pip3!不要替换Python,而是复制它并将第二个文件重命名为python2 / python3。 - brunofitas
2
只是提醒一下,我在将名称恢复原状之前无法卸载Python。我的建议是制作副本并将其重命名,但不要动原始的python.exe文件,正如Bruno所提到的那样。 - Logic1
2
你能在回答中处理brunofitas的反馈吗? - 030
是的,我刚刚将Python3安装中的python.exe重命名为python3.exe。我认为在*nix环境中,这会自动发生在Python中。当然,没有.exe文件,但有一个python2和python3程序。 :) - user3808269
1
如果您有一个依赖于Python的任一版本的库/插件,请确保该版本在您的PATH环境变量中排在第一位。 - aphoe
我按照指示安装了Python27和Python3,并将它们都添加到了我的路径中。然后,我没有复制和重命名python.exe为Python2.exe和Python3.exe,而是为每个文件创建了一个符号链接,这起到了别名的作用。要在python27目录下从命令提示符创建链接,请输入“mklink python2.exe python.exe”,在python3目录下输入“mklink python3.exe python.exe”。现在,引用python2或python3的脚本都可以正常工作了。这修复了我正在处理的一些旧的Node.js项目。 - Michael Russ

54

这个方法可行。在做出这个更改之前,当我尝试在Python 2.7中运行程序时,它仍然在Python 3.1中运行(可能是因为Windows 7无法处理两个具有相同名称的程序)。重命名exe文件后,一切都很顺利。 - dln385
1
这对我也起作用了。我在Python 2.7和Python 3.2之间发生了冲突。由于我先安装了Python 3.2(并将其设置为环境变量),因此我无法在提示符中访问Python 2.7(而是得到了Python 3.2)。我想将Python 2.7作为默认版本使用,因此我将python.exe更改为python3.2.exe,并保持Python 2.7的python.exe不变。这就解决了问题。 - r_31415
我已经有一段时间没有在Windows上安装新的Python3了,但是我现在使用的版本包括pip3pip3.4。 (它也将其包含为pip,但我认为删除它应该解决与Python2的任何冲突)。 实际上,我的Path中没有C:\ Python34 \ Scripts,所以我没有遇到任何与pip相关的问题... - monkut

30

如果你使用Anaconda Python,你可以轻松安装各种环境。

比如说,如果你已经安装了Anaconda Python 2.7,并且你想要一个Python 3.4的环境:

conda create -n py34 python=3.4 anaconda

然后激活环境:

activate py34

并要停用:

deactivate py34
(对于Linux系统,您应使用source activate py34命令。) 链接: 下载Anaconda Python 环境说明

在我看来,conda是处理不同Python安装的最佳方式。在转向Anaconda之前,我搞砸了很多事情。 - jrinker

13
要在同一系统中安装和运行任何版本的Python,请按照以下指南操作。
例如,假设您想在同一Windows系统上安装Python 2.x和Python 3.x。
1. 首先安装它们的二进制版本,并选择您想要的任何位置进行安装。在提示时,不要注册其文件扩展名,也不要自动将其添加到PATH环境变量中。
2. 运行命令 python,将选择在 PATH 中找到的可执行文件进行启动。换句话说,手动添加 Python 目录。您首先添加的那个将被选中当你输入 python。按路径逐个增加的 python 程序将按如下方式选择:
- 第二个 python:py -2 - 第三个 python:py -3
3. 不管“python”的顺序如何,您都可以通过以下命令运行Python脚本:
- 使用命令 py -2 运行 Python 2.x 脚本(Python 3.x 功能)。 - 使用命令 py -3 运行 Python 3.x 脚本。
在我的示例中,我已经先安装了 Python 2.7.14 和 Python 3.5.3。这是我的 PATH 变量的开头:
PATH=C:\Program Files\Microsoft MPI\Bin\;C:\Python27;C:\Program Files\Python_3.6\Scripts\;C:\Program Files\Python_3.6\;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Intel\Shared
请注意,Python 2.7 是第一个,Python 3.5 是第二个。
  • 执行python命令将启动Python 2.7(如果是Python 3.5,则相同命令将启动Python 3.5)。
  • 执行py -2将启动Python 2.7(因为第二个Python是不兼容py -2的Python 3.5)。 执行py -3将启动Python 3.5(因为它是Python 3.x)
  • 如果在路径中有其他Python版本,则可以这样启动:py -4。如果/当Python 4版本发布时,这可能会发生变化。
  • 现在,在我的系统上执行py -4py -5等命令会输出:Requested Python version (4) not installedRequested Python version (5) not installed等提示。

    希望这已足够清晰。


    你怎样指定一个 Python 发行版中的 Pip 安装呢? - Víctor Martínez
    对于第一个找到的Python,只需键入“pip”。对于任何其他已安装的Python,您必须手动指定路径,即“C:\ Python27 \ Scripts \ pip.py [parameters]”。(当然,作为快捷方式,您可以将任何exe放在环境变量中。) - KeyC0de
    @Nik-Lz,你所提到的“py -2”命令是什么?我在我的Windows 7上好像没有这些命令。 - Janos
    2
    这正是在 Windows 上处理多个版本 Python 应该采用的方法。 - getName
    @KeyC0de,这是非常清晰的解释。但我对使用pip安装软件包有疑问。安装Python软件包的确切命令应该是什么,适用于Python2和Python3? - Ram Shankar Kumar
    1
    @RamShankarKumar,你可以在使用Python命令时(如答案中所述)添加“-m pip install nameOfModule”来安装需要的模块。对于Windows用户,我建议使用pip-Win以方便安装。 - KeyC0de

    9
    以下是你可以做的:
    安装cmder。 打开并像使用cmd终端一样使用Cmder。 使用命令alias创建命令别名。
    我执行了以下操作:
    alias python2 = c:\python27\python.exe
    alias python3 = c:\python34\python.exe
    

    这就是全部啦!;-)

    7
    设置别名 python2 为 c:\python27\python.exe。 - Prophet Daniel
    以 set-alias 为例,展示如何在 Powershell 中使用。在这种情况下,就不需要安装 Cmder。 - Prophet Daniel
    @ProphetDaniel 这应该作为一个单独的答案发布。它完全回答了原始问题。 - Dr_Zaszuś

    8
    我想到了一个有趣的解决方案。虽然Windows不允许你轻易地为程序创建别名,但你可以创建重命名的批处理文件来调用当前的程序。
    不要重命名可执行文件,否则会破坏许多东西,包括pip,而是在与python2.exe相同的目录中创建python2.bat文件。然后添加以下行:
    %~dp0python %*
    

    这个古老的语法是什么意思?这是一个批处理脚本(类似于Windows版本的bash)。%~dp0获取当前目录,%*将把传递给脚本的所有参数传递给python。
    对于python3.bat也是如此。
    您还可以针对pip和其他实用程序执行相同操作,只需将文件中的python替换为pip或文件名即可。别名将是文件名。
    最重要的是,当添加到PATH时,Windows会忽略扩展名,因此运行
    python3
    

    启动python3版本的命令是python3,启动python2版本的命令是python2。

    顺便提一下,Spyder在Windows上添加自己到路径中使用的就是这种技术。 :)


    1
    无需修改现有的Python文件,就能实现令人惊叹的解决方案。 - Om Prakash

    8

    3
    我在自己的Windows电脑上,安装了Python 2.7和Python 3.4,并编写了一个简单的.bat文件,与我的Python.exe文件保存在同一目录下。它们看起来像这样:
    cmd /k "c:\python27\python.exe" %*
    

    %* 允许在之后添加参数(Python文件)。我相信 /k 在运行脚本后保持提示符的打开状态。然后我将其保存为python27.bat,接着我转到我的Python 3目录并在那里创建一个bat文件。现在在我的命令行中,我可以输入:

    Python27 helloworld.py
    

    或者

    Python34 helloworld.py
    

    它们将在各自版本的Python中运行。确保c:\python27c:\python34在您的环境变量中。

    我从这里得到了答案。


    3
    您可以在一台机器上安装多个版本的Python,并且在安装过程中,您可以选择其中一个版本与Python文件扩展名相关联。如果您安装模块,则会有不同的设置包适用于不同的版本,或者您可以选择要针对哪个版本。由于它们通常会将自己安装到解释器版本的site-packages目录中,因此不应该会有任何冲突(但我没有测试过)。要选择哪个版本的python,您必须手动指定解释器的路径,如果它不是默认的路径。据我所知,它们将共享相同的PATH和PYTHONPATH变量,这可能会成为一个问题。
    注意:我使用的是Windows XP。我不知道其他版本是否有任何更改,但我认为不会有任何理由进行更改。

    3
    我同时安装了Python 2.5、2.6和3.1,甚至从未想过可能需要做比仅运行每个版本的安装程序更困难的事情。 - SingleNegationElimination

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