ConfigParser против конфигурации импорта

ConfigParser - широко обсуждаемый анализатор ванильной конфигурации для Python.
Однако вы можете просто import config где config.py имеет код Python, который устанавливает параметры конфигурации.

Каковы плюсы и минусы этих двух подходов конфигурации? Когда я должен выбрать каждый?

4 ответа

Решение

Самая большая проблема, которую я вижу с import config является то, что вы не знаете, что произойдет, когда вы импортируете его. Да, вы получите набор символов, на которые естественным образом ссылаются, используя . стиль интерфейса. Но код в файле конфигурации также может делать кто знает что. Теперь, если вы полностью доверяете своим пользователям, возможно, хорошо позволить им делать то, что они чувствуют в файле конфигурации. Однако если у вас неизвестные количества или вы хотите защитить пользователей от самих себя, то наличие файла конфигурации в более традиционном формате будет более безопасным и безопасным.

Это зависит от ваших потребностей и целей сценария. Один путь действительно не "лучше", просто другой. Для очень подробного обсуждения большинства парсеров конфигурации pythons (включая ConfigParser а также config модули), см.:

http://wiki.python.org/moin/ConfigParserShootout

"import config" очень прост, гибок и мощен, но, поскольку он может делать все что угодно, это может быть опасно, если config.py не находится в безопасном месте.

ИМО это сводится к вопросу личного стиля. Вы хотите, чтобы третьи лица редактировали ваш конфиг? Если так, возможно, имеет смысл иметь более "естественный" стиль конфигурации а-ля ConfigParser это не так технически, и это не может быть слишком далеко за головами вашей целевой аудитории.

Многие популярные проекты, такие как Fabric и Django, используют "родной" стиль конфигурации, который по сути является просто модулем Python. Фабри имеет fabfile.py и Джанго имеет settings.py,

В целом, вы будете иметь гораздо большую гибкость, используя собственный подход импорта модуля просто потому, что вы можете делать с этим все, что захотите, включая определение функций, классов и т. Д., Потому что это просто еще один модуль Python, который вы импортируете,

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