我有一个python包,需要从我的项目目录中提取设置,以下是我的项目当前的结构:
~/Project/bin/mypackage
- package files
~/Project/myproject/
- project files
- start.py
- settings.py
我想这与Django的结构类似,你的项目目录中有一个settings.py文件,它以某种方式被Python目录中的Django系统包引用。
所以,如果我像这样运行start.py:
python ~/Project/myproject/start.py
..和start.py导入并利用'mypackage'包,有没有什么方法可以从包中引用start.py本地的settings.py文件?我是否必须在start.py中加载设置文件并将值存储在全局?有谁知道这有可能吗?
答案 0 :(得分:2)
包含用于调用python解释器的脚本的目录将添加到PYTHONPATH
。它可以在sys.path[0]
获得。见http://docs.python.org/library/sys.html#sys.path
这意味着只需settings
mypackage.mymodule
就可以import settings
提供{{1}}。
但是,我会考虑在start.py中处理设置的加载并构建你的应用程序,以便将设置对象(可能只是一个字典)传递给它。
答案 1 :(得分:2)
我看到它的方式有几种选择:
查找设置并从当前工作目录或根据环境变量确定它们。这是使用DJANGO_SETTINGS_MODULE和PYTHONPATH的“django方式”。这很好,很神奇,当它工作时很不方便,当你从另一个目录运行时不是这样。
依赖于模块搜索路径,该路径将包含调用包的目录。既简单又简单,但设置会因来电者而异。例如,我在mypackage中所需要的只是:
导入设置
将设置作为变量传递