PyInstaller报错

巨坑

1
2
Fatal error:PyInstaller does not include a pre-compiled bootloader for your platform.For more details and instructions how to build the bootloader see 
<https://pyinstaller.readthedocs.io/en/stable/bootloader-building.html>

的报错是因为runw.exe被杀毒软件误删……

1
2
ImportError:No module named ……
Failedtto execute script ……

的报错是因为:

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

打包隐藏的模块

参考资料

https://blog.csdn.net/Xiong_Big/article/details/54614231

(您还可以在归档页搜索文章标题)