升级Python2后,Windows启动器无法运行Python3/读取Shebang行
这个问题我之前帮朋友排查过,Windows下Python多版本共存时,升级老版本后shebang失效大概率是Python Launcher的配置或者文件关联出了问题,给你几个一步步排查的方案:
1. 先确认Python Launcher是否正常识别所有版本
Windows上的shebang其实是靠Python Launcher for Windows(也就是py.exe)来解析的,升级Python2可能打乱了它的版本识别。
打开命令提示符(CMD),输入:
py -0
这会列出当前Launcher能识别的所有Python版本,你应该能看到Python 2.7.13和Python 3.6.4的条目。如果3.6没显示,说明它没被Launcher注册,需要重新修复Python3的安装:找到Python3.6的安装包,运行后选择「Modify」,勾选「Install launcher for all users」和「Add Python to PATH」,完成修复。
2. 用Launcher支持的正确shebang格式
你之前尝试加Windows路径前缀是没必要的,py.exe支持简化的shebang写法:
- 要跑Python3,首行写:
#!python3 - 要跑Python2,首行写:
#!python2 - 甚至可以指定具体版本:
#!python3.6或#!python2.7
关键是要用py.exe来启动脚本,比如在CMD里输入:
py your_script.py
而不是直接双击脚本或者输入your_script.py(这时候可能调用的是关联到Python2的文件 handler)。
3. 修正.py文件的默认关联
如果双击脚本还是强制跑Python2,说明.py文件的默认打开程序不是py.exe,而是Python2.7的python.exe。可以通过CMD命令重置关联:
- 先设置文件类型关联:
assoc .py=Python.File
- 再设置该类型的打开命令指向py.exe:
ftype Python.File="C:\Windows\py.exe" "%1" %*
执行完这两个命令后,双击脚本就会通过py.exe来解析shebang了。
4. 检查PATH环境变量的优先级
如果你习惯直接用python your_script.py命令运行,那PATH里的路径顺序会影响哪个Python被调用。升级Python2后,它的路径可能被放到了PATH的最前面,导致优先启动Python2。
修改方法:
- 右键「计算机」→「属性」→「高级系统设置」→「环境变量」
- 在「系统变量」里找到
PATH,点击「编辑」 - 把Python3的安装路径(比如
C:\Python36和C:\Python36\Scripts)拖到Python2路径(C:\Python27、C:\Python27\Scripts)的上方 - 保存后重启CMD,输入
python --version测试是否默认是Python3(如果需要的话)
5. 验证测试
写两个简单的测试脚本验证:
test_py2.py:
#!python2 import sys print("Running Python version:", sys.version)
test_py3.py:
#!python3 import sys print("Running Python version:", sys.version)
然后分别运行:
py test_py2.py py test_py3.py
如果输出分别对应2.7.13和3.6.4,说明问题解决了。
内容的提问来源于stack exchange,提问作者FiveBlue

