目录
- 1 问题
- 2 问题分析
- 3 解决过程
- 3.1 确保Pillow库存在
- 3.2 迷惑阶段
- 3.3 解决问题
- 4 希望大佬解答
1 问题
今天做了一个使用Python写的脚本文件.py,打算把它转换成.exe文件。点击生成的exe文件时,出现了如下弹窗。
2 问题分析
根据错误描述:
Failed to execute script 'version03’due to unhandled exception:No module named ‘PIL’
以及
Traceback(most recent call last):
File “version03.py”,line 3,in
ModuleNotFoundError:No module named ‘PIL’
都在说明,生成的exe文件里缺失了PIL库。
3 解决过程
3.1 确保Pillow库存在
检查自己虚拟环境中是否有Pillow库
打开Anaconda,进入项目所依赖的虚拟环境,列出列表检查Pillow库是否存在
activate virtualName
pip list
显然,库是存在于项目所处的虚拟环境中的
这期间,我还把脚本发给我的同门帮我生成exe文件,发现他生成的文件并没有出现问题,可以直接执行。
关于Pillow的下载、卸载和更新可以参考这个博主的文章:
报错:ModuleNotFoundError: No module named 'PIL’解决方法
3.2 迷惑阶段
我把涉及的库文件能更新到最新版本的,都更新到最新版本。考虑到我生成了GUI界面,我使用的是thinter库,还有PyQt库等等。于是又把之前版本中使用PyQt库的脚本转换为exe文件,再次点开,发现此时显示的是:缺失PyQt库。
此时,我认为一定是什么地方忽略了,导致依赖库没有添加到可执行文件中去。直到我看到了这篇文章
PyQT5打包:用PyInstaller完美打包exe
文章提到:PyInstaller库和pandas库分别在全局环境和虚拟环境当中,使用PyInstaller打包时,只能在PyInstaller所以处的环境(全局环境)中去寻找程序中import的包。
按照他的办法:
3.3 解决问题
首先:win+r,打开cmd
输入:pip list查看全局环境包含的库文件
显然,全局环境中没有Pillow库
接下来就简单了,按照大部分常用的办法下载Pillow库
pip install Pillow
然后回到Pycharm的终端中,再次输入py转换exe的命令
pyinstaller --onefile --windowed yourFileName.py
回车,再次点击生成的exe文件。
在我的这个脚本中,除了Pillow库,还缺失了另一个库。然后再把另一个库也下载到全局环境中就好了。
就可以正常运行了!!!!
4 希望大佬解答
为什么我的虚拟环境中含有程序所需要的所有库,以及转换成exe文件的PyInstaller库,但不能再虚拟环境中转换呢?而要在全局环境中下载相关需要的import库?