Python:动态导入模块内容
我在我的项目里有很多
from myproject.settings import param1
from myproject.settings import ...
分散在各个地方。
在启动时,我想根据环境变量加载不同的“设置”模块(比如 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
我该怎么做才能实现这个呢?
4 个回答
0
你可以尝试将 myproject.settings
的绝对路径添加到 PYTHONPATH
中,方法如下:
PYTHONPATH=$PYTHONPATH:$HOME/myproject/settings/
export PYTHONPATH
你可以把这段代码放在 ~/.bashrc 文件里(假设你使用的是 UNIX 系统)。这样每次你打开一个新的终端时,这个路径就会自动添加到 PYTHONPATH 中。也就是说,Python 解释器在导入模块时会把这个路径加入到它查找模块的路径列表中。
现在,无论你在哪个路径下,只需输入 import settings
,因为 myproject/settings
存在,Python 就会加载这个设置文件。
希望这对你有帮助……
0
settings = __import__(os.environ['SETTINGS'])
但是这样做不行。
为什么呢?你的方法是对的。举个例子,Django也是这样做的。
1
试着使用一个假的 'fromlist' 参数。
mymodule = __import__(mod, fromlist=['a'])
在我遇到过的类似情况中,这个方法之前对我有效。