多Python版本共存时直接执行脚本出现库加载不匹配的问题排查
多Python版本共存时直接执行脚本出现库加载不匹配的问题排查
看起来你遇到了多Python版本共存环境下,直接执行.py脚本时的模块加载冲突问题,我帮你一步步拆解原因和解决办法:
先明确问题现象
- 直接运行
globaj.py时触发AssertionError: SRE module mismatch错误 - 但通过
python globaj.py执行脚本却完全正常 - 系统中安装了Python 3.13、3.11等多个版本,
PATH里Python3.13的路径排在最前,python --version和py --version都显示是3.13.1 - 文件关联配置显示
.py=Python.File,而Python.File指向系统的py.exe启动器
问题核心原因
直接执行脚本时调用的是Windows的Python Launcher(py.exe),它会根据脚本shebang行、本地版本配置文件、环境变量等优先级来选择Python版本,大概率是它误加载了Python3.11的SRE模块,导致和Python3.13的库版本不匹配。
具体排查和解决步骤
- 检查脚本的shebang声明:看看你的
globaj.py开头有没有类似#!/usr/bin/env python3.11的行,如果有,py.exe会优先用这个版本执行,自然会出现模块冲突。把它改成#!/usr/bin/env python3.13或者直接删除shebang行即可。 - 检查本地版本配置文件:查看当前脚本目录下有没有
.python-version或者pyproject.toml文件,里面如果指定了Python3.11作为默认版本,修改成3.13或者删除这些文件。 - 排查干扰性环境变量:
打开命令行执行以下命令,查看是否存在指向Python3.11的环境变量:
如果有输出内容(比如指向set PYTHONHOME set PYTHONPATHC:\Program Files\Python311),临时清除这些变量再试:
之后再直接运行脚本,看是否恢复正常。如果正常,就去系统环境变量里永久删除这些错误的配置。set PYTHONHOME= set PYTHONPATH= - 强制指定
py.exe使用3.13版本:
可以在脚本开头添加#! python3.13,或者直接用以下命令执行脚本:
如果这样执行正常,说明py -3.13 globaj.pypy.exe的默认版本选择逻辑有问题,需要调整默认版本。 - 修改
py.exe的默认版本:
可以通过修改py.ini文件来设置默认版本,这个文件通常在C:\Windows\py.ini或者%USERPROFILE%\py.ini路径下,打开后添加以下内容:[global] default=3.13 - 直接修改文件关联到指定Python版本:
如果不想依赖py.exe的版本选择逻辑,直接把.py文件关联到Python3.13的执行程序:assoc .py=Python.File ftype Python.File="C:\Program Files\Python313\python.exe" "%L" %*
总结
本质问题是直接执行脚本时,py.exe没有正确选用Python3.13,反而加载了Python3.11的SRE模块导致版本不兼容。通过上述步骤排查shebang、本地配置、环境变量,或者直接固定文件关联的Python版本,就能解决这个冲突问题。
备注:内容来源于stack exchange,提问作者watbywbarif
相关产品推荐
相关产品推荐

