python-3.x - 从灵活定义的模块中导入所有变量
问题描述
我有一个主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 根本不支持这种导入?
解决方案
调用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
并避免客户端的配置文件覆盖主配置文件中的值。
推荐阅读
- laravel - 在控制器中保存图像以及如何将其调整为 150,150
- php - 如何使用 PHP 将 HTML 元素附加到 DOM 节点?
- java - 将侦听器应用于 System.err?
- python - Python-检查用户是否输入了列表中的单词之一
- java - 如何通过设备锁定屏幕冷启动 React Native 应用程序?
- javascript - 有什么方法可以获取点击值的 id 并使用 Jquery 将其发送到另一个页面?
- android - 使用自定义视图作为 RecyclerView 中的项目 - 约束布局无法处理具有匹配约束宽度的子项
- scala - 如何在 Azure 的 Kubernetes 中进行 Scala 堆转储
- oauth-2.0 - 如何使用 jhipster registry swagger API 测试由 ouath2 保护的微服务
- thymeleaf - SpringBoot Thymeleaf 安全授权