You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyInstaller打包的Python exe运行即崩溃,报MSVCP140.dll错误且MySQL连接异常

PyInstaller打包的Python exe运行即崩溃,报MSVCP140.dll错误且MySQL连接异常

看起来你的Python程序在VS Code调试环境下运行完全正常,但用PyInstaller打包成单文件exe后就直接崩溃,还出现了MSVCP140.dll相关的错误,同时你通过日志发现MySQL连接也有问题。结合你提供的事件查看器日志和打包命令,我来帮你一步步排查解决:

一、先解决MSVCP140.dll冲突问题

从错误日志能看到,崩溃时调用的是PyQt5打包进去的MSVCP140.dll(路径是C:\Users\Leno\AppData\Local\Temp\_MEI122402\PyQt5\Qt5\bin\MSVCP140.dll),这大概率是Qt自带的VC库和系统中MySQL需要的VC库版本冲突导致的:

  • 打包时排除Qt自带的VC库:修改打包命令,强制让exe使用系统安装的VC++库,添加--exclude-module参数排除Qt的MSVCP140.dll:
    pyinstaller --onefile --noconsole --hidden-import=modulename --hidden-import=mysql.connector --name "TemperedGlass" --exclude-module=PyQt5.Qt5.bin.MSVCP140.dll .\main.py
    
  • 确认VC++ redist版本匹配:你已经安装了vc_redist,但要注意安装对应架构的版本(x86和x64都装更保险),并且要和错误日志里的MSVCP140.dll版本(14.26)匹配,建议安装VS2019对应的vc_redist包,或者直接安装最新版的VC++ redist合集。

二、解决MySQL连接异常问题

日志提示MySQL连接失败,这也是PyInstaller打包常见的坑,因为它经常漏掉mysql-connector的底层依赖:

  • 强制收集mysql-connector所有依赖:除了--hidden-import=mysql.connector,改用--collect-all=mysql.connector参数,让PyInstaller把mysql-connector的所有相关文件都打包进去:
    pyinstaller --onefile --noconsole --collect-all=mysql.connector --name "TemperedGlass" --exclude-module=PyQt5.Qt5.bin.MSVCP140.dll .\main.py
    
  • 检查连接字符串和工作目录:打包成exe后,程序的工作目录可能和开发时不一样,如果你用了相对路径的配置文件,要确保exe运行时能找到它,或者用--add-data参数把配置文件打包进去(比如--add-data="db_config.ini;.")。另外,试试把MySQL连接地址从localhost换成127.0.0.1,有时候localhost的解析在打包后会出问题。
  • 临时开启控制台调试:暂时去掉--noconsole参数打包,这样运行exe时会弹出控制台,能直接看到MySQL连接的具体错误信息(比如认证失败、驱动缺失等),比写日志更高效。

三、额外的排查小技巧

  • 清理打包缓存:删除生成的builddist文件夹和TemperedGlass.spec文件,重新打包,避免旧缓存文件干扰。
  • 更新PyInstaller:旧版本的PyInstaller有不少已知的依赖打包bug,执行pip install --upgrade pyinstaller更新到最新版再试试。

备注:内容来源于stack exchange,提问作者Musa AKYUZ

火山引擎 最新活动