PyInstaller打包Python脚本后MySQL连接报错问题排查请求
问题定位与解决方案
这是PyInstaller打包mysql-connector-python时的典型问题——PyInstaller的静态代码分析无法识别mysql.connector动态加载的插件模块和本地化语言文件,导致打包后的可执行文件缺失这些依赖项,进而触发报错。
核心问题拆解
- 插件缺失:
mysql.connector会根据MySQL服务器的认证方式动态加载对应插件(如caching_sha2_password),PyInstaller默认不会自动打包这类动态导入的模块。 - 本地化文件缺失:错误中的
ImportError: No localization support for language 'eng',是因为打包时未包含mysql.connector的英文语言包文件。
解决方案
方案1:命令行直接指定打包参数
通过PyInstaller的命令行参数,强制打包缺失的依赖:
--hidden-import:指定需要手动导入的插件模块--add-data:添加本地化语言文件目录
Windows环境打包命令
pyinstaller --onefile --hidden-import mysql.connector.plugins.caching_sha2_password --hidden-import mysql.connector.plugins.mysql_native_password --add-data "C:\Python38\Lib\site-packages\mysql\connector\locales\eng;mysql\connector\locales\eng" insert_dwi.py
注意替换
C:\Python38\Lib\site-packages为你的Python实际安装路径
Linux环境打包命令
pyinstaller --onefile --hidden-import mysql.connector.plugins.caching_sha2_password --hidden-import mysql.connector.plugins.mysql_native_password --add-data "/usr/local/lib/python3.8/site-packages/mysql/connector/locales/eng:mysql/connector/locales/eng" insert_dwi.py
注意替换
/usr/local/lib/python3.8/site-packages为你的Python实际安装路径
方案2:修改数据库连接配置(临时应急)
如果暂时不想调整打包参数,可以在连接配置中显式指定认证插件,绕过caching_sha2_password插件的加载需求,但本地化文件缺失问题仍需处理:
db_config_test = { 'host': '127.0.0.1', 'user': 'root', 'port': 3306, # 建议用整数类型,而非字符串 'password': '123456', 'database': 'dwi_test', 'auth_plugin': 'mysql_native_password' }
方案3:使用.spec文件持久化配置
如果需要多次打包,建议生成并修改.spec文件,更灵活地管理依赖:
- 生成基础.spec文件:
pyinstaller --onefile insert_dwi.py
- 打开生成的
insert_dwi.spec,修改Analysis段的datas和hiddenimports:
a = Analysis( ['insert_dwi.py'], pathex=[], binaries=[], datas=[('你的Python路径/site-packages/mysql/connector/locales/eng', 'mysql/connector/locales/eng')], hiddenimports=['mysql.connector.plugins.caching_sha2_password', 'mysql.connector.plugins.mysql_native_password'], # 其他默认内容保留 )
- 基于.spec文件打包:
pyinstaller insert_dwi.spec
内容的提问来源于stack exchange,提问作者Wangnan
相关产品推荐
相关产品推荐

