我在 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
第一个路径没有“Scripts”子文件夹,但第二个路径有,但是系统环境变量指向没有“Scripts”文件夹的路径中的“Scripts”文件夹:
路径变量:
%PYTHON_HOME%\
%PYTHON_HOME%\Scripts\
PYTHON_HOME 变量:
C:\Windows\
那么“py.exe”存储库的位置在哪里?为什么它们都能正确运行 python 脚本并具有相同的输出?为什么安装在 C:\Windows\
处呢?我必须将第二个物理添加到 PATH 变量中,以便能够从终端使用 pip
而无需输入 py -m pip
,而且我不想输入长版。
最佳答案
py.exe
很特别Python launcher for Windows 。它不与任何特定版本的 Python 直接关联,只是与任何版本的 Python 3.3 或更高版本一起安装,并提供三个主要优点:
- 正在安装在
Windows
目录确保它始终安装在您的PATH
中(因此无需为每个 Python 安装目录修改PATH
) - 它可以让你轻松选择不同的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
关联文件,然后运行 myscript.py
,相当于运行py -3 myscript.py
您可以read more details on the PEP .
重点是,py.exe
实际上并不存储任何自己的库。它所做的只是提供通用接口(interface)来查找 Windows 上其他现有的 Python 安装(虽然它仅随 3.3 及更高版本一起提供,但它也可以管理较旧的安装,包括 Python 2 安装)。不幸的是pip
必须以一种丑陋的方式运行,但如果你想允许多个版本的 Python 存在于一个系统上而不互相干扰,那么这几乎是不可避免的。如果您同时安装了 2.7 和 3.7,则只有其中一个可能位于 PATH
中的第一个。 ,所以你只有一个 python.exe
和一个pip
运行;通过使用py.exe
启动器 py -2 -mpip
或py -3 -mpip
,您可以做到精确,而无需两个安装互相踩踏。
关于python - 为什么 Windows 上安装了两个不同的 Python 3.7.0 副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52446496/