PyQt4 需要将 DLL 移动到包根目录

3 投票
2 回答
3914 浏览
提问于 2025-04-16 09:30

我使用了来自 http://www.riverbankcomputing.co.uk/software/pyqt/download 的新安装包,适用于 Python 2.6 x86_64,但在一个特定的应用程序中导入 PyQt4 时遇到了小问题。

这是错误信息:

# ERROR : Traceback (most recent call last):
#   File "<Script Block >", line 2, in <module>
#     from PyQt4 import QtCore
# ImportError: DLL load failed: The specified procedure could not be found.
#  - [line 2]

这可能看起来有点熟悉。有趣的是,在之前的版本的 3D 软件中是可以正常工作的(而且在标准命令行中也可以),但在新版本的软件中却不行。我检查了应用程序中的 sys.path,想看看这个路径是否存在:C:\Python26\Lib\site-packages\PyQt4\bin

在这两个应用程序中,这个路径都是存在的。

最后我通过把 C:\Python26\Lib\site-packages\PyQt4\bin 中的 DLL 文件复制到 C:\Python26\Lib\site-packages\PyQt4 目录下,成功解决了这个问题。

有没有人知道这是为什么呢?我在进一步调试这个问题时遇到了困难(确保一切都是 64 位的,路径是正确的等等)。

谢谢你的帮助。

2 个回答

0

在我的 ...\PyQt4\bin 文件夹里,主要有几个可执行文件和很多 DLL 文件,估计这些都是原版的 Qt 文件。你在用 Python 的时候并不会直接使用这些文件。你会用到 .pyd 文件(其实它们在底层也是 DLL 文件),这些文件至少在我安装的环境中(Python 3.1,32位 Win7)是在主目录下(就是 ...\PyQt4),它们包含了将 Qt 封装起来以便在 Python 中使用的代码。

5

这个问题可能是因为PyQt4的安装程序把PyQt4\bin这个文件夹添加到了Windows的DLL搜索路径中。如果你同时安装了32位和64位的版本,只有其中一个版本能找到正确的DLL文件。

解决办法是把以下代码添加到每个Lib\site-packages\PyQt4_init_.py文件中:

import os
os.environ['PATH'] = ';'.join((os.path.join(
    os.path.abspath(os.path.dirname(__file__)), "bin"),
    os.environ['PATH']))

撰写回答