使用PyInstaller打包exe时SQLAlchemy钩子报错,升级无效怎么办?
解决PyInstaller打包时SQLAlchemy钩子的eval错误
以下是几个可行的解决方法,按优先级尝试:
修改PyInstaller的SQLAlchemy钩子文件
找到报错的hook-sqlalchemy.py文件(路径如C:\Users\semnome\AppData\Local\Programs\Python\Python310\lib\site-packages\PyInstaller\hooks\hook-sqlalchemy.py),打开后替换掉第31行附近的dialects = eval(dialects.strip())代码:from sqlalchemy.dialects import registry dialects = list(registry.loaded().keys())或者如果你明确知道项目用到的方言,直接写死列表,比如
dialects = ['sqlite', 'mysql+pymysql'],避免动态解析出错。显式导入项目用到的SQLAlchemy方言
在你的主脚本开头,手动导入实际使用的方言模块,比如用MySQL就加:import sqlalchemy.dialects.mysql这样PyInstaller会直接打包该模块,跳过钩子的动态解析步骤。
降级PyInstaller到兼容版本
新版本PyInstaller可能和当前SQLAlchemy版本不匹配,试试降级到稳定版本,比如:pip install pyinstaller==5.13.2排除不需要的SQLAlchemy方言模块
打包时用--exclude-module参数去掉不用的方言,减少钩子的处理负担,比如不用Oracle就加:pyinstaller --exclude-module sqlalchemy.dialects.oracle your_script.py
内容的提问来源于stack exchange,提问作者diegooli
相关产品推荐
相关产品推荐

