2012-02-12 4 views
3

Google App Engine의 내 앱 중 하나에서 this code을 사용하고 있습니다. 개별 파일을 참조하는 방식에 문제가 있습니다.동일한 모듈 내에서 파일을 참조하는 올바른 방법

import reddit.decorators 
import reddit.errors 
import reddit.helpers 
import reddit.objects 

파일이 모두 같은 모듈 내에서, 그들은이 instead 같이 가져올 수 없습니다해야하기 때문에 : : 예를 들어, 다음과 같이 __init.py__에있는 파일을 가져 등 errors.py, decorators.py

reddit 패키지가 시스템 경로에있는 경우에만 절대 참조가 작동합니다. 시스템 경로에 어떤 이유로 든 Google App Engine에없는 것처럼 보입니다.

소스에 문제가 있습니까? 아니면 Google App Engine 내에서 애플리케이션 구성을보다 자세히 검토해야합니까?

답변

0

패키지를 사용하려면 Python이 찾을 수있는 곳, 즉 sys.path에있는 디렉토리 전체에 디렉토리를 설치해야합니다. 패키지 내용을 독립 실행 형 모듈로 사용하지 마십시오. 패키지를 설계하는 방법이 아니기 때문입니다.

기본 스크립트 (.)의 작업 디렉토리가 sys.path이므로 전체 패키지 디렉토리를 주 스크립트와 동일한 디렉토리에두기 만하면 reddit 패키지를 사용할 수 있습니다. Google App Engine에서 import reddit을 사용할 수 없다면 설정을 확인해야합니다. 불행히도 GAE의 작동 방식이나 설치 방법은 모르지만 웹 사이트에 임의의 파이썬 모듈과 패키지를 넣을 수 있기 때문에 작동해야합니다. 그렇지 않습니까?

원래 질문과 관련하여 설명서의 잘못된 부분을 참조하고 있습니다.

import reddit.decorators as decorators 

또는 상대들 :

from . import decorators 

절대 수입 구문은 파이썬 버전에 따라 작동하는 경우 intra-package references를 들어, 당신은 절대 수입을 사용해야 하나. 이것은 모호합니다.

import decorators 

글로벌 모듈 (/decorators.py)을 의미합니까? 또는 패키지 내의 모듈 (/reddit/decorators.py)? 파이썬 2.x는 먼저 상대적 가져 오기를 찾은 다음 상대적인 것이 실패 할 경우 절대 가져 오기를 시도합니다. 버전 2.6부터는 절대 스타일 가져 오기를 사용하는 것이 더 이상 사용되지 않으므로 더 이상 사용하지 않아야합니다. 3.0 이후, 위의 명령문은 절대적인 수입으로 해석되어 상대적인 것을 찾지 않습니다. 명시 적 절대 가져 오기는 두 버전 모두에서 예상대로 작동합니다.

관련 문제