Найти - Пользователи
Полная версия: сборка PyQt4, QtSql и cx_freeze
Начало » GUI » сборка PyQt4, QtSql и cx_freeze
1
tiglon
Доброго времени суток,
возникла проблема при переносе собранного приложения на другие системы. Не определяет QtSql драйвер (Driver not load). При этом в папке с приложением есть папка sqldrivers с драйверами из \PyQt4\plugins . И на моём пк всё работает(на нём и собирается), но стоит скопировать на другую систему, сразу ошибка. Системы одинаковые.

setup.py
from cx_Freeze import setup, Executable, build_exe
import sys
import os.path
build_options = {'build_exe':
                    {'includes': ["dbm.ndbm", "dbm.dumb",'PyQt4.QtSql'],
                     'excludes': ["tkinter"],
                     'include_files': ['1.png','file_txt.png', 'xml.png', 'ldap.png', 'refresh.png']
                     }}
script = os.path.join("C:\\Billing", "billing.py")
if sys.platform == 'win32':
    exe = Executable(script, targetName="billing.exe", base="Win32GUI")
else:
    exe = Executable(script, targetName="billing.exe", base="Win64GUI")
setup(name = "Billing",
     version = "1.0",
     description = "Billing mazafaka",
     options = build_options,
     executables = [exe],
    )

В гугле куча похожих проблем, совет один скопировать дравера из папки plugins. Это помогает, но только до копирования.
reclosedev
А qt.conf есть?
Попробуйте такую структуру:
├───QT_plugins
│ ├───imageformats
│ └───sqldrivers
└───qt.conf
└───application.py
qt.conf
[Paths] 
Binaries = .
Plugins = QT_plugins
tiglon
Не было, сделал так.
from cx_Freeze import setup, Executable, build_exe
import sys
import os.path
build_options = {'build_exe':
                    {'includes': ["dbm.ndbm", "dbm.dumb"],
                     'excludes': ["tkinter"],
                     'include_files': ['qt_plugins','qt.conf']
                     }}
script = os.path.join("C:\\Billing", "billing.py")
if sys.platform == 'win32':
    exe = Executable(script, targetName="billing.exe", base="Win32GUI", copyDependentFiles=True, )
else:
    exe = Executable(script, targetName="billing.exe", base="Win64GUI")
setup(name = "Billing",
     version = "1.0",
     description = "Billing mazafaka",
     options = build_options,
     executables = [exe],
    )

Всё равно на другой машине пишет driver not loaded.
Вставил в основной код
dialog=QtGui.QErrorMessage(self)
        dialog.showMessage("  ".join(QtSql.QSqlDatabase.drivers()))
На моей машине показывает QSQLITE QMYSQL3 QMYSQL QODBC3 QODBC
А на другой QSQLITE QODBC3 QODBC
Как будто этого драйвера нет, хотя запускаю всё с флешки что у себя, что там.
tiglon
После того как удалил из path путь к PyQt4, скрипт стал показывать тоже только QSQLITE QODBC3 QODBC.
Кеш в реестре удаляю перед каждой сборкой.
tiglon
Видимо необходимо собирать драйвер для mysql вручную,
нашёл выход(если это решение можно так назвать).
Заменил
self.db=QtSql.QSqlDatabase.addDatabase("QMYSQL")
на
self.db=QtSql.QSqlDatabase.addDatabase("QODBC")
добавил
self.db.setDatabaseName("DRIVER={MySQL ODBC 5.2a Driver};Server=localhost;DATABASE=x") 

На клиентской пк необходимо ставить “Connector/ODBC is a standardized database driver for Windows, Linux, Mac OS X, and Unix platforms” и всё заработало.
Не знаю насколько это правильно, но это работает и меня это устраивает)
reclosedev
Попробовал на виртуалке с чистой XP, действительно не работает.
Посмотрел в зависимости, там libmysql.dll

Python27\Lib\site-packages\PyQt4\libmysql.dll

Если положить ее рядом с .exe (не в sqldrivers), работает
from PyQt4 import QtSql, QtCore
 
app = QtCore.QCoreApplication([])
print map(str, QtSql.QSqlDatabase.drivers())
вывод:
['QSQLITE', 'QMYSQL3', 'QMYSQL', 'QODBC3', 'QODBC']

А если еще добавить
Python27\Lib\site-packages\PyQt4\libeay32.dll
Python27\Lib\site-packages\PyQt4\ssleay32.dll
то и PostgreSQL заработает.

Кстати, для информации: на чистой XP потребовалось установить “Microsoft Visual C++ 2008 пакет обновления 1 (SP1) (x86)”
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB