cx_freeze python sqlite3 база данных не работает после build.exe?

В основном у меня есть приложение pyqt, которое использует базу данных sqlite3, теперь я использовал Cx_Freeze, чтобы превратить его в исполняемый файл.

Я считаю, что база данных и запросы отлично работают, когда они запускаются как.py, но после преобразования cx_freeze в.exe графический интерфейс работает безупречно, но база данных не отвечает ни на какие запросы.

Вот код для скрипта установки:

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 это не удается.

Заранее спасибо за помощь.

2 ответа

Решение

cx_freeze не копирует папку с драйверами для библиотечных баз данных. Если вы скопируете их, например, из "*C:\Python27\Lib\site-packages\PyQt4\plugins\sqldrivers*" с каталогом " sqldrivers " в вашем каталоге сборки, это должно сработать. У меня похожий случай, но с PySide - все заработало.

Здесь я нашел решение моих проблем, просто использовал py2exe или pyinstaller для создания дистрибутива, очевидно, версия Cx_freeze, которую я использовал, была несовместима с моей версией python.

Другие вопросы по тегам