2012-06-15 1 views
0

주어진 디렉토리/패키지에 모든 모듈을 가져 __init__.pydir_a의 내부에 다음동적으로 나는이 같은 파일 구조를 가지고

import os 
import glob 
__all__ = [os.path.basename(f)[:-3] for f in glob.glob(os.path.dirname(os.path.abspath(__file__)) + "/*.py")] 

하지만 내가 할 :

from dir_a import * 
,

나는 내가 그것을 dir_adir_b를 포함하는 상위 디렉토리가 PYTHONPATH에 있어야하기 때문이다,이 원인이 무엇인지 궁금

ImportError: No module named dir_a를 얻을? 또한 위의 방법은 my_mod.py이 실행될 때 모든 것을 집어내는 점에서 동적이지만, 실행 중에 새로운 모듈이 dir_a에 추가되면이 새 모듈은 선택되지 않습니다. 정말 동적 인 가져 오기 메커니즘을 구현할 수 있습니까?

답변

1

질문의 첫 번째 부분에 대한 대답은 dir_a을 포함하는 디렉토리가 검색 경로에없는 경우 import dir_a이 될 수 없습니다.

두 번째의 경우, 나는이 가능 믿지 않는 일반 - 당신 생성 된 파일이 .py 있는지 여부를 확인하고, dir_a.__all__에 추가 dir_a에 OS 신호를 '생성 된 파일'을 수신 할 수 - 그러나 이것은 복잡하고 아마도 비용이 많이 들며 from foo import *은 가져 오기시 foo.__all__ 만 볼 수 있기 때문에 소급해서 전역 이름 공간에 새 것을 추가하지 않습니다. 으로 변경하면 오류가 발생하기 쉬워 예측할 수없는 외부 이벤트를 기반으로 언제든지 네임 스페이스를 변경할 수 있습니다.

from dir_a import * 
bar = 5 

을 다음 bar.pydir_a에 추가됩니다 : 당신이 할 말. 그 상황을 고려하지 않고 무엇을하고 싶은지를 결정하지 않고 "진정으로 역동적 인 수입업자"라고 쓸 수는 없습니다.