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

Многие фреймворки хранят свои файлы конфигурации на языке, отличном от остальной части программы. Например, 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, почему это имеет смысл. Просто кажется, что нужно отнять власть, не прибавляя никаких преимуществ.

Ответы [ 5 ]

12 голосов
/ 29 октября 2009

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

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

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

5 голосов
/ 29 октября 2009

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

5 голосов
/ 29 октября 2009

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

2 голосов
/ 29 октября 2009

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

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

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

  • удалите вложенный {}, чтобы он не преобразовывался непосредственно в выражение Python
  • использование safe_eval для удаления любого исполняемого элемента.
0 голосов
/ 29 октября 2009

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

...