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.dll
、QtGui.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 和 bdist_msi 为 PySide 应用程序创建 MSI
使用 cx_freeze 冻结后的绝对路径(Qt5 / PySide2 App)
Cx_Freezing PySide,praw,请求应用程序在冻结时停止工作