我正在运行Windows,当您在命令行上运行程序时,shell / OS会根据注册表设置自动运行Python。如果我在同一台机器上安装2.x和3.x版本的Python,这会破坏吗?
我想玩Python 3,同时仍能在同一台机器上运行2.x脚本。
答案 0 :(得分:62)
共存的官方解决方案似乎是Python Launcher for Windows,PEP 397,它包含在Python 3.3.0中。安装版本将py.exe
和pyw.exe
启动器转储到%SYSTEMROOT%
(C:\Windows
),然后分别与py
和pyw
脚本相关联。< / p>
要使用新的启动程序(无需手动设置自己的关联),请启用“注册扩展”选项。我不太清楚为什么,但在我的机器上它将Py 2.7作为“默认”(发射器)。
通过直接从命令行调用脚本来运行脚本将路由它们通过启动器并解析shebang(如果存在)。您还可以显式调用启动器并使用开关:py -3 mypy2script.py
。
各种各样的shebang似乎都在工作
#!C:\Python33\python.exe
#!python3
#!/usr/bin/env python3
以及肆意滥用
#! notepad.exe
答案 1 :(得分:36)
您可以同时安装。
您应该在脚本前面写这个:
#!/bin/env python2.7
或者,最终......
#!/bin/env python3.6
我的解决方案与Unix完美配合,快速搜索Google后,这是Windows解决方案:
#!c:/Python/python3_6.exe -u
同样的事情:在你的剧本面前。
答案 2 :(得分:31)
从版本3.3开始,Python引入了Launcher for Windows实用程序https://docs.python.org/3/using/windows.html#python-launcher-for-windows。
所以能够使用多个版本的Python:
答案 3 :(得分:9)
我在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文件相关联。
答案 4 :(得分: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上都有Pythons 2.6.1和3.0.1。如果它不适合你在这里发布修复。
答案 5 :(得分:6)
当您将两者都添加到环境变量时,会出现冲突,因为两个可执行文件具有相同的名称:python.exe
。
只需重命名其中一个。在我的情况下,我将其重命名为python3.exe
。
因此,当我运行python
时,它将执行python.exe
,即2.7
当我运行python3
时,它将执行python3.exe
,即3.6
答案 6 :(得分:4)
据我所知,Python使用PATH变量而不是注册表设置来运行命令行。
因此,如果您指向PATH上的正确版本,您将使用它。请记住重新启动命令提示符以使用新的PATH设置。
答案 7 :(得分:3)
尝试使用Anaconda。
使用Anaconda环境的概念,假设您需要Python 3来学习编程,但您不希望通过更新Python来消除Python 2.7环境。您可以创建并激活名为&#34; snakes&#34;的新环境。 (或任何你想要的),并按如下方式安装最新版本的Python 3:
conda create --name snakes python=3
比它听起来更简单,请看一下这里的介绍页面:Getting Started with Anaconda
然后处理你的并行运行版本2.x和3.x的具体问题,请参阅 :Managing Python Versions with Anaconda
答案 8 :(得分:3)
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
人们一直在研究用于Windows的Python启动器:一个与.py
和.pyw
文件相关联的轻量级程序,它会在第一个文件中寻找“shebang”行(类似于Linux等)行,并根据需要启动Python 2.x或3.x.有关详细信息,请参阅"A Python Launcher for Windows"博文。
答案 9 :(得分:2)
Python Launcher for Windows 从3.3版本开始嵌入到Python中,正如2011年独立首次亮相时所承诺的那样:
答案 10 :(得分:2)
在我勇敢地同时安装两者之前,我有很多问题。如果我给python它会在py3时转到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将在 python2 下运行。您可以通过以下方式进行验证:
pip --version
如果你想使用 python3 的pip,那么只需使用
pip3 install
您可以对python文件和其他文件执行相同的操作。
干杯!
答案 11 :(得分:1)
您应该确保PATH环境变量不包含python.exe文件(添加您当前用于运行脚本的日常文件),或者按照Kniht建议的批处理文件执行。 除此之外,我不明白为什么不这样做。
P.S:我已经安装了2.6作为我的“主要” python而3.0作为我的“play” python。 2.6包含在 PATH 中。一切正常。
答案 12 :(得分:1)
我认为可以选择在安装程序中为.py文件设置Windows文件关联。取消选中它,你应该没事。
如果没有,您可以轻松地将.py文件与之前的版本重新关联。最简单的方法是右键单击.py文件,选择“打开方式”/“选择程序”。在出现的对话框中,选择或浏览到默认情况下要使用的python版本,然后选中“始终使用此程序打开此类文件”复选框。
答案 13 :(得分:1)
这是在Windows上安装Python2和Python3的一种整洁的方法。
我的情况:我必须安装Apache cassandra。我已经在 D:驱动器中安装了Python3。随着大量开发工作的进行,我不想弄乱我的Python3安装。而且,我只需要Python2用于Apache cassandra。
所以我采取了以下步骤:
C:\Python27;C:\Python27\Scripts
)因此,我的Python3安装保持不变。
答案 14 :(得分:0)
我现在刚开始使用python。我正在阅读Zed Shaw的书&#34;艰苦学习Python&#34;这需要python版本2.x但我也需要一个需要python 3.x
的类所以这就是我所做的。
&#34; [环境] :: SETENVIRONMENTVARIABLE(&#34; PATH&#34;,&#34; $ ENV:PATH; C:\ PYTHON27&#34;,&#34; USER&#34;)& #34; (没有外部报价)
现在为python 3.x
简单,python 3.x下载附带python for windows app。因此,只需将Python for Windows应用程序固定到任务栏,或创建桌面快捷方式即可完成!
为3.x打开适用于Windows的Python
为Python 2.x打开Powershell
我希望这有帮助!
答案 15 :(得分:0)
我会这么认为,我在同一台计算机上并排安装了Python 2.4,2.5和2.6。
答案 16 :(得分:0)
嗯..我现在只需在https://www.python.org/downloads/release/python-365/下载适用于Windows的Python 3.6.5并确保安装了启动器。然后,我按照使用python 2和python 3的说明进行操作。重新启动命令提示符,然后使用py -2.7
使用Python 2和py
或py -3.6
来使用Python 3.您还可以使用pip2
为Python 2 pip
和pip
用于Python 3&#39; pip
。
答案 17 :(得分:0)
Easy-peasy,在安装两个python版本之后,将路径添加到环境变量;请参见。然后转到python 2和python 3文件夹,并将它们分别重命名为python2和python3,如和所示。现在,在cmd中键入python2或python3以使用所需的版本,请参见。
答案 18 :(得分:0)
我在要使用python3进行大多数工作时遇到了同样的问题,但是IDA pro需要python2。所以,这就是我所做的。
我首先在用户环境变量中创建了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版本。