为什么在Windows上的两个完全不同的位置上安装了Python 3.7.0的两个唯一副本?

时间:2018-09-21 15:03:14

标签: python windows python-3.x python-3.7 path-variables

我在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,并且我不想键入长版本。

2 个答案:

答案 0 :(得分:2)

py.exe是特殊的Python launcher for Windows。它不与任何特定版本的Python直接相关,它仅随Python 3.3或更高版本一起安装,并具有三大优点:

  1. 安装在Windows目录中可确保始终将其安装在PATH中(因此无需为每个Python安装目录修改PATH
  2. 它使您可以轻松选择不同的Python版本; 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。
  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 -mpippy -3 -mpip结合使用,您可以精确地进行两个安装而不会彼此碰到脚。

答案 1 :(得分:-1)

您是否可以在两个实例中使用以下命令运行两个版本的Python:

import sys
print('\n'.join(sys.path))

结果是该Python副本的默认库路径。

Anaconda不使用PYTHONPATHPython standard documentation建议不要配置此环境变量,因为不同版本的Python可能具有其兼容的库。因此,我想除非磁盘空间不足,否则什么也不要做。 cygwin必须安装一个Python,另一个必须由标准的Python安装程序安装。