我的PyQt应用程序在Linux上运行时,在我的Windows构建环境中运行时,或在使用py2exe构建的机器上冻结时运行正常。但是,在将冻结的可执行文件及其支持文件移动到另一台计算机后,它无法加载数据库驱动程序。
当我使用Python2.5和早期版本的PyQt和py2exe时,它工作正常。但升级我的工具链后,我得到了这些错误:
我有一个sqldrivers文件夹,我放了qsqlite4.dll。这对于以前的构建环境是必要的,但移动或重命名该DLL不会改变任何行为。我认为这是Qt找不到的DLL,但我无法告诉Qt在哪里看。
我目前正在运行这些版本:
Dependency Walker中的分析给出了这个错误:
LoadLibraryW(“\ application \ sqldrivers \ qsqlite4.dll”)返回NULL。错误:此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题(14001)
当我问Dependency Walker有关Qsqlite4.dll的详细信息时,它说:
错误:“\ application \ sqldrivers \ QSQLITE4.DLL”的Side-by-Side配置信息包含错误。
这可以解释为什么DLL不会加载,但我仍然不清楚如何解决它。仔细检查显示我调用的大多数DLL的错误。我是否需要为每个加载的Qt DLL包含一个清单?
提前致谢。
答案 0 :(得分:3)
来自未来的亲人:这是我们到目前为止所发现的......
接受的答案并没有真正说明他们复制了什么样的dll以及在哪些地方。我设法通过复制相对于exe和qt dll所在的sqldrivers
目录内的驱动程序来修复它(我正在使用PySide,但也应该使用PyQt4)。在setup.py中:
setup(
...,
data_files = [('sqldrivers', ('C:\Python27\Lib\site-packages\PySide\plugins\sqldrivers\qsqlite4.dll',))],
...,
)
答案 1 :(得分:2)
我解决了!
我有一个非常聪明的方法来避免让我的用户安装vcredist - 我将清单和DLL复制到两个地方,所有关于MS DLL的错误都消失了。那是我开始试图找出这个SQLite驱动程序错误的时候。
我没有想象的那么聪明。如果我安装vcredist所有“Driver Not Loaded”和“No SQL drivers found”错误都会消失。精氨酸。
答案 2 :(得分:0)
尝试重新安装SOLite,或者验证你是否已将DLL放在正确的位置,因为我记得MySQL DLL必须在System32目录中开发使用它的东西。
问候。