为什么 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 副本的默认库路径。
Anaconda 不使用 PYTHONPATH
。 Python standard documentation 建议不要配置此环境变量,因为 Python 不同版本可能有其兼容的库。所以,我猜想不要做任何事情,除非你 运行 磁盘空间不足 space。其中一个 Python 必须由 cygwin 安装,另一个由标准 Python 安装程序安装。
py.exe
是特殊的Python launcher for Windows。它与 Python 的任何特定版本没有直接关联,它仅与 Python 3.3 或更高版本的任何版本一起安装,并提供三大优势:
- 安装在
Windows
目录中确保它始终安装在您的 PATH
中(因此无需为每个 Python 安装目录修改您的 PATH
)
- 它可以让你轻松地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 .
- 通过将启动器与
.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 -mpip
或 py -3 -mpip
一起使用,您可以在不影响两个安装的情况下实现精确。
我在 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 副本的默认库路径。
Anaconda 不使用 PYTHONPATH
。 Python standard documentation 建议不要配置此环境变量,因为 Python 不同版本可能有其兼容的库。所以,我猜想不要做任何事情,除非你 运行 磁盘空间不足 space。其中一个 Python 必须由 cygwin 安装,另一个由标准 Python 安装程序安装。
py.exe
是特殊的Python launcher for Windows。它与 Python 的任何特定版本没有直接关联,它仅与 Python 3.3 或更高版本的任何版本一起安装,并提供三大优势:
- 安装在
Windows
目录中确保它始终安装在您的PATH
中(因此无需为每个 Python 安装目录修改您的PATH
) - 它可以让你轻松地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 . - 通过将启动器与
.py
扩展相关联,您可以在脚本中使用 UNIX 风格的 shebang 行。例如,如果脚本的第一行是#!/usr/bin/env python3
(非常标准),并且py.exe
已安装并与.py
文件相关联,那么在 运行ningmyscript.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
一起使用,您可以在不影响两个安装的情况下实现精确。