当前位置:  开发笔记 > 编程语言 > 正文

我可以在同一台Windows计算机上安装Python 3.x和2.x吗?

如何解决《我可以在同一台Windows计算机上安装Python3.x和2.x吗?》经验,为你挑选了7个好方法。

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

我想玩Python 3,同时仍然可以在同一台机器上运行2.x脚本.



1> Nick T..:

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

要使用新的启动程序(无需手动设置自己的关联),请启用"注册扩展"选项.我不太清楚为什么,但在我的机器上它将Py 2.7作为"默认"(发射器).

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

各种各样的shebang似乎工作

#!C:\Python33\python.exe

#!python3

#!/usr/bin/env python3

以及肆意滥用

#! notepad.exe



2> Alistair Mar..:

这是我的设置:

    使用Windows安装程序安装Python 2.7和3.4 .

    转到C:\Python34(默认安装路径)并将python.exe更改为python3.exe

    编辑 要包含的环境变量C:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;

现在在命令行中,您可以使用python2.7和python33.4.


我只是指出你最终必须重命名所有这些实用程序.即便如此,例如,如果python3明确地(例如:硬编码)调用pip而不是pip3,则存在事情破坏的风险.
例如,cli中的`pip`怎么样?
pip随附了最新版本的python 2和3。所以你可以分别使用`pip`和`pip3`。

3> Patrick Desj..:

你可以安装两个.

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

#!/bin/env python2.7

或者,最终......

#!/bin/env python3.6

更新

我的解决方案与Unix完美配合,在Google上快速搜索之后,这是Windows解决方案:

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

同样的事情:在你的剧本面前.


此解决方案不适用于Windows(除非您从unix样式shell(例如cygwin)调用它).#!由shell处理,Windows不支持它.我相信你用Google搜索的例子是由网络服务器处理的,而不是*在Windows中启动
可以使用[pylauncher](https://bitbucket.org/vinay.sajip/pylauncher)制作类似这样的工作(如[PEP 397 - 用于Windows的Python启动器](http://www.python)中所述. org/dev/peps/pep-0397 /)2011年.

4> Ivan Kucerak..:

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

因此,为了能够使用多个版本的Python:

    安装Python 2.x(x是你需要的任何版本)

    安装Python 3.x(x是你需要的任何版本,你必须有一个版本3.x> = 3.3)

    打开命令提示符

    键入py -2.x以启动Python 2.x.

    键入py -3.x以启动Python 3.x.


这是IMO的最佳解决方案,从一开始就可以完美运行。不需要-3.x,您可以执行py -3 filename.py`。

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文件相关联.



6> Charif DZ..:

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

只需重命名其中一个.在我的情况下,我将其重命名为python3.exe.

因此,当我运行python它将执行python.exe2.7时,当我运行python3它将执行python3.exe3.6

在此输入图像描述

注意:应该使用python.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  [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上都有Pythons 2.6.1和3.0.1.如果它不适合您在这里发布修复程序.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有