當在寫代碼時,我們希望能夠根據傳入的選項設置,如args.model來確定要導入使用的是哪個model.py文件,而不是一股腦地導入
這種時候就需要用上python的動態導入模塊
比如此時文件結構為:
├── models
│ ├── __init__.py
│ ├── cycle_gan_model.py
│ └── pix2pix_model.py
└── train.py
假設此時參數的設置中有:
import argparse parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--model', type=str, default='cycle_gan', help='chooses which model to use. [cycle_gan | pix2pix | test | colorization]') args = parser.parse_args()
此時如果想要根據傳入的參數args.model的值決定導入哪個模塊,則:
import importlib model_filename = "models." + args.model + "_model" # 根據指定的args.model來導入本地models文件夾中的相應args.model + '_model.py'模塊 # 假設如果args.model = cycle_gan,則導入模塊models.cycle_gan_model modellib = importlib.import_module(model_filename)
然后就能夠使用modellib來調用cycle_gan_model模塊
等價於:
from models import cycle_gan_model as modellib