Импорт / загрузка pyinstaller во время выполнения кода Python, например, config.py
У меня есть большой проект, который имеет большой файл config.py и превращен в исполняемый файл с pyinstaller. Можно ли скомпилировать весь проект, но оставить / повторно загрузить / импортировать этот файл во время выполнения и как?
(Я мог бы переместить часть содержимого в формат json, изменить логику файла, затем загрузить файл json, но не хочу добавлять плюс, это большой файл, у которого уже есть свои копии...)
небольшая часть того, что находится в config.py:
import getpass
username = getpass.getuser()
data_files_dir = '/tmp/data'
bindings = 'UC'
if username.lower()=='nick':
data_files_dir = '/tmp/data'
....
....
Единственный релевантный вопрос, который я нашел, это этот, но, похоже, он требует чего-то гораздо более обширного, плюс ответ ("Вы упускаете суть. Ваш сценарий должен быть конечным продуктом".) Определенно не подходит для моего случая....
1 ответ
NTG;
Лучшее решение, которое я нашел для использования с PyInstaller - это модуль модуля Python 3.4 importlib SourceFileLoader для загрузки информации о конфигурации во время выполнения. Вот образец.
Файл:./conf.py
"""
Configuration options
"""
OPT1='1'
OPT2='Option #2'
OPT3='The Lumberjack is ok'
OPT4='White over White. Have a nice flight'
Далее приведен пример сценария, который будет импортировать информацию conf во время выполнения.
Файл: myapp.py
#!/usr/bin/python3
"""
The Application.
"""
import sys
from importlib.machinery import SourceFileLoader
# load your config file here
conf = SourceFileLoader( 'conf', './conf.py' ).load_module()
print("Option 1:", conf.OPT1)
print("Option 2:", conf.OPT2)
print("Option 3:", conf.OPT3)
print("Option 4:", conf.OPT4)
Обратите внимание, что параметры из conf.py импортируются в пространство имен "conf". Вам нужно будет префикс каждой ссылки на элемент conf с "conf.". Могут быть и другие методы.