gpt4 book ai didi

python - PyInstaller .exe 文件提前终止而没有错误消息

转载 作者:行者123 更新时间:2023-12-03 21:52:05 25 4
gpt4 key购买 nike

我一直在尝试使用 PyInstaller 将我的程序作为捆绑的 .exe 文件分发给我的同事。该程序分析文本数据,可以从我的 CMD 完美运行。我使用 PyInstaller 3.6、Python 3.7、Windows 10 和 Anaconda3 作为我的 Python 环境。该程序有很多依赖项,包括 nltk、gensim、wordcloud、sklearn、matplotlib、mpld3、seaborn、pandas、numpy、xlsxwriter 和一些标准库。这也是一个相当长的程序,大约 2000 行。
问题:
到目前为止,我已经成功构建了 .exe 文件(作为一个文件夹和一个文件包)。为了测试 .exe 文件是否有效,我从我的 CMD 运行它。一切顺利(我的导入和函数运行正常,我被提示输入包含文本数据的 Excel 文件的名称,文本已被清除等)但它突然终止,没有任何警告或错误消息,在使用Gensim 的 SparseTermSimilarityMatrix 函数。我通过注释掉这一行进行了实验,它在下一行终止,再次没有任何消息。
我正在使用 .spec 文件构建 .exe 文件(这样我就可以将数据文件添加到我的包和几个隐藏的导入以克服模块未找到错误)。我对导致此问题的唯一指示是有关在构建时丢失 DLL 的警告:

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 文件可能会提前终止而不会出现错误消息 - 即使在 CMD 中也是如此?
2. 如何解决丢失的 DLL(我确实在我的计算机上找不到)?
更新:如果我首先激活我的 conda 环境,.exe 文件会从 CMD 成功运行! conda activate [myenv]然而,这违背了独立发行版的目的。

最佳答案

如果我第一次激活我的 anaconda 环境,在意识到 .exe 文件从我的 CMD 成功运行后,这里是我的 原创 解决方案,仅适用于一个文件夹包:
从我的 anaconda 环境的根目录中,我搜索了所有“dll”文件(返回很多)。我将搜索返回的所有 DLL 文件复制到我的包的“dist”文件夹,跳过重复项。
.exe 文件不再提前终止并且运行良好!
我在构建时收到的关于缺少 DLL 的警告似乎具有误导性——引用的 DLL 文件仍然不在我的计算机上。
解决方案更新:在手动将我的 anaconda 环境中的所有 DLL 文件复制到我的 bundle 的 dist 文件夹后,我通过删除我手动添加的每个 DLL 文件并测试 .exe 文件是否仍然像以前一样工作或提前终止来进行实验。 它归结为一个 DLL 文件:libiomp5md.dll - 从字面上看,这就是缺失的环节!因此,我的建议:

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

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

    关于python - PyInstaller .exe 文件提前终止而没有错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62625517/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com