импорт / загрузка pyinstaller во время выполнения кода Python, например, config.py - PullRequest
0 голосов
/ 24 апреля 2018

У меня большой проект, который имеет большой файл config.py и превращен в исполняемый файл с помощью pyinstaller.Можно ли скомпилировать весь проект, но оставить / повторно загрузить / импортировать этот файл во время выполнения и как?

(я мог бы переместить часть содержимого в формат json и изменить логику файла, затем загрузите файл json, но не хотите ставить плюс, это большой файл, который у каждого уже есть своя копия ...)

небольшая часть того, что находится в 'config.py':1005 *

import getpass
username = getpass.getuser()
data_files_dir = '/tmp/data'
bindings = 'UC'
if username.lower()=='nick':
   data_files_dir = '/tmp/data'
   ....
....

Единственный релевантный вопрос, который я нашел, это этот , но кажется, что он требует чего-то гораздо более обширного, плюс ответ («Вы упускаете суть. Ваш сценарий предполагаетбыть конечным продуктом. ') определенно не подходит для моего случая ...

1 Ответ

0 голосов
/ 12 июня 2018

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.». Могут быть и другие методы.

...