Python:动态导入模块内容
我有很多Python:动态导入模块内容,python,import,Python,Import,我有很多 from myproject.settings import param1 from myproject.settings import ... 分散在我的项目中 启动时,我想根据env var加载不同的“设置”模块(例如export settings=myproject.settings2) 我试着把myproject.\uuuu init\uuuu.py 差不多 module_name = os.environ['SETTINGS'] m=__import__(module_n
from myproject.settings import param1
from myproject.settings import ...
分散在我的项目中
启动时,我想根据env var加载不同的“设置”模块(例如export settings=myproject.settings2)
我试着把myproject.\uuuu init\uuuu.py
差不多
module_name = os.environ['SETTINGS']
m=__import__(module_name)
settings = m
但这行不通
from myproject.settings import *
ImportError: No module named settings
如何做到这一点
settings = __import__(os.environ['SETTINGS'])
但这行不通
from myproject.settings import *
ImportError: No module named settings
为什么??你的方法是正确的。例如,Django也是这样做的。您可以尝试将
myproject.settings
的绝对路径添加到PYTHONPATH
中,如下所示:
PYTHONPATH=$PYTHONPATH:$HOME/myproject/settings/
导出PYTHONPATH
现在您可以将其保存在~/.bashrc中(假设为UNIX环境)。这样,每当您打开一个新终端时,该路径就会添加到PYTHONPATH。i、 python解释器会将这个路径添加到导入模块时要查找的路径中
现在,只要输入importsettings
,无论您选择哪个路径,python都会加载设置文件,因为myproject/settings
存在
希望这有助于…尝试使用伪“fromlist”参数
mymodule=\uuuu导入(mod,fromlist=['a'])
在类似你的情况下,这对我来说很有效 我尝试了下面的代码,它成功了 以下是我的文件夹结构:
src/
app.py
settings/
__init__.py
production.py
sandbox.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,则导入沙箱模块。如果是设置,则动态导入模块
希望这有帮助我不知道我从myproject.settings导入*和get ImportError:没有名为settings的模块\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu<代码>设置。一些设置=True谢谢。这个答案救了我:)