我有以下配置文件结构:
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
导入,它作为局部变量返回给我的模块,我被迫写了这样的东西:
有没有方法可以做一些类似于python的表达式:from config.${RUNTIME_ENV}.settings import *
?在
^{} 的返回值是可变的。你可以这样做:
请注意,这会将带下划线前缀的内容导入到全局命名空间中。如果你想排除这些,那就写一本字典,只包括你想要的东西。例如:
^{pr2}$对于返回只读值的
^{3}$locals()
,此不起作用。这样做是不合理的(import *
到一个非全局命名空间中),因为Python必须在编译时知道所有局部变量的名称,才能在字节码中生成正确的LOAD_FOO
指令(以及其他一些有趣的问题,如识别closure捕获的变量)。您将发现import *
在函数或类中是非法的:这不仅仅是“
import *
是糟糕的设计”的问题,这是一个基本的语言限制,不能用importlib
来解决。在相关问题 更多 >
编程相关推荐