重点:不要在全局环境 pip install pyinstaller。习惯各个项目独立环境的,就不要在全局环境 pip install pyinstaller,不小心安装了的,也请删掉。很容易一不小心掉坑。

因为有时忘记启动venv,调用路径就是全局的路径。启动了venv,但该venv没有安装pyinstaller,开发调试顺利,打包ModuleNotFoundError

对于新手来说 pyinstaller 坑还是比较多的。

1、首先遇到的是闪退问题。

解决办法:

在打包的py文件主函数最后一行添加以下代码

 input("please input any key to exit!")

然后把exe拖进cmd命令窗口,回车运行,就能够看到报错信息了。

》》》注意打包时不能带 --noconsole参数,否则就算在cmd窗口也看不到报错信息的。例如:pyinstaller test.py --noconsole 生成的test.exe 拖到cmd窗口执行,出错了,错误信息也不会显示出来

2、提示 ModuleNotFoundError: No module named 'xxx'

试了百度的那些方法,都不太好使,虽然加入 --hidden-import参数和绝对路径能解决,但缺好多module啊,每次仅能修一个好痛苦。

后来我试了最简单的,创建一个全新的venv环境,只有一个.py文件,整个程序只import一个module(我用MySQLdb这个module测试),在pycharm的terminal里面也成功pip install mysqlclient了。

生成的exe,依然提示ModuleNotFoundError: No module named 'MySQLdb'。

我突然想起,这个venv环境里,我并没有安装过pyinstaller这个包( pip install pyinstaller ) 所以,我在pycharm的terminal中执行 pyinstaller test.py时,调用的是全局环境的pyinstaller,而全局环境中没有安装mysqlclent。在pycharm的terminal中执行 pyinstaller test.py时,全局的pyinstaller仅在全局环境中找mysqlclent,找不到就没有导入了。

解决方案:

1、先在venv环境中安装pyinstaller这个包,

2、然后在venv环境中(terminal)执行 pyinstaller test.py

允许test.exe 成功!没有报错了!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐