PyInstaller报错
巨坑
1 | Fatal error:PyInstaller does not include a pre-compiled bootloader for your platform.For more details and instructions how to build the bootloader see |
的报错是因为runw.exe被杀毒软件误删……
1 | ImportError:No module named …… |
的报错是因为:
pyinstaller是很智能的,只要指定了入口py文件,那么它就会根据代码自动查找需要导入的包。但是隐式导入的话,平常运行是没有问题的,举例:
1 | # test1.pyfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmaker DB_CONNECT_STRING = 'mysql+pymysql://root:123456@localhost/study'engine = create_engine(DB_CONNECT_STRING, echo = False)DB_Session = sessionmaker(bind = engine)session = DB_Session() print('this is my test') |
运行这个ORM库的初始化引擎,是没有问题的,在console得到结果:
this is my test
那么我们开始打包,使用最简单的pyinstaller test1.py。打包完成后,在当前目录下有个dist文件夹,进入dist下的test1文件夹,然后打开cmd,运行这个exe,我们就会发现:
这是怎么回事呢?那么问题来了,sqlalchemy这个库在初始化的时候是不需要显示导入引擎库的,它自己有一个create_engine()的函数来初始化,这个字符串是使用者根据规则来自己填写的。其实解决的方法很简单,我们只要在显式导入pymysql这个库即可。现在我们导入这个库:
找到输出的日志文件找到需要导入的库,打包命令加参数:
1 | --hidden-import MODULENAME |
打包隐藏的模块
参考资料