2016-07-30 2 views
0

Я получаю очень путать о том, как и где инициализирует конфигурацию приложения в 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, но с различными строки подключения возможно чтение из файла

+0

Это Django? Просто хочу убедиться, что –

+0

Нет, не используя Django, но я действительно копировал их подход с момента его изящества (https://github.com/django/django/blob/master/django/conf/__init__.py). Единственное, что мне не нравится, это использование переменных среды. – user783836

ответ