Я столкнулся с проблемой, заставляющей 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» и их комбинации, но это тоже не сработало.Двоичный файл находится там, в правильном месте, я не могу понять, почему пакетное приложение не может его найти.