2010-12-21 3 views
3

내가 디렉토리 구조과 같이이 실패 주어진 목록에 후크하지만, module = __import__(file.split(".")[0])에서 항상 ImportError를 쳤는데 __init__.py과 base.py가 모두 같은 폴더에 있어도 마찬가지입니다. 나는 어떤 모듈 파일도 아무것도 __init__.py에 필요하다는 것을 확인하지 못했습니다. 그래서 나는 정말로 무엇을 해야할지를 놓치고 있습니다.파이썬 __import__는

+0

'__import__' 당신이 특히 fromlist' '과 관련, 알 필요가 꽤 서투른 비트를 가지고있다. 그걸 검색해보고 알아낼 수 있는지 알아보십시오. –

+0

'path = os.path.dirname (os.path.abspath (__ file __))'(보다 정확하고 부수적으로 크로스 플랫폼) –

+0

'load_modules()'가 어디에서 어떻게 호출 되었습니까? – martineau

답변

2

누락 된 전부는 시스템 경로에 모듈이있는 것입니다. 당신의 path = ... 줄 끝에서

import sys 
sys.path.append(path) 

을 추가하면 설정해야합니다. 여기 내 테스트 스크립트입니다 :

import os, os.path, sys 

print '\n'.join(sys.path) + '\n' * 3 

commands = [] 
hooks = [] 

def load_modules(): 
    """ dynamically loads commands from the /modules subdirectory """ 
    path = os.path.dirname(os.path.abspath(__file__)) 

    print "In path:", path in sys.path 
    sys.path.append(path) 

    modules = [f for f in os.listdir(path) if f.endswith(".py") and f != "__init__.py"] 
    print modules 
    for file in modules: 
     try: 
      modname = file.split(".")[0] 
      module = __import__(modname) 
      for obj_name in dir(module): 
       print '%s.%s' % (modname, obj_name) 
     except ImportError as e: 
      print "!! Could not load %s: %s" % (file, e) 
    print commands 


load_modules()