cx_freeze:未加载 QODBC 驱动程序

Posted

技术标签:

【中文标题】cx_freeze:未加载 QODBC 驱动程序【英文标题】:cx_freeze: QODBC driver not loaded 【发布时间】:2014-02-15 00:32:31 【问题描述】:

我的 python 应用程序看起来像:

test.py

from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4 import QtSql

import sys
import atexit

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    db = QtSql.QSqlDatabase.addDatabase('QODBC')
    sys.exit(app.exec_())

如果我运行此应用程序,一切正常。但是,如果我使用 cx_freeze 创建可执行文件,我总是会收到以下错误:

QSqlDatabase: QODBC driver not loaded

QSqlDatabase: available drivers:

我使用以下命令来创建可执行文件:

C:\Python27\Scripts\cxfreeze.bat test.py --target-dir C:\Test --include-path="C:\Python27\Lib\site-packages\PyQt4"

如果我查看C:\Test(cx_freeze 创建可执行文件的位置),我会看到一堆 *.dll 文件,其中包含单词“sql”(qsqlodbc4.dll、QtSql4.dll...)

过去,我使用 cx_freeze 创建了一些 PyQT 应用程序,它总是运行良好。但是与 QtSql 模块一起,我总是收到上面的错误消息。

我的操作系统:Windows 7

你们对如何解决这个问题有任何想法吗?

编辑:好的,我明白了。我将PyQt4\plugins\sqldrivers的内容复制到C:\Test\sqldrivers,现在可以了。

亲切的问候

伯恩哈德

【问题讨论】:

谢谢,我已经filed an issue在使用QtSql时自动复制插件。 谢谢!我只是有同样的问题。即使所有文件都由 cx_freeze 自动复制到正确的文件夹并具有正确的大小,但用原始文件手动覆盖它们解决了问题! (也许您应该将您的解决方案添加为答案并接受它,以便更容易看到并且可以投票?) 【参考方案1】:

这只能在你的开发者机器上工作,但是当你创建一个 exe 文件并在其他机器上运行这个文件时它不起作用。

我用pyinstaller,问题解决了。

只使用:

pyinstaller --onefile --windowed myscript.py

【讨论】:

以上是关于cx_freeze:未加载 QODBC 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

exe 文件未运行(cx_Freeze + PySide)

ImportError:在使用 cx_Freeze 冻结的应用程序中导入 win32clipboard 时,DLL 加载失败

QODBC SELECT 需要 > 15 分钟才能返回结果

使用 cx_freeze 时如何加载泡菜模型?

CX_Freeze 可执行文件给出“无法加载文件系统编解码器”错误

使用 cx_freeze 时,运行 exe 时不会加载