用pyinstaller 打包程序碰到的问题和解决方法(scipy...)
一、打包程序库选择
-
py2exe. 不支持python3
-
cx_Freeze. 现在只更新到python3.3
-
pyinstaller. 支持python2、python3所有版本
因为现在使用的版本是python3.6,所以没得选择,只能使用pyinstaller。另外百度了一圈,pyinstaller还是比较好用的。
二、安装和使用
用pip安装就可以了。
pip install pyinstaller
没有提示任何出错信息,没啥好写的。
基本使用方法:
pyinstaller -F XXXX.py
cd命令跳转至程序目录,XXXX.py是要打包的主文件,其他引用文件会一起打包。
pyinstaller -F -w -i XXXX.ico XXXX.py
-w选项不带命令行窗口,-i选项是程序图标。
三、出现的问题
用上面的命令打包,过程比较顺利,也显示以下结果信息。
但是运行打包好的程序时,出现以下错误信息:
ImportError: DLL load failed: 找不到指定的模块。
[6772] Failed to execute script calc_similar_gui错误。
对以上错误信息进行分析,发现是scipy里的一些模块找不到。
又分析打包时出现的一些警告,
参考网上的解决方法把/lib/site-packages/scipy/extra-dll/ 的所有.dll复制到要打包的目录下。
然后重新打包,发现WARNING提示信息已消失。
运行重新打包的.exe程序,结果又出现新的错误信息:
ModuleNotFoundError: No module named 'scipy._lib.messagestream'
[6656] Failed to execute script calc_similar_gui
结合ImportError when importing certain modules from SciPY这个问题的解决方法在/scipy/__init__.py文件的底部添加
from scipy._lib import messagestream
继续打包,终于成功,所有问题全部解决。
四、附录
- python版本3.6.6
- scipy版本1.1.0