在Windows终端中,“py”和“python”有什么区别?

73

当我使用pip通过命令安装模块时,为什么会有'py'和'python'之间的区别?

python -m pip install [Mod]

py -m pip install [Mod]
当我使用Python IDLE时,这些模块是不可用的。此外,当我检查

sys.path

对于'python'和'py'来说,它们是不同的。如何使它们相同,并在安装模块时,安装到它们都可以访问的同一个文件夹中。

编辑:

我忘记提到这是在windows上。所以无论如何,我执行了下面的命令:

python -V

它显示的版本是 "Python 3.6.4:: Anaconda, Inc"。

然而:

py -V

返回结果: 给出了"Python 3.6.5"。它们有多大的差异?如果它们是同一版本(3.6),为什么它们有不同的路径?

3个回答

109

在Windows上

python是Python安装过程中默认选择的Python可执行文件。这基本上将该版本的路径放置在PATH中,使得可执行文件直接可用。

pyPython启动器,它是随Python安装一起提供的实用程序。它安装在C:\Windows\中,因此无需修改PATH即可使用。Python启动器会检测您机器上安装了哪些Python版本,并能够自动委派到正确的版本。默认情况下,它将使用您机器上最新的Python版本。因此,如果您安装了2.7、3.5和3.6,则运行py将启动3.6。您也可以通过执行例如py -3.5来启动3.5,或者py -2来启动您机器上最新的Python 2版本。

您可以在文档中了解更多关于启动器的信息。

这些天,我个人从不直接将Python放在我的PATH中。我只使用启动器来控制Python的启动,这样可以更好地控制Python的启动方式。如果你发现py -m pip install不能为你使用IDLE运行的Python版本安装模块,那么你应该检查有哪些版本可用。每个Python安装都带有自己的目录,pip模块会被安装在其中。所以,如果你比如说启动了Python 3.5的IDLE,你需要确保你也使用Python 3.5运行pip(比如py -3.5 -m pip install)。
在Linux上,python是指向你机器上默认Python安装的符号链接。对于许多Linux机器,这只会是Python 2。即使不再使用Python 2而只提供Python 3的发行版也不会使用python代表Python 3,因为工具的一般期望是python是Python 2。所以它们可能只有一个python3符号链接。
在Linux上,py通常不存在,除非你自己设置别名或符号链接。你可以用which pythonwhich py来查看这些命令实际上是什么。

Anaconda

您使用的Python版本来自Anaconda,这是一个针对数据科学家的不同Python发行版,带有许多东西。它使用与从python.org获得的官方CPython版本分开的不同Python版本。我假设这些版本默认情况下不会通过Python启动器可用。


1
帮助我理解这个行为,+1 - Shashi Shekhar

3

@poke 给出了很好的回答。我只想补充一下,在 Python 文件顶部可以添加 #!/usr/bin/env python2 注释,告诉它要使用哪个版本的Python。

python 命令行命令会忽略这个注释。py 解析这个注释并使用正确的版本。

个人而言,我将使用 py 执行文件。


Shebang行不会被忽略。 - OneCricketeer

2

poke的回答很棒,但如果你想使用"python",你要么需要输入整个路径,要么将安装目录添加到系统的PATH变量中。

这是Windows上的解决方案:

  • 进入系统
  • 进入高级系统设置
  • 进入高级选项卡
  • 进入环境变量
  • 一旦你到达那里,进入系统变量并选择一个名为“PATH”的变量,然后点击编辑
  • 点击新建,然后复制你的脚本路径,它通常在这个路径中:C:\Users\pc\AppData\Local\Programs\Python\Python311\Scripts

这在我的情况下“解决”了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接