使用 pyinstaller 时缺少 dll 文件

Posted

技术标签:

【中文标题】使用 pyinstaller 时缺少 dll 文件【英文标题】:Missing dll files when using pyinstaller 【发布时间】:2016-07-30 13:22:15 【问题描述】:

美好的一天!

我正在使用带有 qt5、pyqt5 和 sip14.8 的 python 3.5.2。 我也在使用最新的 pyinstaller bracnch (3.3.dev0+g501ad40)。

我正在尝试为基本的 hello world 程序创建一个 exe 文件。

from PyQt5 import QtWidgets
import sys

class newPingDialog(QtWidgets.QMainWindow):

def __init__(self):
    super(newPingDialog, self).__init__()
    self.setGeometry(50, 50, 500, 300)
    self.setWindowTitle("hello!")
    self.show()


app = QtWidgets.QApplication(sys.argv)
GUI = newPingDialog()
sys.exit(app.exec_())

起初,我曾经收到一些关于 crt-msi 的错误。所以我重新安装了 SDK 和 c++ 运行时并将它们添加到我的环境中。 但现在我不断收到有关缺少 dll 的错误(qsvg、Qt5PrintSupport)

6296 WARNING: lib not found: Qt5Svg.dll dependency of C:\users\me\appdata\local\programs\python\python35\lib\site-pac
kages\PyQt5\Qt\plugins\imageformats\qsvg.dll
6584 WARNING: lib not found: Qt5Svg.dll dependency of C:\users\me\appdata\local\programs\python\python35\lib\site-pac
kages\PyQt5\Qt\plugins\iconengines\qsvgicon.dll
6992 WARNING: lib not found: Qt5PrintSupport.dll dependency of C:\users\me\appdata\local\programs\python\python35\lib
\site-packages\PyQt5\Qt\plugins\printsupport\windowsprintersupport.dll
7535 WARNING: lib not found: Qt5PrintSupport.dll dependency of c:\users\me\appdata\local\programs\python\python35\lib
\site-packages\PyQt5\QtPrintSupport.pyd
8245 INFO: Looking for eggs
8245 INFO: Using Python library c:\users\me\appdata\local\programs\python\python35\python35.dll
8246 INFO: Found binding redirects:

我已经检查过,两个 dll 都存在并设置了它们的 PATH。我也尝试手动将它们添加到我的 dist 文件夹,但没有帮助。

我将非常感谢您的任何建议!

【问题讨论】:

'在你的 exe 中插入一个dll' 很难。尝试将as source 添加到构建器配置中。 from x import yimport x.yimport x.y as z 不同的东西 【参考方案1】:

这可能更像是一种解决方法,Pyinstaller 可能需要修复。

我发现--paths参数指向包含Qt5Core.dllQt5Gui.dll等的目录有帮助

pyinstaller --paths C:\Python35\Lib\site-packages\PyQt5\Qt\bin hello.py

【讨论】:

成功了!我已经花了 3 天的时间,您的解决方案奏效了!谢谢! 对我来说也一样。非常感谢这个小费。我几乎要放弃了。使用 --paths 它可以工作。 如果您使用虚拟环境,您还可以将 --paths 设置为 venv\Lib\site-packages\PyQt5\Qt\bin spec文件里面还有HOMEPATH变量可以automatically expand到python安装目录。在这里,它是C:\Python35\Lib\site-package\ 。它比硬编码路径更便携。这里它等于HOMEPATH + \\PyQt5\Qt\bin【参考方案2】:

我在 github 和 *** 上阅读了所有复杂的解决方案来解决这个问题。 但是,以下简单的解决方案对我有用:

第一步:pip3卸载pyinstaller

第 2 步:点安装 pyinstaller

第三步:pyinstaller --onefile filename.py

我在 2 台面临相同问题的不同计算机上尝试了此解决方案。 两者都有效。 请让我知道这是否也适合您。在那之后竖起大拇指将不胜感激。 干杯

【讨论】:

不适用于大多数使用 dll 的模块,我必须手动从 virtualenv 中添加 dll 自身的数据 为我工作;我怀疑是因为我有某种 Python 版本不匹配(当我使用 Python 3.9 时它抱怨缺少 python38.dll)。【参考方案3】:

此问题现已在 PyInstaller 的最新开发分支中修复,请参阅 this Issue for PyInstaller on GitHub。

【讨论】:

【参考方案4】:

通常添加包含未找到库的--Path 参数指向目录可以解决问题。如果您使用的是 PyInstaller 3.3dev,则命令字符串解析可能会出现问题。如果路径包含空格,通常会发生这种情况。在这种情况下,您可以修改 PyInstaller 生成的 .spec 文件中的 pathex 参数,然后使用 PyInstaller 运行它以构建可执行文件。

pyinstaller file_name.spec

希望这将很快得到解决.....

【讨论】:

【参考方案5】:

26095 警告:找不到库:c:\users\user\appdata\local\programs\python\python36-32\DLLs\ 的 api-ms-win-crt-runtime-l1-1-0.dll 依赖项选择.pyd

在 C: 驱动器中搜索 dll 并在 pyinstaller 命令中设置路径。以下命令修复了 Windows 10 中的上述 pyinstaller 错误:

pyinstaller --paths "C:\Windows\WinSxS\x86_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_50c6cb8431e7428f" hello.py

【讨论】:

【参考方案6】:

可以使用“pyinstaller --onefile filename.py”。 exe文件将在dist文件夹中创建

【讨论】:

以上是关于使用 pyinstaller 时缺少 dll 文件的主要内容,如果未能解决你的问题,请参考以下文章

pyinstaller打包在别的电脑上无法运行?

。exe文件在几秒钟内崩溃

Python脚本代码运行正常,但是使用pyinstaller打包成执行文件后运行提示缺少模块?

pyinstaller打包时怎么样添加dll动态库

Pyinstaller ImportError:导入 win32gui 时 DLL 加载失败

使用 Pyinstaller 制作的 Python Exe 试图从错误的位置找到 dll