为什么这么多应用程序/框架将其配置文件保持为未执行的格式?

时间:2009-10-29 09:01:20

标签: python configuration settings yaml

许多框架将其配置文件保留为与程序其余部分不同的语言。例如,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 个答案:

答案 0 :(得分:12)

一些框架设计人员认为配置文件不适合重逻辑。正如MVC框架阻止您将逻辑放在它不属于的地方一样,配置文件也会阻止您将编程放在不属于它的位置。

这是品味和哲学的问题。

那就是说,我更喜欢Django的方法。

答案 1 :(得分:5)

Python可能并不总是唯一可以运行appengine的语言。 因此,相同的yaml配置文件可以驱动用例如java或perl

编写的appengine应用程序

答案 2 :(得分:5)

有时您需要使用自动/ GUI工具来解析和/或生成和/或修改配置文件。如果你的conffile是一个python脚本,这并不容易。

答案 3 :(得分:2)

有一个很好的理由:如果你的程序是在一个不安全的环境中分发的,比如用户计算机,那么执行一个容易修改的文本文件就会对许多病毒开放。对于应用程序托管在服务器上的django应用程序而言,情况就不那么好了 - 这是一个安全的环境。但是使用py2exe在Windows上分发应用程序时,你应该避免让你的程序执行随机的东西。

使用像YAML这样的语法的另一个原因是你可以使用其他工具操作文件,甚至是其他语言,这种格式是可移植的并且有足够的文档记录。

那就是说,当我需要一个带有python程序的配置文件时,我使用了一个带有一些安全措施的python dictionnary:

  • 删除封闭的{},使其不直接eval到python表达式
  • 使用safe_eval丢弃任何可执行项目。

答案 4 :(得分:-1)

他们可能没有想到他们可以做到这一点。许多程序员来自过去,脚本语言很慢,并且不像编程语言那么简单(只需看看Unix shell之类的东西)。当漂亮的动态语言出现时,他们只是坚持“仅文本配置文件”,因为这是他们一直以来所做的。