使用条件导入配置模块

时间:2014-09-18 07:44:44

标签: python

假设我有一个名为config.py的模块,其中包含与我连接的硬件有关的数据,我现在希望使用两个不同的硬件,hw1和hw2。 config.py可以访问一个标志,因此它知道我正在使用哪个硬件。我希望将特定的hw1配置数据放在自己的文件中,同样也放在hw2中。

所以我现在有这样的事情:

config.py
hw1_config.py
hw2_config.py

然后执行条件导入以将一个或另一个导入config.py

if hw = "hw1":
   from hw1_conifg import * 
elif hw = "hw2":
   from hw2_conifg import * 

这是一个好方法吗?

我是否可以在config.py的文件夹中创建名为hw1和hw2的文件夹,并将hw1_config.py移动到hw1文件夹中,将其重命名为config.py。同样适用于hw2_config.py。那么条件导入会如何?

config.py
/hw1/config.py
/hw2/config.py

我可能希望将来将config.py分解为例如startup_config.py和shutdown_config.py。同样,这些文件根据所涉及的hw而不同。在这种情况下,什么可能是一个好的文件/文件夹结构?

config/startup.py 
config/shutdown.py
config/hw1/startup.py 
config/hw1/shutdown.py
config/hw2/startup.py 
config/hw2/shutdown.py

1 个答案:

答案 0 :(得分:1)

我认为第一个解决方案看起来没问题

if hw = "hw1":
   from hw1_config import * 
elif hw = "hw2":
   from hw2_config import * 

如果您打算将配置文件移动到单独的文件夹,则可以在每个文件夹(__init__.pyhw1/__init__.py)中创建文件hw2/__init__.py,然后在原始文件夹中config.py文件,导入配置如下:

if hw = "hw1":
   from hw1.config import * 
elif hw = "hw2":
   from hw2.config import * 

至于第三种结构,我认为这一步有点为时过早 - 您可以glob每个目录中的文件名,然后逐个导入它们。