2011-07-31 1 views
0

계층 구조의 지정된 모델 바로 아래에있는 모든 파이썬 모듈을 나열하는 방법이 있습니까?계층의 특정 모듈 아래에있는 모든 모듈을 가져 오는 방법이 있습니까?

내가 천천히 성장하고 장고 웹 응용 프로그램을 가지고, 나는이 기사에 기반을 다시 정리했습니다 그러나

http://paltman.com/2008/01/29/breaking-apart-models-in-django/

, 나는 개선하기 위해 노력하고있어 그의 기술을 사용하여 모듈 초기화 파일 (__ init __.py)에서 인트로 스펙 션을 사용하여 하위 작업에서 장고 모델 클래스의 모든 인스턴스를 자동 감지합니다. 이런 종류의 작업이 가능하지만 여전히 작동하려면 트리 위의 정적 모듈 목록이 필요합니다.

from django.db.models.base import ModelBase 
from sys import modules 

moduleList = ['TechTree', 'PilotAbilities'] 
__all__ = [] 

for moduleName in moduleList: 
    fullyQualifiedModuleName = '%s.%s' % (__name__, moduleName) 
    moduleObj = __import__(fullyQualifiedModuleName) 

    __all__ += [item for item in dir(moduleObj) if isinstance(getattr(moduleObj, item), ModelBase)] 

답변

1

글쎄, 당신은 os.path.dirname(parent.__file__)를 얻을, 다음 glob.glob() 또는 os.walk()을 다른 초기화 평 파일을 찾을 수 있습니다 경우 사람에

관심이 여기처럼 내 솔루션 모습입니다.

+0

약간 어색하지만 가능한 유일한 옵션 일 수 있습니다 (다른 응답이없는 경우). –

1

이것은 단지 시도이지만 작동하는 것으로 보입니다. 파이썬 2.7.1을 실행 중이며 dir (somemodule)은 관련된 모든 모듈을 제공합니다. openpyxl 및 os 모듈로 테스트되었습니다.

def import_all(name): 
    __import__(name) 
    for i in dir(name): 
     try: 
      if type(i) == type(name): 
       import_all(name+'.'+i) 
     except: 
      pass 

참고 : 이 아마 매우 unpythonic 낙담하지만, 작동하는 것 같다.

참고 2 : 그 이유는 내가 실수로 'openpyxl'(내가 사용했던 테스트)이 목록 하위 모듈 대신에 있었기 때문입니다. 죄송합니다.

+1

이상하게도, 나는 이것을 시도 할 때이 객체가 가져온 모듈 목록을 얻는다. ('tree'아래에 존재하는 모듈 목록 대신). –

+1

내가 할 수있는 것을 보겠다. –

+0

글쎄, 나는 다른 해결책을 찾을 수 있었다. 너무 걱정하지 마라. 당신이 뭔가를 생각해 내면, 나는 그것을 듣기에 호기심이 생길 것이다. –