首先,Python打包成exe就是个大坑。
最近在做一些小程序,想着分享给一些朋友用用,就想到了打包程序。结果不看不知道,一看原来这东西是个深渊。
使用的是Pyinstaller 3.6/Python 3.8.3环境进行的编译打包。
新版本的Pyinstaller虽然支持了Python3,但是依旧有遗留下来的问题。打包后程序运行后会提示未找到模块。
1 | ModuleNotFoundError: No module named 'pkg_resources.py2_warn' |
这个模块照着pkg_resources源码一搜发现,在它的__init__.py
里面import了这个模块,而且这个模块本身的内容就是一个逻辑判断,看你是不是使用了Python2,如果是就报错。
1 | import sys |
不知道是哪里的咖喱代码导致这个模块无法导入,总之其中一个解决方法就是直接在__init__.py
里面注释掉py2_warn这个import。
另一个方法是在打包的根目录中找到.spec,里面的hiddenimports加上’pkg_resources.py2_warn’,即手动import模块,之后再对.spec进行打包操作即可。