2012-11-14 12 views
2

저는 항상 Python 패키지 가져 오기에 어려움을 겪었습니다. 웹을 검색했지만 적절한 대답을 찾을 수 없었습니다. Python 패키지 가져 오기 문제

나는 다음과 같은 디렉토리 구조가 있습니다

. 
./__init__.py 
./packages/ 
./packages/__init__.py 
./packages/package 
./packages/package/__init__.py 
./packages/package/module.py 

module.py 소스는 하나의 줄이 포함을 : 내가 가면

import package 

에 "패키지"디렉토리, 나는 패키지를 가져올 수 있어요 :

>>> import python 
>>> 

"."

>>> import packages.package.module as module 

을하지만 난 오류를 받고 있어요 : 디렉토리, 나는 다음과 같이 모듈 (또는 패키지)를 가져올 것입니다 무엇을

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "vendor/package/module.py", line 1, in <module> 
    import package 
ImportError: No module named package 

은 내가 __init__에 넣어해야합니다. py 파일, 그래서 위의 가져 오기를 할 수 있습니까? 더 많은 것을 ./__init__.py 파일에 넣어야하므로, 프로젝트를 ../ 디렉토리에서 가져올 수 있습니까?

가능한 경우 sys.path 변수를 변경하지 않고이 문제를 해결하고 싶습니다.

+0

가장 먼저 실행하는 파일은 무엇입니까? 누가 전체 과정을 시작합니까? – alexvassel

+0

문서를 읽으십시오 : http://docs.python.org/2/tutorial/modules.html – codeape

+0

'packages.package import module'에서 –

답변

1

에서 프로그램을 실행할 때. 모든 가져 오기는 해당 디렉토리에 상대적이어야합니다. 당신의 module.py 파일에 대해 그건 당신이

import packages.package 

대신 파이썬이 사용하기 때문입니다

import package 

의 할 필요가 있다는 것을 의미한다. 프로그램에서 수행하는 모든 가져 오기의 기본으로 사용됩니다. 많은 마법이 없으면 부모 디렉토리에서 어떤 것을 가져올 수 없으므로 위와 같이 절대 가져 오기를 수행해야합니다.

+0

패키지 모듈을 수정하지 않고도 작동 할 수 있습니까? – kaspersky

+0

나는 그것이 쉽게 가능하다고 생각하지 않는다. 모듈이 가능한 한 자체 포함되어야하기 때문에 나쁜 디자인으로 간주 될 수있는 하위 모듈의 부모를 언급하기 때문에 어쨌든해서는 안됩니다. 그럼에도 불구하고 그것은 물론 발생하지만 자체 프로젝트에서만 가능합니다.이 경우 항상 동일한 파일에서 시작합니다. – Nihathrael

2

module.py의 import package가 성공하려면 파이썬 패키지 package이 검색 가능해야합니다. 즉, PYTHONPATH에 있어야합니다. 기본적으로이 경로는 site-packages (파이썬 패키지가있는 디렉토리는 easy_install 또는 pip)입니다. 또한 PYTHONPATH에는 현재 작업 디렉토리가 포함됩니다.

. 인 경우 .이 PYTHONPATH의 시작 부분에 있습니다. 이 디렉토리는 이 아니고package이라는 파이썬 패키지를 포함하므로 import package이 실패합니다.

파이썬 인터프리터를 시작하기 전에 ./packages으로 이동하거나 패키지를 설치할 수 있습니다. 후자를 수행하려면 setup.py가 필요합니다.

+0

그래서 어떻게 든이 문제를 \ __ init__.py 파일을 편집하여 해결할 수 없습니까? – kaspersky

+0

패키지/__ init__.py에 sys.path를 조작하여/packages 디렉토리를 추가 할 수 있습니다. –

+0

sys.path.insert는 제가 지금 사용하고있는 솔루션이지만 만족스럽지 않습니다. – kaspersky