【问题标题】:cx_freeze python sqlite3 database doesn't work after build.exe?cx_freeze python sqlite3数据库在build.exe后不起作用?
【发布时间】:2016-04-16 14:06:30
【问题描述】:

基本上我有一个使用 sqlite3 数据库的 pyqt 应用程序,现在我使用 Cx_Freeze 将其转换为可执行文件。

我发现数据库和查询以 .py 格式运行时运行良好,但在将 cx_freeze 转换为 .exe 后,gui 可以完美运行,但数据库不响应任何查询。

这是安装脚本的代码:

from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need
# fine tuning.
buildOptions = dict(packages = [],
    excludes = [],
    includes = ["sip", "PyQt5.QtSql"],
    include_files = ["tpaData.db"])

import sys
base = 'Win32GUI' if sys.platform=='win32' else None

executables = [Executable('testTpa.py', base=base)]

setup(
    name='Tpa APP',
    version = '0.1',
    description = 'A PyQt TPA Program',
    options = dict(build_exe = buildOptions),
    executables = executables
)

这是我用来实例化数据库和应用程序的代码:

def __init__(self, dialog):
        Ui_Form.__init__(self)
        self.setupUi(dialog)
        self.createConnection()

def createConnection(self):
        self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName("tpaData.db")
        self.db.open()
        self.query = QtSql.QSqlQuery()
        self.query.exec_("create table doses(dose text, bolus text, discard text, remaining text, time1 text, time2 text, time3 text, comment text)")

稍后在应用程序中,我使用 query.prepare 方法生成输入字符串,然后使用 query.bind 方法将值绑定到 query.prepare 字符串。最后我使用 query.exec_() 提交准备好的字符串。

在开发环境(.py 文件)工作,只需发布​​ cx_freeze 失败。

提前感谢您的帮助。

【问题讨论】:

    标签: python sqlite cx-freeze qsqldatabase


    【解决方案1】:

    在这里想出了解决我的问题的方法,只是使用 py2exe 或 pyinstaller 进行分发,显然我使用的 Cx_freeze 版本与我的 python 版本不兼容。

    【讨论】:

      【解决方案2】:

      cx_freeze 不会复制包含库数据库驱动程序的文件夹。例如,如果您将它们从“*C:\Python27\Lib\site-packages\PyQt4\plugins\sqldrivers*”复制到您的构建目录中的目录“sqldrivers”应该可以工作。我有一个类似的案例,但使用 PySide - 它奏效了。

      【讨论】:

      • 我会试试 pyside,因为它非常接近 qt4。感谢您的提示!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      相关资源
      最近更新 更多