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