Почему так много приложений / фреймворков хранят свои файлы конфигурации в неисполненном формате?

Многие фреймворки хранят свои файлы конфигурации на языке, отличном от языка остальной программы. Например, Appengine сохраняет конфигурацию в формате yaml. для сравнения, DJango settings.py - это модуль Python. Я вижу в этом много недостатков.

Если он на том же языке, что и остальная часть программы, я могу

Занимайтесь интересными вещами в конфигурационном файле.

 MEDIA_DIR = os.path.join(os.path.dir(__file__), 'media')
 #Or whaever the correct cals are, you get the idea.
  • Не нужно изучать новый (правда, легкий) формат
  • Мои инструменты работают с ним так, как ожидалось.
  • Я могу просто сделать import conf и т. Д.

Я вижу преимущества, если бы это был тяжелый язык, такой как C / C ++ и т. Д., Но для python почему это имеет смысл. Это похоже на то, что отняли власть без добавления каких-либо преимуществ.


person agiliq    schedule 29.10.2009    source источник


Ответы (5)


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

Это вопрос вкуса и философии.

Тем не менее, я предпочитаю метод Джанго.

person Paul McMillan    schedule 29.10.2009
comment
Хорошо сформулировано It's a matter of taste and philosophy. +1 - person o.k.w; 29.10.2009
comment
Менее мощный синтаксис конфигурации может быть функцией, так как становится легче понять конфигурацию новой / незнакомой системы. Если конфигурация может делать все, то читать ее (как человек) может стать труднее. - person Joachim Sauer; 29.10.2009
comment
Пустой файл настроек django - это не более чем key = value вещь. Так что мощность не обязательна. Зачем забирать без пользы. - person agiliq; 29.10.2009
comment
Поскольку это может и не остаться так, иногда сопротивляться искушению бывает слишком сложно. - person Matthieu M.; 29.10.2009
comment
Матье: Но это не путь питона. Мы все здесь взрослые по согласию. - person agiliq; 30.10.2009

Python не всегда может быть единственным языком, на котором работает appengine. Таким образом, один и тот же файл конфигурации yaml может управлять приложением appengine, написанным, например, на java или perl.

person HS.    schedule 29.10.2009
comment
app.yaml - это только Python. Я считаю, что в Java есть app.xml. - person agiliq; 29.10.2009
comment
интересный. Это не меняет фундаментального момента - нет причин, по которым java не может использовать файл конфигурации yaml, поскольку в нем нет логики программирования. - person Paul McMillan; 30.10.2009

Иногда вам нужно использовать автоматический инструмент / инструмент с графическим интерфейсом для анализа и / или генерации и / или изменения файла конфигурации. Это непросто, если ваша конфигурация представляет собой скрипт на Python.

person Stefano Borini    schedule 29.10.2009

На то есть очень веская причина: если ваша программа распространяется в небезопасной среде, такой как пользовательский компьютер, выполнение текстового файла, который так легко изменить, открывает двери для многих вирусов. В меньшей степени это относится к приложению django, где приложение размещено на сервере - безопасная среда. Но с приложением, распространяемым в Windows с использованием py2exe, вы должны воздерживаться от выполнения вашей программы случайных вещей.

Другая причина использования синтаксиса, такого как YAML, заключается в том, что вы можете манипулировать файлом с помощью других инструментов, даже на других языках, формат переносим и достаточно документирован.

Тем не менее, когда мне нужен файл конфигурации с программой на Python, я использую словарь Python с несколькими мерами безопасности:

  • удалите закрывающий {}, чтобы он не оценивал непосредственно выражение Python
  • использование safe_eval для удаления любого исполняемого элемента.
person Philippe F    schedule 29.10.2009

Вероятно, им просто не приходило в голову, что они могут это сделать. Многие программисты из старых времен, когда языки сценариев были медленными и на самом деле не более простыми, чем языки программирования (просто посмотрите на такие вещи, как оболочки Unix). Когда появились изящные динамические языки, они просто придерживались «только текстовых конфигурационных файлов», потому что так поступали всегда.

person Aaron Digulla    schedule 29.10.2009