Как решить, что мой Python exe не работает на другом компьютере из-за клиентской библиотеки Firebird - PullRequest
0 голосов
/ 17 апреля 2019

Я создал Python exe с PyInstaller .

Мой exe-файл хорошо работает на компьютере-источнике.

Когда я попытался запустить его на другом компьютере, я получил эту проблему:

C:\Users\maell\Desktop\CreateSQL app V1\app>app.exe
Traceback (most recent call last):
  File "app.py", line 68, in <module>
  File "app.py", line 44, in show_DataBase_results
  File "usefull_fonctions_fdb.py", line 5, in open_database
  File "site-packages\fdb\fbcore.py", line 784, in connect
  File "site-packages\fdb\fbcore.py", line 220, in load_api
  File "site-packages\fdb\ibase.py", line 1385, in __init__
Exception: The location of Firebird Client Library could not be determined.
[9340] Failed to execute script app

Проблема явно в клиентской библиотеке Firebird 1011 *. Я пытаюсь понять, почему у меня есть эта проблема и как ее решить.

  • Сначала я подумал, что, возможно, это потому, что библиотека fdb импортируется в «подфайл», поэтому это скрытый импорт, а PyInstaller его не видит. Я импортировал fdb в основной файл приложения, но проблема осталась прежней.
  • Я также заглянул в свою переменную окружения, думая, что, возможно, мой другой компьютер пропустил один из них о fdb, но я не увидел ни одной переменной окружения, связанной с fdb, на моем «исходном» компьютере.

У вас есть идеи, почему у меня есть эта проблема? Это файл, который мне нужно поместить в каталог exe? Или что-то я должен сказать PyInstaller?

РЕДАКТИРОВАТЬ: При добавлении fbclient.dll в каталог моего exe ошибка изменилась:

(base) C:\Users\maell\Desktop\app>app.exe
Traceback (most recent call last):
  File "app.py", line 67, in <module>
  File "app.py", line 43, in show_DataBase_results
  File "usefull_fonctions_fdb.py", line 5, in open_database
  File "site-packages\fdb\fbcore.py", line 848, in connect
fdb.fbcore.DatabaseError: ('Error while connecting to database:\n- SQLCODE: -904\n- unavailable database', -904, 335544375)
[11120] Failed to execute script app

Я проверил, база данных находится в хорошем каталоге (она работает на компьютере-источнике).

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Хотя FDB является драйвером Python для подключения к Firebird, ему также требуется собственная клиентская библиотека Firebird (fbclient.dll в Windows, libfbclient.so в Linux). Я не знаю PyInstaller, но я предполагаю, что он только упаковывает код Python или требует собственных зависимостей в определенном месте.

Ошибка указывает, что у вас не установлена ​​клиентская библиотека Firebird в вашей системе или если она установлена, она не имеет такой же битности, как ваш исполняемый файл Python. Если Python 32-битный, вам нужна 32-битная клиентская библиотека Firebird, если 64-битная, то 64-битная.

Вам потребуется установить клиентскую библиотеку Firebird (например, с помощью установщика Firebird и использовать минимальную установку клиента) или узнать, как вы можете явно включить зависимость с помощью PyInstaller. В качестве альтернативы, вы можете использовать чистый драйвер Python Firebird pyfirebirdsql , который не нуждается в нативной зависимости.

1 голос
/ 17 апреля 2019

В целом, клиентская библиотека Firebird является частью Firebird Server, а не Python (хотя я не знаю, что конкретно называется Python FCL, но надеюсь, что она не отклоняется от стандартных условий), и должна называться "fbclient.dll"", в качестве альтернативы может идти как" fbembed.dll "или" gds32.dll ".Однако дело в том, что эта DLL динамически загружается при попытке установить соединение с сервером базы данных.

Файл "app.py", строка 44, в show_DataBase_results
Файл "usefull_fonctions_fdb.py ", строка 5, в open_database

Ваш журнал показывает, что ваш app.exe действительно пытался подключиться к серверу Firebird, чтобы прочитать некоторые" результаты "из некоторой" базы данных ".Для этого требуется Firebird Server.Это пропущено - и чтение базы данных не удается.

Теперь, почему ваша установка - не установленное приложение, а простая установка - нуждается в чтении баз данных, что выглядит странно для меня, но я не знаю.Найдите его и исправьте, чтобы сам установщик не пытался попросить Firebird Server прочитать из баз данных Firebird, тогда ошибка исчезнет.

PS также смотрите эти обсуждения:

PPS также, лайфхак:

У вас есть идеи?Это файл?Или что-то?

Когда вы задаете себе подобные вопросы - попробуйте с помощью SysInternals Process Monitor проверить, какой конкретный файл (если это был файл) и в каких конкретных папках ищет ваш app.exe, прежде чем выбросить этот файл.ошибка.Или, может быть, он ищет данные реестра, а не файлы и т. Д. Журналы реестра также накапливаются ProcMon.

...