我被告知这样做是不是很好的做法:
SOUNDENABLED = 1
FILEPATH = 'D:\\TEMP\\hello.txt'
import configfile
if configfile.SOUNDENABLED == 1:
....
f = open(configfile.FILEPATH, 'a')
...
许多人使用INI文件进行ConfigParser模块或iniparse或其他类似模块的本地配置,这证实了这一点。
为什么使用INI文件进行本地配置+ INI解析器Python模块要比仅包含正确配置值作为常量的configfile.py
文件更好?
答案 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)
答案 2 :(得分:1)
导入模块会执行它包含的任何代码。没有什么限制您的configfile.py
仅包含定义。在线下,这是一个安全问题和模糊错误的方法。此外,您还可以使用Python的模块搜索路径来查找配置文件。如果要将配置文件放在其他位置,或者存在名称冲突,该怎么办?
答案 3 :(得分:1)
出于某些原因可能会更好
py
。__init__.py
放入此目录,否则无法使用独立目录中的配置分发程序例如,YouCompleteMe自动完成引擎在python模块.ycm_extra_conf.py
中存储配置。默认情况下,每次导入配置时,它都会询问您是否确定该文件可以安全执行。
通常,允许执行来自外部某处的代码是一个漏洞,可能会导致非常严重的后果。
但是,如果您不关心这些,例如,您正在开发仅在您的服务器上执行的Web应用程序,那么将配置放入python模块是可以接受的做法。 Django这样做了。