动态导入模块

时间:2016-12-02 10:37:16

标签: python import loader

客户希望脚本(此处为main.py)具有可配置的合作伙伴模块, 所以将来他可以根据需要添加一个新的partner_x.py几个自定义更改,并在没有开发人员帮助的情况下将其推送到生产中。 因此我们用这个目录结构编写了一个脚本:

项目目录结构:

├── partners
│   ├── __init__.py
│   ├── partner_1.py
│   ├── partner_2.py
│   ├── ...
│   └── partner_n.py
├── main.py

问题陈述: 他运行一个cron脚本来识别来自合作伙伴的电子邮件以获取合作伙伴名称并使用Cronjob运行我们的脚本。

partner_cron.py
    #Downloads Gmail Attachment and decide partner
    partner = decide_partner_from_gmail()
    python ~/project/main.py partner

但是在我们的主要脚本(即main.py)中,我们导入了所有合作伙伴模块,即使它一次处理一个合作伙伴的数据。

我正在尝试优化以下main.py行:

if sys.argv[1] == "partner_1"
   from partners import partner_1 as partner

if sys.argv[1] == "partner_2"
   from partners import partner_2 as partner
.
.
.
if sys.argv[1] == "partner_n"
   from partners import partner_n as partner

将来,客户可能至少有20到30 partners,因此编写20-30 if-else来导入特定合作伙伴不是一个好方法。

我认为应该有一些好的方法来动态导入模块而不是逐个导入模块。

  1. 我们是否可以使用任何类型的Configuration files in Python OR
  2. 仅导入一个合作伙伴模块
  3. 有没有其他方法可以动态导入这些模块?
  4. 或者还有其他方法可以做得更好吗?
  5. 我正在寻找这种导入声明:

    from partners import  module( sys.argv[1] )
    

0 个答案:

没有答案