使用.py文件配置文件

时间:2016-12-02 11:00:52

标签: python parsing configuration-files ini

我被告知这样做是不是很好的做法:

configfile.py

SOUNDENABLED = 1
FILEPATH = 'D:\\TEMP\\hello.txt'

main.py

import configfile

if configfile.SOUNDENABLED == 1:
    ....

f = open(configfile.FILEPATH, 'a')
...

许多人使用INI文件进行ConfigParser模块或iniparse或其他类似模块的本地配置,这证实了这一点。

问题:

为什么使用INI文件进行本地配置+ INI解析器Python模块要比仅包含正确配置值作为常量的configfile.py文件更好?

4 个答案:

答案 0 :(得分:2)

这里唯一的问题是.py可以有任意Python代码,所以它有可能以任意方式破坏你的程序。

如果您可以信任您的用户负责任地使用它,那么此设置没有任何问题。事实上,at one of my previous occupations, we were doing just that, without any problems that I'm aware of.恰恰相反:它允许用户通过自动生成重复部分和导入其他配置文件来消除重复。

另一个问题是如果你有很多文件,配置文件最好与常规代码文件分开,这样用户就知道他们应该编辑哪些文件(上面的链接也解决了这个问题)。

答案 1 :(得分:1)

这是一种完全可以接受的做法。使用此方法的众所周知项目的一些示例是Djangogunicorn

答案 2 :(得分:1)

导入模块会执行它包含的任何代码。没有什么限制您的configfile.py仅包含定义。在线下,这是一个安全问题和模糊错误的方法。此外,您还可以使用Python的模块搜索路径来查找配置文件。如果要将配置文件放在其他位置,或者存在名称冲突,该怎么办?

答案 3 :(得分:1)

出于某些原因可能会更好

  1. 配置文件唯一可以包含的扩展名是py
  2. 除非您将__init__.py放入此目录,否则无法使用独立目录中的配置分发程序
  3. 讨厌的程序用户可以在配置中放入任何python脚本并做坏事。
  4. 例如,YouCompleteMe自动完成引擎在python模块.ycm_extra_conf.py中存储配置。默认情况下,每次导入配置时,它都会询问您是否确定该文件可以安全执行。

    1. 如何在不重新启动应用的情况下更改配置?
    2. 通常,允许执行来自外部某处的代码是一个漏洞,可能会导致非常严重的后果。

      但是,如果您不关心这些,例如,您正在开发仅在您的服务器上执行的Web应用程序,那么将配置放入python模块是可以接受的做法。 Django这样做了。