PySide (1.1.2), cx_freeze, WinXP, Python 3.3: ImportError: DLL load failed

Posted

技术标签:

【中文标题】PySide (1.1.2), cx_freeze, WinXP, Python 3.3: ImportError: DLL load failed【英文标题】: 【发布时间】:2013-07-31 03:47:31 【问题描述】:

我正在尝试使用 cx_freeze 冻结使用 PySide 库的 Python 3.3 代码以及 Windows XP(x86、SP2/3)上的所有代码。

python setup.py build 运行成功,但可执行文件抛出 ImportError

ImportError: DLL load failed: 此应用程序无法启动,因为应用程序配置不正确。重新安装 [...]

相同的构建在 Windows 7 x64 (SP1) 上运行良好。

我使用的版本如下:

Win32 上的 Python 3.3.0(v3.3.0:bd8afb90ebf2,2012 年 9 月 29 日,10:55:48)[MSC v.1600 32 位(英特尔)] cx_Freeze-4.3.1.win32-py3.3 PySide-1.1.2.win32-py3.3

两个 QT DLL 库都被复制到构建文件夹(QtCore.dllQtGui.dll),library-zip 在PySide 文件夹/模块中包含两个 .pyc 等效项。

即使使用最简单的测试代码也会出现此问题(并且如果代码也在“实时”Python 安装上运行*):

from PySide import QtCore, QtGui

if __name__ == "__main__":
    app = QtGui.QApplication("My Application")
    win = QtGui.QMainWindow()
    win.show()
    app.exec_()

使用更新版本的 PySide 可能会解决问题,但由于 PySide 1.2.0 引入了 cx-freeze 的新问题(文件加载错误)我想知道是否有人成功地冻结了 Windows XP 库存上的 PySide 包?

否则将不得不等到 PySide 1.2.1 发布并保持我对该版本的希望。

查看我的评论:我不确定这是否真的在我的测试过程中发生,实际上是出于相同的原因还是其他原因,例如。导致冻结版本中问题的实际模块没有正确安装..

【问题讨论】:

您说当代码在实时 Python 安装上运行时会出现问题?所以这不是特定于冻结的应用程序? 是的,这就是我所说的,但是当我在不同平台上进行测试时,这肯定是在激烈的战斗中发生的,而实际安装的模块(最终成为罪魁祸首)可能没有正确安装。我没有再次重构场景来证明相反的情况,但这是我的理论。我会把它放在大括号中以避免混淆,谢谢。 【参考方案1】:

原来有一个简单的解决方案:应用程序正在使用的另一个模块的 DLL 丢失;将其复制到冻结的 EXE 旁边的根构建文件夹中很容易解决问题。

解决这些问题的最佳(可能也是唯一)攻击方法可能是将所有 DLL 从使用的模块一个一个地复制到构建目录中,直到冻结的构建不再抛出错误。我找不到其他方法,因为堆栈跟踪没有指向加载失败的特定文件。

如果有人遇到类似问题,我很乐意提供额外信息。

【讨论】:

人们经常推荐Process Explorer 来查看你正在运行的应用程序加载了哪些DLL。【参考方案2】:

我过去也遇到过类似的问题,我可以通过下载“Microsoft Visual C++ 2008 Redistributable Package (x86)”解决它。

【讨论】:

以上是关于PySide (1.1.2), cx_freeze, WinXP, Python 3.3: ImportError: DLL load failed的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 cx_freeze 和 PySide2 进行编译

使用 cx_freeze 和 bdist_msi 为 PySide 应用程序创建 MSI

使用 cx_freeze 冻结后的绝对路径(Qt5 / PySide2 App)

Cx_Freezing PySide,praw,请求应用程序在冻结时停止工作

pySide: ExtensionLoader_Pyside_QtGUI.py 找不到指定的模块

cx_Freeze 的问题 - ImportError