python中的集中式配置

python中的集中式配置,python,Python,目前,我的配置选项(常量/变量)有点零碎,大部分都在config.py中,但有些在myfile.py的顶部 /utilities/myfile.py /config.py 您可以在myfile.py中找到的示例如下: TEMP_DIR = '/tmp' 如果我想将这个定义从myfile.py移到config.py中,但仍然在myfile.py中使用它,我该怎么做 我是python新手,但我假设它与myfile.py顶部的内容类似 from config 在myfile.py中,您可以 im

目前,我的配置选项(常量/变量)有点零碎,大部分都在config.py中,但有些在myfile.py的顶部

/utilities/myfile.py
/config.py
您可以在myfile.py中找到的示例如下:

TEMP_DIR = '/tmp'
如果我想将这个定义从myfile.py移到config.py中,但仍然在myfile.py中使用它,我该怎么做

我是python新手,但我假设它与myfile.py顶部的内容类似

from config

myfile.py
中,您可以

import config
并使用

config.TEMP_DIR

如果包含
config.py
的目录在您的中。

变体1

from config import *
这将处理myfile.py中的整个名称空间

from config
变体2

from config import foo, bar, baz
必须提及myfile.py中使用的任何值

变体3

import config
...
x = config.foo
每个值都需要引用配置

您的选择,但我更喜欢变体3。要在myfile.py中查看config.py,您必须编辑PYTHONPATH或使用相对导入:

from ... import config

另一种方法是使用
execfile
。这将更容易使用不同的配置文件(例如,在命令行上指定要使用的配置文件)

例如:

# myconfig.py
TEMP_DIR = "/tmp/"

# myotherconfig.py
TEMP_DIR = "/tmp/foo"

# program.py (the main program)
import sys
config = {}
execfile(sys.argv[1], config)
print config["TEMP_DIR"]
调用程序:

$ python program.py myconfig.py
/tmp/
$ python program.py myotherconfig.py
/tmp/foo

相关:

4种可能的方法。。。还记得python的禅宗吗?“应该有一种——最好只有一种——显而易见的方法来做到这一点。”;)你是对的。我们都应该使用:-)我必须承认我是挪威人。我觉得这一点很重要,因为许多python用户没有向新的python用户提到这一点:如果使用代码
import config
,那么在调用模块中的对象时需要添加模块,类似于这样:
x=config.foo
如果使用config import*中的
,则不需要将模块放在对象前面:
x=foo
。我忘记了这是为什么,但如果您在使用python时记住这一点,将节省大量时间和混乱。