2016-06-17 1 views
0

나는 [(module_name, module_abs_path)(mod2, path2), ...]파이썬 동적 수입

모듈이 내 스크립트가 사는 '모듈의 하위 디렉터리에있는 같은 튜플의 목록을 가지고있다. conf 파일을 읽고 conf 파일의 일부 변수를 모듈 dir의 모듈에 사용할 수있는 스크립트를 작성하려고합니다. 내 의도는이 스크립트에서 모든 모듈을로드하고 실행하여 이들 변수에 액세스하는 것입니다.

상황이 지금까지 시도했지만 실패했다 :

  1. __import__()를 사용하여 시도하지만 파일의 이름으로 실행 말한다 것은
  2. 시도 importlib.import_module()을 허용하지 않고 같은 오류를 제공합니다.

어떻게해야합니까?

+0

목록 항목의 샘플을 제공하십시오. 무엇을'__import __()'에 인수로 넣고 있습니까? – Leva7

+0

튜플 : ('test_printer', '/Users/../../..modules/test_printer.mod.py') 가져 오기 = __import __ ('모듈.'+ 튜플 [0] + '. mod') . 또한, 빈 __init __() 파일을 배치하여 모듈 dir을 패키지로 표시했습니다. – ronakshah725

+1

모듈을 "module_name.mod"'라고 부를 필요가 있습니까? 그렇지 않은 경우이 문제를 일으킨 것으로 생각됩니다. 점을 밑줄로 바꾸십시오. – Leva7

답변

0

가져 오기 전에 경로를 수정하려고 시도 했습니까?

from __future__ import print_function 
import importlib 
import sys 

def import_modules(modules): 
    modules_dict = dict() 
    for module_name, module_path in modules: 
     sys.path.append(module_path) # Fix the path 
     modules_dict[module_name] = importlib.import_module(module_name) 
     sys.path.pop()    # Undo the path.append 
    return modules_dict 

if __name__ == '__main__': 
    modules_info = [ 
     ('module1', '/abs/path/to/module1'), 
    ] 

    modules_dict = import_modules(modules_info) 
    # At this point, we can access the module as 
    # modules_dict['module1'] 
    # or... 

    globals().update(modules_dict) 
    # ... simply as module1 
+0

함수 import_modules에서 dict() 대신 {}을 사용하는 것이 좋습니다. –