sqlite - 使用 py2exe 时,PyQt 应用程序无法加载 SQlite 数据库

标签 sqlite pyqt4 py2exe

我的 PyQt 应用程序在 Linux 上运行时,在我的 Windows 构建环境中运行时,或者在使用 py2exe 构建它的机器上卡住时运行良好。但是在将卡住的可执行文件及其支持文件移动到另一台机器后,它无法加载数据库驱动程序。

当我拥有 Python2.5 和更早版本的 PyQt 和 py2exe 时,它​​运行良好。但是在升级我的工具链后,我得到了这些错误:

  • dbname.open 返回错误
  • lastError(dbname) 是“未加载驱动程序”

  • 我有一个放置 qsqlite4.dll 的 sqldrivers 文件夹。这对于以前的构建环境是必要的,但移动或重命名该 DLL 不会改变任何行为。我认为这是 Qt 找不到的 DLL,但我无法告诉 Qt 去哪里看。

    我目前正在运行这些版本:
  • python-2.6.3
  • PyQt-Py2.6-gpl-4.6-1
  • py2exe-0.6.9.win32-py2.6

  • Dependency Walker 中的分析给了我这个错误:
    LoadLibraryW("\application\sqldrivers\qsqlite4.dll") 返回 NULL。错误:此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题 (14001)。
    当我向 Dependency Walker 询问有关 Qsqlite4.dll 的详细信息时,它说:
    错误:“\application\sqldrivers\QSQLITE4.DLL”的并行配置信息包含错误。

    这可以解释为什么 DLL 不会加载,但我仍然不清楚如何修复它。仔细检查显示我调用的大多数 DLL 的错误。我需要为我加载的每个 Qt DLL 包含一个 list 吗?

    提前致谢。

    最佳答案

    来自 future 的亲爱的人们:这是我们迄今为止所发现的......

    接受的答案并没有真正说明他们复制了哪些 dll 以及在什么地方。我设法通过复制 sqldrivers 中的驱动程序来修复它。相对于 exe 和 qt dll 所在位置的目录(我使用的是 PySide,但也应该与 PyQt4 一起使用)。在 setup.py 中:

    setup(
        ...,
        data_files = [('sqldrivers', ('C:\Python27\Lib\site-packages\PySide\plugins\sqldrivers\qsqlite4.dll',))],
        ...,
    )
    

    关于sqlite - 使用 py2exe 时,PyQt 应用程序无法加载 SQlite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570542/

    相关文章:

    android - Helper.getWritableDatabase() 函数

    SQLite 查询插入记录如果不存在

    python - py2exe问题

    android - 我的应用程序在api 23上运行并在api 11上崩溃

    Jellybean 中的 Android SQLite 数据库事务/锁定更改

    python - PyQt5 : Create transparent window with opaque widgets

    python - 使用 PyQt4,如何将 mouseMoveEvent 设置为仅在 QMainWindow 中的 QWidget 内部工作,但不在 MainWindow 中工作

    python - 在PyQt4中在新窗口中制作qwidget

    python - 使用py2exe将python脚本编译为exe,出现错误

    python - py2exe 无法识别 jsonschema