2011-04-26 3 views
5
에서 패키지 가져 오기 비애 내 구조는 이렇게이다

: 나는 파이썬 콘솔을 열고 (import companynamespace.projectpackage을 입력파이썬

import companynamespace.projectpackage.somemodule as module_shortname 

:

companynamespace/ 
    __init__.py 
    projectpackage/ 
    __init__.py 
    somemodule.py 

companynamespace/__init__.py

projectpackage/__init__.py 비어는이 라인을 가지고 PYTHONPATH가 올바르게 설정 됨) import companynamespace.projectpackage.somemodule as module_shortname 행에 AttributeError: 'module' object has no attribute 'projectpackage'이 표시됩니다. as module_shortname 부분을 제거하고 (파일의 나머지 부분에서 필요한 모든 대체 작업을 수행하면) 모든 것이 올바르게 가져옵니다.

아무도 왜 이것이 내게 말할 수 있습니까? 내 Google-Fu가 실패합니다.

답변

5

는 할 상대는 (절대 가져 오기)를하고있는 방법은 아주 잘 작동하지 않는 원형의 수입으로 이어질 것 하나

import somemodule as module_shortname 

파이썬. 모듈을 가져올 때는 __init__.py (상위 모듈)이라고도합니다. 귀하의 경우, 절대 수입과 함께 projectpackage/__init__.pyprojectpackage/__init__.py으로 전화하십시오.

+0

진단 (즉, 순환 수입 문제)은 정확하지만 설명 및 제안 된 해결책은 적절하지 않습니다. 'projectpackage/__ init __. py'가 실행될 때,'companynamespace'의'projectpackage' 속성은 아직 설정되지 않았습니다. 따라서 특정한 오류가 발생합니다. 현재 파이썬의 경우 명시 적 상대 가져 오기 ('.sim import somemodule')는 암시 적 상대 가져 오기에 의존하는 것보다 나은 선택입니다. – ncoghlan

+0

피할 수없는 세부 사항은 http://bugs.python.org/issue992389에 있습니다. – ncoghlan

+0

감사합니다. 필자는 순환적인 가져 오기 문제를 생각해 냈지만 파이썬이 어떤 기능을 해결해야하는지 전혀 몰랐습니다. –

1

글쎄, PEP 221에 따르면 코드가 합법적 인 것 같습니다. 버그 일 수 있습니다. 그 표현과 동등한 다음 해결 방법은 나를 위해 일합니다 (파이썬 2.6.6) :

from companynamespace.projectpackage import somemodule as module_shortname 

희망이 도움이 되길 바랍니다. projectpackage/__init__.py 절대 수입에 대한 필요가 없습니다