PyInstaller打包py转exe报Python.Runtime not found,已装pythonnet仍无效
问题原因
这个报错本质是PyInstaller自带的clr模块钩子无法识别pythonnet的安装路径,找不到核心依赖Python.Runtime.dll导致的,你之前找不到dll是因为没有定位到pythonnet的正确安装子目录。
解决步骤
- 第一步:重装兼容版本的pythonnet
先完全卸载当前版本的pythonnet,再安装稳定兼容版,确保安装到你打包所使用的Python环境中:
pip uninstall pythonnet -y pip install pythonnet==3.0.1
安装完成后在对应Python的交互终端执行import clr,无报错则说明安装正常。
- 第二步:定位Python.Runtime.dll文件
打开对应Python环境的site-packages目录,进入pythonnet/runtime/子目录,即可找到Python.Runtime.dll,你当前使用的用户级Python3.8的完整路径参考:
C:\Users\ADMIN.DESKTOP-USLQ9P3\AppData\Roaming\Python\Python38\site-packages\pythonnet\runtime\Python.Runtime.dll
将该dll文件复制到你的项目根目录(和app.py同目录)。
- 第三步:调整打包命令执行打包
在原打包命令基础上增加二进制文件绑定和隐藏导入参数:
PyInstaller app.py --noconsole --icon=./images/Source.ico --add-binary "Python.Runtime.dll;." --hidden-import clr
- 第四步(可选,上述步骤失效时使用):通过spec文件打包
如果直接改命令仍然报错,打开第一次打包生成的app.spec文件,修改Analysis配置段:
a = Analysis( ['app.py'], binaries=[('Python.Runtime.dll', '.')], # 新增该行,路径按你实际dll位置调整 hiddenimports=['clr'], # 新增该行 # 其余原有配置保持不变 )
保存后执行打包命令:
PyInstaller app.spec
- 第五步(极端情况备用):禁用冲突钩子
如果官方hook持续报错,可在打包命令中加入参数直接禁用该钩子,跳过自动检测逻辑:
PyInstaller app.py --noconsole --icon=./images/Source.ico --add-binary "Python.Runtime.dll;." --hidden-import clr --exclude-module _pyinstaller_hooks_contrib.hooks.stdhooks.hook-clr
内容的提问来源于stack exchange,提问作者user14618630
相关产品推荐
相关产品推荐

