Динамический импорт самостоятельно сгенерированных файлов Python в Python-сгенерированном .exe - PullRequest
0 голосов
/ 29 ноября 2018

Pyinstaller 3.4 Python 3.7 (Windows 7)

У меня есть сценарий использования, в котором мой основной скрипт Python foo.py генерирует файл traylist.py, из которого я хочу импортировать материал.foo.py иногда приходится обновлять этот traylist.py файл.Поэтому необходимо, чтобы foo.py снова мог импортировать этот traylist.py в функцию.Я выполняю это с помощью функции модуля перезагрузки, например:

import traylist importlib.reload(traylist) menu_def = traylist.menu_def

Я также пробовал следующий код с теми же результатами (работает в интерпретаторе, но не работает при запуске как .exe)

import traylist del sys.modules['traylist'] import traylist menu_def = traylist.menu_def

Все это работает при работе foo.py в обычном интерпретаторе (python foo.py).Однако когда я создаю --onefile .exe с помощью pyinstaller, значения в модуле traylist никогда не обновляются.Я проверил пути с помощью sys._MEIPASS и вижу новый файл, созданный в папке MEIxxx.Я просто не могу получить .exe для правильной перезагрузки этого модуля.

1 Ответ

0 голосов
/ 30 ноября 2018

Оказывается, что, хотя pyinstaller позволяет вам связывать другие типы файлов и обращаться к ним по пути sys._MEIPASS, это не относится к операторам import module.У него есть отдельный способ обработки файлов такого типа, и его нелегко изменить, что приводит к перезагрузке устаревших копий того же самого исходного модуля.

Решением было загрузить модуль, указав полный путь к нему.Это разные методы для достижения этой цели, но тот, который работал для меня, был одним из ответов в этом .Сначала я должен был сделать pip install import_file, затем: from import_file import import_file traylist = import_file(traylist_path)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...