从灵活定义的模块中导入所有变量
Importing all variables from a flexibly defined module
我有一个主 config.py
文件,然后是特定的客户端配置文件,例如client1_config.py
.
我想做的是将我的 client1_config.py
文件中的所有变量导入到我的 config.py
文件中。问题是我想根据环境变量在运行时灵活地执行此操作。它看起来像这样:
import os
import importlib
client = os.environ['CLIENT']
client_config = importlib.import_module(
'{client}_config'.format(
client=client))
from client_config import *
此代码段returns出现以下错误:ModuleNotFoundError: No module named 'client_config'
是否有可能(以及如何)实现我正在尝试做的事情,或者 Python 根本不支持这种导入?
对 import_module
的调用已经导入了客户端配置。 from client_config import *
假定 client_config
是您要导入的模块的名称,就像 import os
将导入模块 os
即使您创建变量 os
事先:
os = "sys"
import os # still imports the os module, not the sys module
下面,假设我们有一个 client1_config.py
,它只包含一个变量:
dummy = True
要将其元素添加到 config.py
的主命名空间以便您可以直接访问它们,您可以执行以下操作:
import importlib
client = "client1"
# Import the client's configuration
client_config = importlib.import_module(f"{client}_config")
print(client_config.dummy) # True
# Add all elements from client_config
# to the main namespace:
globals().update({v: getattr(client_config, v)
for v in client_config.__dict__
if not v.startswith("_")})
print(dummy) # True
但是,为了清楚起见,我建议以 config.client
访问客户端的配置,并避免客户端的配置文件覆盖主配置文件中的值。
我有一个主 config.py
文件,然后是特定的客户端配置文件,例如client1_config.py
.
我想做的是将我的 client1_config.py
文件中的所有变量导入到我的 config.py
文件中。问题是我想根据环境变量在运行时灵活地执行此操作。它看起来像这样:
import os
import importlib
client = os.environ['CLIENT']
client_config = importlib.import_module(
'{client}_config'.format(
client=client))
from client_config import *
此代码段returns出现以下错误:ModuleNotFoundError: No module named 'client_config'
是否有可能(以及如何)实现我正在尝试做的事情,或者 Python 根本不支持这种导入?
对 import_module
的调用已经导入了客户端配置。 from client_config import *
假定 client_config
是您要导入的模块的名称,就像 import os
将导入模块 os
即使您创建变量 os
事先:
os = "sys"
import os # still imports the os module, not the sys module
下面,假设我们有一个 client1_config.py
,它只包含一个变量:
dummy = True
要将其元素添加到 config.py
的主命名空间以便您可以直接访问它们,您可以执行以下操作:
import importlib
client = "client1"
# Import the client's configuration
client_config = importlib.import_module(f"{client}_config")
print(client_config.dummy) # True
# Add all elements from client_config
# to the main namespace:
globals().update({v: getattr(client_config, v)
for v in client_config.__dict__
if not v.startswith("_")})
print(dummy) # True
但是,为了清楚起见,我建议以 config.client
访问客户端的配置,并避免客户端的配置文件覆盖主配置文件中的值。