2017-07-25 59 views
0

導入一個模塊可以在一個函數中完成,然後傳遞給調用者,使用這個簡單的工具。如何導入相對於調用者的子模塊?

def import_reload_or_none(name, reload=True): 
    try: 
     mod = __import__(name) 
     if reload: 
      import importlib 
      mod = importlib.reload(mod) 
     return mod 
    except Exception: 
     import traceback 
     traceback.print_exc() 
     return None 

這適用於根級模塊,但是我不知道如何當函數是在另一個模塊或當使用相對導入可以這樣做。

這怎麼可能功能進行工作,以取代如:

from . import my_package_module 

回答

0

嘗試傳遞的路徑,你要導入到你的函數,例如模塊:

def import_reload_or_none(name, reload=True, path=None): 
    mod = __import__(path + '/' + name) if path is not None else __import__(name) 
    if reload: 
     import importlib 
     mod = importlib.reload(mod) 
    return mod 

然後,如果你想用相對路徑導入,你可以使用

import_reload_or_none(my_package_module, path = '.')