ConfigParser против конфигурации импорта
ConfigParser - широко обсуждаемый анализатор ванильной конфигурации для Python.
Однако вы можете просто import config
где config.py
имеет код Python, который устанавливает параметры конфигурации.
Каковы плюсы и минусы этих двух подходов конфигурации? Когда я должен выбрать каждый?
4 ответа
Самая большая проблема, которую я вижу с import config
является то, что вы не знаете, что произойдет, когда вы импортируете его. Да, вы получите набор символов, на которые естественным образом ссылаются, используя .
стиль интерфейса. Но код в файле конфигурации также может делать кто знает что. Теперь, если вы полностью доверяете своим пользователям, возможно, хорошо позволить им делать то, что они чувствуют в файле конфигурации. Однако если у вас неизвестные количества или вы хотите защитить пользователей от самих себя, то наличие файла конфигурации в более традиционном формате будет более безопасным и безопасным.
Это зависит от ваших потребностей и целей сценария. Один путь действительно не "лучше", просто другой. Для очень подробного обсуждения большинства парсеров конфигурации pythons (включая ConfigParser
а также config
модули), см.:
"import config" очень прост, гибок и мощен, но, поскольку он может делать все что угодно, это может быть опасно, если config.py не находится в безопасном месте.
ИМО это сводится к вопросу личного стиля. Вы хотите, чтобы третьи лица редактировали ваш конфиг? Если так, возможно, имеет смысл иметь более "естественный" стиль конфигурации а-ля ConfigParser
это не так технически, и это не может быть слишком далеко за головами вашей целевой аудитории.
Многие популярные проекты, такие как Fabric и Django, используют "родной" стиль конфигурации, который по сути является просто модулем Python. Фабри имеет fabfile.py
и Джанго имеет settings.py
,
В целом, вы будете иметь гораздо большую гибкость, используя собственный подход импорта модуля просто потому, что вы можете делать с этим все, что захотите, включая определение функций, классов и т. Д., Потому что это просто еще один модуль Python, который вы импортируете,