我在Windows上安装了Python 3.7.0。我只关注安装程序一次,但是我在两个不同的位置安装了两个不同的python可执行文件。
C:\Windows\py.exe
带有白色图标的887 KB(908,952字节);和
C:\Users\myuser\AppData\Local\Programs\Python\Python37\python.exe
带有黑色图标的97.6 KB(99,992字节)
Python安装程序指定了第二个路径,如安装guide中所示,但是Git Bash,Cygwin和MSYS + MingW都报告第一个路径为有效路径,而不是第二个路径:
$ which python
which: python: unknown command
$ which py
/c/WINDOWS/py.exe
PowerShell显示它们都是Python 3.7.0,尽管它们的文件大小不同:
PS C:\Users\myuser\AppData\Local\Programs\Python\Python37> ./python.exe -V
Python 3.7.0
PS C:\Users\myuser\AppData\Local\Programs\Python\Python37> py -V
Python 3.7.0
第一个路径没有“脚本”子文件夹,但是第二个路径具有子文件夹,但是系统环境变量指向没有“脚本”文件夹的路径下的“脚本”文件夹:
PATH变量:
%PYTHON_HOME%\
%PYTHON_HOME%\Scripts\
PYTHON_HOME变量:
C:\Windows\
那么“ py.exe”在哪里存储库?为什么它们都正确运行python脚本并具有相同的输出?为何仍要在C:\Windows\
进行安装?我必须将第二个物理添加到PATH变量中,以便能够从终端使用pip
而无需键入py -m pip
,并且我不想键入长版本。
答案 0 :(得分:2)
py.exe
是特殊的Python launcher for Windows。它不与任何特定版本的Python直接相关,它仅随Python 3.3或更高版本一起安装,并具有三大优点:
Windows
目录中可确保始终将其安装在PATH
中(因此无需为每个Python安装目录修改PATH
)py -2 myscript.py
可以在您的系统上使用最新的Python 2运行它,py -3 myscript.py
可以使用最新的Python 3版本运行,或者py -3.5 myscript.py
可以与Python 3.5一起启动,即使有更高版本可用。从3.6版本的启动器开始,没有任何参数,它将运行您已安装的最新版本的Python。对于3.3-3.5的启动器,它默认运行已安装的最新版本的Python 2,并且必须使用-3
开关才能使其使用最新的Python 3。.py
关联,您可以在脚本中使用UNIX风格的shebang行。例如,如果脚本的第一行是#!/usr/bin/env python3
(相当标准),并且py.exe
已安装并与.py
文件相关联,则在运行myscript.py
时,它等效运行py -3 myscript.py
您可以read more details on the PEP。
要点是,py.exe
实际上并不存储其自己的任何库。它所做的只是提供一个通用界面,以在Windows上查找其他现有的Python安装(尽管它仅附带3.3和更高版本,它还管理较旧的安装,包括Python 2安装)。不幸的是,pip
必须以丑陋的方式运行,但是如果您想允许系统中存在多个版本的Python而又不至于踩踏,那几乎是不可避免的。如果您同时安装了2.7和3.7,则只能在PATH
中首先安装其中的一个,因此只能运行一个python.exe
和一个pip
。通过将py.exe
启动器与py -2 -mpip
或py -3 -mpip
结合使用,您可以精确地进行两个安装而不会彼此碰到脚。
答案 1 :(得分:-1)
您是否可以在两个实例中使用以下命令运行两个版本的Python:
import sys
print('\n'.join(sys.path))
结果是该Python副本的默认库路径。
Anaconda不使用PYTHONPATH
。 Python standard documentation建议不要配置此环境变量,因为不同版本的Python可能具有其兼容的库。因此,我想除非磁盘空间不足,否则什么也不要做。 cygwin必须安装一个Python,另一个必须由标准的Python安装程序安装。