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

一、打包程序库选择

  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错误。

用pyinstaller 打包程序碰到的问题和解决方法(scipy...)_第1张图片

对以上错误信息进行分析,发现是scipy里的一些模块找不到。

又分析打包时出现的一些警告,

用pyinstaller 打包程序碰到的问题和解决方法(scipy...)_第2张图片

参考网上的解决方法把/lib/site-packages/scipy/extra-dll/ 的所有.dll复制到要打包的目录下。

用pyinstaller 打包程序碰到的问题和解决方法(scipy...)_第3张图片

然后重新打包,发现WARNING提示信息已消失。

运行重新打包的.exe程序,结果又出现新的错误信息:

ModuleNotFoundError: No module named 'scipy._lib.messagestream'
[6656] Failed to execute script calc_similar_gui

用pyinstaller 打包程序碰到的问题和解决方法(scipy...)_第4张图片

结合ImportError when importing certain modules from SciPY这个问题的解决方法在/scipy/__init__.py文件的底部添加

from scipy._lib import messagestream

用pyinstaller 打包程序碰到的问题和解决方法(scipy...)_第5张图片

继续打包,终于成功,所有问题全部解决。

四、附录

  1. python版本3.6.6
  2. scipy版本1.1.0

 

你可能感兴趣的:(python)