用pyinstaller 打包程序碰到的问题和解决方法(scipy...)

发布时间 2023-03-25 16:13:59作者: 木凌云

一、打包程序库选择

  1. py2exe. 不支持python3

  2. cx_Freeze. 现在只更新到python3.3

  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