为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法通过字符串从模块导入*(全部)?

有没有办法通过字符串从模块导入*(全部)?

幕布斯6054654 2022-08-02 17:22:07
我正在尝试创建一个动态定义的设置对象,通常您会使用格式base_settings.py:MY_VAR = 1my_settings.py:from base_settings import *assert MY_VAR == 1但是在这种情况下,我想成为一个字符串,定义不同设置模块的路径。例如,我可能有其他的基本设置文件:base_settingsbase_settings1.py:MY_VAR = 1base_settings2.py:MY_VAR = 2my_settings.py:import osbase_settings = os.environment['SETTINGS_MODULE']  # This is "base_settings2" for the examplefrom magic(base_settings) import *assert MY_VAR == 2我知道你可以导入,但是这会将导入的代码返回到特定变量中,而不是“分解”到具有原始变量名称的导入文件中。importlib.import_module(path)
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以修改命名空间,尽管它实际上并不推荐:locals


mod_name = os.environment['SETTINGS_MODULE']

locals().update({

    k: v for k, v in importlib.import_module(mod_name).__dict__.items() 

    if not k.startswith('_')

})

这将向您添加设置模块中找到的本地(模块)变量。


但是,强烈建议将禁闭器保持在封闭的物体中。


查看完整回答
反对 回复 2022-08-02
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信