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 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:在使用 cx_Freeze 冻结的应用程序中导入 win32clipboard 时,DLL 加载失败