我有一个主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 *
此代码段返回以下错误:ModuleNotFoundError: No module named 'client_config'
是否有可能(以及如何)实现我想做的事情,或者Python根本不支持这种导入?
答案 0 :(得分:1)
对import_module
的调用已经导入了客户端配置。 from client_config import *
假定client_config
是您要导入的模块的名称,就像import os
将导入模块os
一样,即使您创建了变量{{1} }预先:
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
的身份访问客户端的配置,并避免客户端的配置文件覆盖主配置文件中的值。