Импорт / загрузка 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.". Могут быть и другие методы.

Другие вопросы по тегам