Python - 包和设置文件
我有一个Python包,需要从我的项目目录中获取设置,这里是我项目的当前结构:
~/Project/bin/mypackage
- package files
~/Project/myproject/
- project files
- start.py
- settings.py
我想这和Django的结构有点像,你的项目目录里有一个settings.py
文件,这个文件在某种程度上被Django系统包引用。
所以,如果我像这样运行start.py
:
python ~/Project/myproject/start.py
..而且start.py
导入并使用了mypackage
这个包,有没有办法让我在包里面引用start.py
本地的settings.py
文件呢?我是不是需要在start.py
中加载设置文件,然后把值存储在一个全局变量里?有没有人知道这样做是否可行?
2 个回答
3
我认为你有几种选择:
查找设置并从当前工作目录或环境变量中导入它们。这就是所谓的“django方式”,使用
DJANGO_SETTINGS_MODULE
和PYTHONPATH
。当它正常工作时,这种方法很方便,但如果不行,比如你在不同的目录下运行时,就会很麻烦。依赖模块搜索路径,这样会包含调用包的目录。这种方法简单明了,但设置会根据调用者的不同而变化。例如,在
mypackage
中,你只需要:import settings
将
settings
作为一个变量传入
2
用来启动Python解释器的脚本所在的文件夹会被加入到PYTHONPATH
中。这个路径可以通过sys.path[0]
来查看。想了解更多,可以参考这个链接:http://docs.python.org/library/sys.html#sys.path
这意味着你可以通过import settings
直接从mypackage.mymodule
中使用settings
。
不过,我建议你在start.py中处理设置的加载,并且把你的应用结构设计得更好,这样可以把一个设置对象(可能只是一个字典)传递给它。