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谢谢。这个答案救了我:)