2014-12-07 2 views
0

질문이 있습니다. 다음과 같은 디렉토리 설정이 있습니다 :부모의 하위 폴더에서 가져 오는 Python

folder/ 
     main.py 
     /stuff/ 
      __init__.py 
      function.py 
     /items/ 
      __init__.py 
      class.py 

제 질문은 class.py를 function.py로 어떻게 가져 옵니까? 이 설정은 매우 구체적이며 변경할 수 없습니다. 이 작업을하려면 무엇을 넣어야합니까?

+0

부모 폴더를 PYTHONPATH ('sys.path.append (...)')에 추가하면 class.py에'from stuff init function' 만하면됩니다. 그것은 하나의 해결책입니다 ... – tamasgal

+0

http://stackoverflow.com/questions/72852/how-to-relative-imports-in-python의 가능한 중복 – kdopen

+0

확실한 중복 http://stackoverflow.com/questions/27215912/import -neighboring-module-in-python/27216343 # 27216343 – kdopen

답변

0

응용 프로그램이 main.py을 통해 시작되는 한 현재 디렉토리 구조가 이상적입니다.

파이썬은 기본 스크립트의 상위 디렉토리를 항상 sys.path (예 : folder)의 시작 부분에 자동으로 추가합니다. 즉, 표준 libarary의 일부가 아닌 모듈과 패키지를 검색 할 때 가져 오기 기계가 해당 디렉토리에 우선 순위를 부여합니다.

이 주어지면과 같이, function.py으로 classes.py 모듈을 가져올 수 있습니다

from items import classes 

(class는 파이썬 키워드이기 때문에, 내가 모듈을 이름을 변경 한 것을 참고).

from stuff import another 

및 하위 패키지가 items에 추가 된 경우, 당신은 모듈을 가져올 원 :

나중에 stuff에 다른 모듈을 추가하고, functions.py로 가져올하고 싶다면

, 당신은 할 것 그에서, 당신은 할 것 :이 하향식 (top-down) 방식으로 지정

from items.subpackage import module 

수입은 응용 프로그램 내 어떤 모듈에서 사용할 수 있습니다, 그들은 항상 relat 때문에 주 스크립트의 상위 디렉토리에 우선 순위가 있습니다.

+0

감사합니다. 이것은 작동했습니다 – Punisher

+0

나를 위해 작동하지 않습니다. 각 폴더에서'__init __. py' 파일과 같은 아키텍쳐를 가지고 있기 때문에 어떻게 작동하는지 설명해 주시겠습니까?하지만 가져 오기를 시도 할 때 작동하지 않습니다. –

+0

@ YohanObadia. 내 대답에 추가 할 수있는 부분이 많지 않아 꽤 잘 설명 할 수 있습니다. ** 패키지를 포함하는 디렉토리에 * main.py * 스크립트를 사용하여 응용 프로그램을 시작해야합니다. 컨테이너 디렉토리 자체는 패키지가 아닙니다. 이 질문은 올바른 디렉토리 구조를 매우 명확하게 보여줍니다. – ekhumoro

관련 문제