ConfigParser против конфигурации импорта - PullRequest
29 голосов
/ 09 ноября 2011

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

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

Ответы [ 4 ]

21 голосов
/ 09 ноября 2011

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

7 голосов
/ 09 ноября 2011

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

Python Wiki - ConfigParserShootout

6 голосов
/ 09 ноября 2011

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

3 голосов
/ 09 ноября 2011

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

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

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

...