Windows 上的这 4 种不同类型的 Python shebang 有什么区别?

What is the difference between these 4 different types of Python shebangs on Windows?

我刚刚在学习 Python 时第一次遇到 shebangs (#!),我仍在努力了解它们的工作原理。在做了一些研究之后,我找到了 this page,其中列出了四种不同类型的 shebang。但是,我不太确定 Windows.

有什么区别
#! /usr/bin/env python
#! /usr/bin/python
#! /usr/local/bin/python
#! python

现在,我敢打赌第一个与虚拟环境有关,但我不太确定是什么。根据这个 Whosebug thread,上面列出的路径实际上是针对 POSIX 系统的,而不是针对 Windows... 这让我更加困惑,因为它们以某种方式被翻译成 Windows 目录通过一些魔法。这是引述:

A bin directory is created on POSIX systems only . . . Some paths within the virtualenv are slightly different on Windows: scripts and executables on Windows go in ENV\Scripts\ instead of ENV/bin/ and libraries go in ENV\Lib\ rather than ENV/lib/.

任何人都可以向初学者提供更多关于这些 shebangs 如何在 Windows 上工作的信息吗?

The documentation 并不完全明确,但根据我的阅读,这些 shebang 行之间没有区别。 Windows 上的 shebang 处理纯粹是 "virtual" --- 也就是说,shebang 行中的路径实际上并未映射到 Windows 文件系统上的任何路径。相反,使用这些 "virtual paths" 中的任何一个都意味着 "use the default system Python when running this file via the py Python launcher"。在 Windows 上允许 shebang 行的目的是让 Python 脚本指定 Python 或 Python 版本(例如 python3)的参数。您可以在上面链接的文档中找到有关如何确定默认系统 Python、如何覆盖它等的更多信息。

顺便说一句,请注意,在 Windows 上,这些 shebang 仅在您 运行 使用 py 启动器的 Python 脚本时使用。