Pyinstaller заморозка с зависимостями
Я пытаюсь заморозить два скрипта Python, используя PyInstaller, где оба скрипта, которые я пытаюсь заморозить, имеют зависимости.
Когда я замораживаю первый скрипт, все зависимости объединяются в исполняемый файл, и скрипт работает хорошо. Но когда я замораживаю второй скрипт, некоторые зависимости не вставляются в исполняемый файл. Это приводит к тому, что сценарий сообщает об ошибке при запуске.
Вот минимальный код для воспроизведения описанной проблемы
good.py:
import numpy
print('Hello numpy')
bad.py
import pygrib
print('Hello pygrib')
При выполнении pyinstaller good.py -F
и запустив получившийся исполняемый файл, он работает хорошо и выдает вывод "Hello numpy"
При выполнении pyinstaller bad.py -F
и запуск получившегося исполняемого файла приводит к следующей ошибке:
Traceback (most recent call last):
File "bad.py", line 1, in <module>
File "/tmp/pip-build-p0E3xU/pyinstaller/PyInstaller/loader/pyimod03_importers.py", line 687, in load_module
File "pygrib.pyx", line 206, in init pygrib (pygrib.c:34826)
ImportError: No module named numpy
[20420] Failed to execute script bad
Тем не менее, я заметил, что при явном импорте зависимостей pygrib внутри скрипта и последующем использовании PyInstaller полученный исполняемый файл работает хорошо.
bad_fixed.py:
import pygrib
import numpy
import pyproj
import ncepgrib2
print('Hello pygrib')
Поскольку это обходное решение моей проблемы, я хотел бы понять, почему это происходит, и как я могу решить эту проблему, не испортив код
Примечание: я использую Pygrib специально, потому что я хотел бы использовать его как часть проекта, и, возможно, проблема заключается в этом конкретном пакете. Эта проблема может быть воспроизведена с другими пакетами.