Как правильно создать крюк pyinstaller или, возможно, скрытый импорт?

У меня есть два пакета (скажем, dataread и datainspector), которые каким-то образом не были обнаружены PyInstaller. Из-за этого приложение завершает работу, когда запущенное приложение достигает точки, где ему необходимо импортировать модули из этих пакетов.

Самым простым решением было бы скопировать dataread и datainspector в упакованное приложение. Но это сломает намерение упаковки двоичной версии приложения.

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

Какие-либо предложения? PS: оба этих пакета могут содержать вложенные каталоги.

Ответ 1

Крючки - это файлы, которые указывают дополнительные действия, когда pyinstaller находит инструкцию import. Поэтому, если вы добавите файл "hook-data.py" с hiddenimports = ['_proxy', 'utils', 'defs'] внутри, если pyinstaller найдет import data, он проверит дополнительные команды внутри файла hook-data.py. Вы должны указать путь к перехватам с помощью --additional-hooks-dir (лучше сохранить чистое рабочее пространство, чем смешивать только файлы с компиляцией с исходным кодом)

http://pythonhosted.org/PyInstaller/hooks.html

Более простым решением является использование --hidden-import=modulename вместе с pyinstaller script. Он будет добавлять модуль в качестве оператора импорта молча.

Крюки лучше, если вы хотите указать, какой файл нуждается в каком-либо модуле. "-hidden-import" проще, чем одноразовый или для отладки.