Анализ файлов конфигурации, среды и аргументов командной строки, чтобы получить единый набор параметров - PullRequest
102 голосов
/ 26 мая 2011

В стандартной библиотеке Python есть модули для разбора файла конфигурации ( configparser ), чтение переменных среды ( os.environ ) и синтаксический анализ аргументов командной строки ( argparse ). Я хочу написать программу, которая делает все это, а также:

  • Имеет каскад значений параметров :

    • значения параметров по умолчанию, переопределены на
    • параметры файла конфигурации, переопределены
    • переменные окружения, переопределены на
    • параметры командной строки.
  • Позволяет одно или несколько местоположений файла конфигурации, указанных в командной строке с помощью, например. --config-file foo.conf и читает это (либо вместо обычного файла конфигурации, либо в дополнение к нему). Это все еще должно соответствовать описанному выше каскаду.

  • Позволяет определениям параметров в одном месте определять поведение при разборе файлов конфигурации и командной строки.

  • Объединяет проанализированные параметры в единый набор значений параметров для доступа к остальной части программы, не обращая внимания на то, откуда они пришли.

Все, что мне нужно, по-видимому, находится в стандартной библиотеке Python, но они не работают гладко.

Как мне добиться этого с минимальным отклонением от стандартной библиотеки Python?

Ответы [ 11 ]

0 голосов
/ 26 сентября 2018

Библиотека confect , которую я построил, именно для того, чтобы удовлетворить большинство ваших потребностей.

  • Может загружать файл конфигурации несколько раз по заданным путям к файлам или по имени модуля.
  • Загружает конфигурации из переменных среды с заданным префиксом.
  • Он может прикреплять параметры командной строки к некоторым щелчкам командам

    (извините, это не argparse, но click лучше и намного более продвинутый. confect может поддерживать argparse в будущем выпуске).

  • Самое главное, confect загружает файлы конфигурации Python, а не JSON / YMAL / TOML / INI. Как и файл профиля IPython или файл настроек DJANGO, файл конфигурации Python является гибким и простым в обслуживании.

Для получения дополнительной информации, пожалуйста, проверьте файл README.rst в репозитории проекта . Имейте в виду, что он поддерживает только Python3.6.

Примеры

Присоединение параметров командной строки

import click
from proj_X.core import conf

@click.command()
@conf.click_options
def cli():
    click.echo(f'cache_expire = {conf.api.cache_expire}')

if __name__ == '__main__':
    cli()

Он автоматически создает всеобъемлющее справочное сообщение со всеми объявленными свойствами и значениями по умолчанию.

$ python -m proj_X.cli --help
Usage: cli.py [OPTIONS]

Options:
  --api-cache_expire INTEGER  [default: 86400]
  --api-cache_prefix TEXT     [default: proj_X_cache]
  --api-url_base_path TEXT    [default: api/v2/]
  --db-db_name TEXT           [default: proj_x]
  --db-username TEXT          [default: proj_x_admin]
  --db-password TEXT          [default: your_password]
  --db-host TEXT              [default: 127.0.0.1]
  --help                      Show this message and exit.

Загрузка переменных среды

Для загрузки переменных среды требуется только одна строка

conf.load_envvars('proj_X')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...