Я получаю очень путать о том, как и где инициализирует конфигурацию приложения в Python 3.Как и когда инициализировать конфигурацию в Python?
Я имею конфигурацию, состоящую из приложения конкретной конфигурации (строки подключения к БД, URL конечных точек и т.д.) и настройки журналирования.
Прежде чем мое приложение выполнит свою предназначенную функцию, я хочу инициализировать конфигурацию приложения и регистрации.
После нескольких разных попыток, в конечном итоге, я получил код, приведенный ниже в моем основном модуле ввода. Он имеет приятный эффект от того, что весь импорт сгруппирован в верхней части файла (https://www.python.org/dev/peps/pep-0008/#imports), но он не чувствует себя хорошо, поскольку модули конфигурации импортируются только для побочных эффектов, что довольно неинтуитивно.
import config.app_config # sets up the app config
import config.logging_config # sets up the logging config
...
if __name__ == "__main__":
...
config.app_config
выглядит примерно следующим образом:
_config = {
'DB_URL': None
}
_config['DB_URL'] = _get_db_url()
def db_url():
return _config['DB_URL']
def _get_db_url():
#somehow get the db url
и config.logging_config
выглядит следующим образом:
if not os.path.isdir('.\logs'):
os.makedirs('.\logs')
if os.path.exists('logging_config.json'):
with open(path, 'rt') as f:
config = json.load(f)
logging.config.dictConfig(config)
else:
logging.basicConfig(level=log_level)
Что является общим способом настроить конфигурацию приложения в Python? Принимая во внимание, что у меня будет несколько приложений каждый из которых использует модуль config.app_config
и config.logging_config
, но с различными строки подключения возможно чтение из файла
Это Django? Просто хочу убедиться, что –
Нет, не используя Django, но я действительно копировал их подход с момента его изящества (https://github.com/django/django/blob/master/django/conf/__init__.py). Единственное, что мне не нравится, это использование переменных среды. – user783836