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

Why are there two unique copies of Python 3.7.0 installed on Windows in vastly different locations?

我在 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 字节)

PythonInstaller指定第二个路径,如Installationguide所示,但GitBash、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

第一个路径没有 "Scripts" 子文件夹,但第二个路径有,但是系统环境变量指向没有 [=41] 的路径上的 "Scripts" 文件夹=]文件夹:

路径变量: %PYTHON_HOME%\ %PYTHON_HOME%\Scripts\

PYTHON_HOME变量: C:\Windows\

那么 "py.exe" 在哪里存储库?为什么它们都正确 运行 python 脚本并具有相同的输出?为什么在 C:\Windows\ 有一个安装呢?我不得不将第二个物理添加到 PATH 变量中,以便能够在不键入 py -m pip 的情况下从终端使用 pip,而且我不想键入长版本。

你能运行两个版本的Python在两个实例中都使用这些命令吗:

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

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

A​​naconda 不使用 PYTHONPATHPython standard documentation 建议不要配置此环境变量,因为 Python 不同版本可能有其兼容的库。所以,我猜想不要做任何事情,除非你 运行 磁盘空间不足 space。其中一个 Python 必须由 cygwin 安装,另一个由标准 Python 安装程序安装。

py.exe是特殊的Python launcher for Windows。它与 Python 的任何特定版本没有直接关联,它仅与 Python 3.3 或更高版本的任何版本一起安装,并提供三大优势:

  1. 安装在 Windows 目录中确保它始终安装在您的 PATH 中(因此无需为每个 Python 安装目录修改您的 PATH
  2. 它可以让你轻松地select不同的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 文件相关联,那么在 运行ning 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 一起使用,您可以在不影响两个安装的情况下实现精确。