Форум сайта python.su
Доброго времени суток,
возникла проблема при переносе собранного приложения на другие системы. Не определяет 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], )
Офлайн
А qt.conf есть?
Попробуйте такую структуру:
├───QT_plugins
│ ├───imageformats
│ └───sqldrivers
└───qt.conf
└───application.py
[Paths]
Binaries = .
Plugins = QT_plugins
Офлайн
Не было, сделал так.
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], )
dialog=QtGui.QErrorMessage(self) dialog.showMessage(" ".join(QtSql.QSqlDatabase.drivers()))
Офлайн
После того как удалил из path путь к PyQt4, скрипт стал показывать тоже только QSQLITE QODBC3 QODBC.
Кеш в реестре удаляю перед каждой сборкой.
Офлайн
Видимо необходимо собирать драйвер для 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")
Офлайн
Попробовал на виртуалке с чистой 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']
Офлайн