Python import lib类似于“import*from XXX”

2024-04-19 23:36:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下配置文件结构:

app
  \config
     \development
        \__init__.py
        \settings.py
        \app_config.py
     \production
        \__init__.py
        \settings.py
        \app_config.py
     \testingpy
        \settings.py
        \app_config.py
     \settinngs.py
     \app_config.py

实际上,app.config.settings只需检查环境变量RUNTIME_ENV(可能是development|production|testing,相当于config的子文件夹之一)并加载相应的设置。在

我只知道用importlib导入,它作为局部变量返回给我的模块,我被迫写了这样的东西:

^{pr2}$

有没有方法可以做一些类似于python的表达式:from config.${RUNTIME_ENV}.settings import *?在


Tags: pyenvconfigappsettingsinit配置文件环境变量
1条回答
网友
1楼 · 发布于 2024-04-19 23:36:25

^{}的返回值是可变的。你可以这样做:

imported_foo = importlib.import_module('foo')
globals().update(vars(imported_foo))

请注意,这会将带下划线前缀的内容导入到全局命名空间中。如果你想排除这些,那就写一本字典,只包括你想要的东西。例如:

^{pr2}$

对于返回只读值的locals(),此不起作用。这样做是不合理的(import *到一个非全局命名空间中),因为Python必须在编译时知道所有局部变量的名称,才能在字节码中生成正确的LOAD_FOO指令(以及其他一些有趣的问题,如识别closure捕获的变量)。您将发现import *在函数或类中是非法的:

^{3}$

这不仅仅是“import *是糟糕的设计”的问题,这是一个基本的语言限制,不能用importlib来解决。在

相关问题 更多 >