3.3 版本开始的 Python Windows 安装包中附带了一个文件名是 py.exe 的程序,它可以将调用转发到本地安装的最新版本的 Python,也可以手动指定使用特定版本进行调用。

更重要的是,这个Python启动器可以识别 Shebang 行并将调用转向指定的解释器。

更多玩法见适用于Windows的Python启动器,此处不再赘述。

命令行执行

执行

对于需要用全局解释器运行的脚本,可以在首行添加

#!python3.x

即可调用具体版本的Python执行,比如 test.py 内容如下:

#!python3.7
import sys

print(sys.executable)

在命令行中执行

py test.py

或者

py.exe test.py

会输出

C:\Program Files\Python37\python.exe

另外,对于需要用虚拟环境中的解释器运行的脚本,可以在首行添加指向具体解释器的地址,比如

#!./venv/Scripts/python
import sys

print(sys.executable)

那么即使不激活虚拟环境、直接执行

py test.py

也可以转向虚拟环境中的解释器:

C:\Code\Mine\zeraora-pypi\venv\Scripts\python.exe

如果需要省略 py.exe 而直接调用 test.py ,那么配置方法与双击执行一节相同。

配置

正确安装 3.3 版本或更新的 Python 之后,py.exe 应该会在

C:\Windows\py.exe

或者

C:\Users\{YourName}\AppData\Local\Programs\Python\Launcher\py.exe

两个地方。如果没有,那么大概需要重新安装 Python;
如果有的话,检查一下 系统环境变量 看看是否有后者的路径。

双击执行

双击执行的实现是需要在命令行执行的基础上配置的,包括在脚本首行添加(虚拟)解释器以及确保 py.exe 可以在命令行中调用。

在 Windows 实现这一点需要修改注册表。使用以下命令可以查看相关注册表条目:

reg query "HKCR\.py" /ve
reg query "HKCR\py_auto_file\shell\open\command" /ve

当前者的值是 py_auto_file 、后者的值是 py.exe 的命令行调用时即可实现。

若不是,那么可以使用以下命令进行修改(需要管理员权限)(修改前注意备份数据):

reg add "HKCR\.py" /ve /d "py_auto_file"
reg add "HKCR\py_auto_file\shell\open\command" /ve /d "\"C:\Windows\py.exe\" \"%1\" %*"

若 py.exe 不在

C:\Windows\py.exe

而是在

C:\Users\{YourName}\AppData\Local\Programs\Python\Launcher\py.exe

那么修改命令是:

reg add "HKCR\.py" /ve /d "py_auto_file"
reg add "HKCR\py_auto_file\shell\open\command" /ve /d "\"C:\Users\{YourName}\AppData\Local\Programs\Python\Launcher\py.exe\" \"%1\" %*"