我有很多
from myproject.settings import param1
from myproject.settings import ...
遍布我的项目。
启动时,我想根据env var加载不同的“设置”模块(例如export SETTINGS=myproject.settings2)
我试图加入myproject.__init__.py
喜欢
module_name = os.environ['SETTINGS']
m=__import__(module_name)
settings = m
但它不起作用。
from myproject.settings import *
ImportError: No module named settings
如何实现这一目标?
答案 0 :(得分:1)
尝试使用伪造'fromlist'参数。
mymodule = __import__(mod, fromlist=['a'])
之前在类似你的情况下,它对我有用。
答案 1 :(得分:0)
settings = __import__(os.environ['SETTINGS'])
但它不起作用。
为什么呢?你的方法是正确的。例如,Django以同样的方式做到这一点。
答案 2 :(得分:0)
您可以尝试将myproject.settings
的绝对路径添加到PYTHONPATH
,如下所示:
PYTHONPATH=$PYTHONPATH:$HOME/myproject/settings/
export PYTHONPATH
现在你可以将它保存在〜/ .bashrc中(假设UNIX env)。这样,无论何时打开新终端,此路径都会添加到PYTHONPATH。即python解释器会将此路径添加到它中,就像导入模块时要查找的路径一样。
现在无论您输入的是哪个路径,只需输入import settings
&由于myproject/settings
存在,python将加载设置文件。
希望这会有所帮助......
答案 3 :(得分:0)
我尝试了下面的代码,并且有效。
这是我的文件夹结构:
src/
app.py
settings/
__init__.py
production.py
sandbox.py
在settings.__init__.py
中,我写道:
import os
settings_module = os.environ.get('APP_SETTINGS')
if not settings_module:
from .sandbox import *
else:
exec('from {} import *'.format(settings_module))
如果未设置var env,则导入沙箱模块。如果已设置,则动态导入模块。
希望这会有所帮助