У pyInstaller возникли проблемы с упаковкой пакета, содержащего модули SWIG - PullRequest
0 голосов
/ 27 декабря 2018

Я столкнулся с проблемой, заставляющей pyInstaller связать модуль, содержащий модули SWIG.Я следовал всем рекомендациям, перечисленным в документе pyInstaller, в которых подробно описана поддержка SWIG.Я получаю следующую ошибку при запуске exe:

# sphinxbase._ad_win32 not found in PYZ
Traceback (most recent call last):
  File "StartListening.py", line 10, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "c:\users\allen\appdata\local\programs\python\python36-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\sphinxbase\__init__.py", line 35, in <module>
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "c:\users\allen\appdata\local\programs\python\python36-32\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\sphinxbase\ad_win32.py", line 32, in <module>
  File "site-packages\sphinxbase\ad_win32.py", line 31, in swig_import_helper
  File "importlib\__init__.py", line 126, in import_module
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'sphinxbase._ad_win32'

Однако sphinxbase._ad_win32 действительно существует в виде файла pyd.Я использую Windows 10;почему у pyInstaller возникают проблемы с комплектацией этого модуля?Сторонним пакетом, который я в конечном итоге пытаюсь импортировать, является SpeechRecognition, который зависит от pocketsphinx, который зависит от sphinxbase, являющегося модулем, в котором возникают проблемы.

Вот ссылка на объект, возвращаемая

importlib.import_module('sphinxbase._ad_win32') 

в оболочке Python, сгенерированной SWIG, если это кому-то полезно:

<module 'sphinxbase._ad_win32' from 'C:\\Users\\bob\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\sphinxbase\\_ad_win32.pyd'>

Версия Python: 3.6.5

Редактировать: После дополнительных исследований я попытался добавить.Подойдите к списку «binaries» в файле .spec, а также добавьте sphinxbase._ad_win32 в список «hidden-import» и их комбинации, но это тоже не сработало.Двоичный файл находится там, в правильном месте, я не могу понять, почему пакетное приложение не может его найти.

...