首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyInstaller .exe文件在没有错误消息的情况下提前终止。

PyInstaller .exe文件在没有错误消息的情况下提前终止。
EN

Stack Overflow用户
提问于 2020-06-28 16:49:05
回答 1查看 1.6K关注 0票数 5

我一直试图使用PyInstaller将我的程序作为捆绑的.exe文件分发给我的同事。该程序,分析文本数据,运行完美的从我的CMD。我使用PyInstaller 3.6、Python3.7、Windows10和Anaconda3作为我的Python环境。该程序有相当多的依赖关系,包括nltk、gensim、wordcloud、sklearn、matplotlib、mpld3、seaborn、大熊猫、numpy、xlsxwriter和一些标准库。这也是一个相当长的程序,~2000行。

问题:到目前为止,我已经成功地构建了文件(作为一个文件夹和一个文件包)。为了测试.exe文件是否工作,我从CMD运行它。一切都进行得很顺利(我的导入和函数运行正常,被提示输入包含文本数据的Excel文件的名称,文本被清理等等),但它突然终止,没有任何警告或错误消息,在一行使用Gensim的SparseTermSimilarityMatrix函数。我试着注释掉这一行,它在下一行结束,同样没有任何消息。

我正在使用一个.exe文件构建.spec文件(这样我就可以将数据文件添加到我的包和几个隐藏导入中,以克服错误)。对于造成此问题的原因,我唯一的指示是在构建时有关缺少DLL的警告:

代码语言:javascript
复制
108890 INFO: Looking for dynamic libraries
109047 WARNING: lib not found: msmpi.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_blacs_msmpi_lp64.dll
109293 WARNING: lib not found: impi.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_blacs_intelmpi_lp64.dll
109304 WARNING: lib not found: impi.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_blacs_intelmpi_ilp64.dll
109704 WARNING: lib not found: mpich2mpi.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_blacs_mpich2_lp64.dll
109754 WARNING: lib not found: pgc14.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_pgi_thread.dll
109757 WARNING: lib not found: pgf90rtl.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_pgi_thread.dll
109761 WARNING: lib not found: pgf90.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_pgi_thread.dll
110120 WARNING: lib not found: msmpi.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_blacs_msmpi_ilp64.dll
110164 WARNING: lib not found: mpich2mpi.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Library\bin\mkl_blacs_mpich2_ilp64.dll
112452 WARNING: lib not found: icuuc53.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Scripts\Qt5Core.dll
112459 WARNING: lib not found: icuin53.dll dependency of C:\Users\username\anaconda3\envs\pyexe\Scripts\Qt5Core.dll

如果有人能解释一下:,我将非常感激

1.为什么PyInstaller构建的.exe文件可能在没有错误消息的情况下提前终止?

2.如何处理丢失的DLL(实际上在我的计算机上找不到)?

更新:如果我第一次激活conda环境, .exe文件将成功地从CMD运行!然而,这违背了独立发行版的目的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-29 13:41:04

在实现了.exe文件成功地从我的CMD运行之后,如果我第一次激活我的anaconda环境,下面是我的原始解决方案,它只适合于一个文件夹包:

在我的anaconda环境的根目录中,我搜索了所有的"dll“文件(它返回了很多)。我将搜索返回的所有DLL文件复制到包的"dist“文件夹,跳过重复文件。

.exe文件不再提前终止,工作非常完美!

似乎我收到的关于在构建时丢失DLL的警告是误导的-引用的DLL文件仍然不在我的计算机上。

解决方案更新:在手动将所有DLL文件从我的anaconda环境复制到我的包的dist文件夹之后,我尝试删除我手动添加的每个DLL文件,并测试.exe文件是否仍能像以前一样工作或终止。--它归结为一个DLL文件: libiomp5md.dll --这实际上是缺少的链接!因此,我建议:

datas=[('libiomp5md.dll', '.')]

  • Build
  1. 在您的anaconda环境中搜索"libiomp5md.dll“,并将其复制到包含.spec文件
  2. 的目录中,将其作为数据文件添加到.spec文件中,并指定它应存储在包的根目录中:使用.spec文件(作为一个文件夹或一个文件包)存储可执行文件!

我希望这能帮助任何面临类似DLL相关问题的人。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62625517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档