2010-03-01 1 views
8

나는 나의 핸들러 스크립트 (main.py)에 다음 줄을 추가하려했지만, 작동하지 않는 것 :Google App Engine (Python)에서 sys.path를 어떻게 수정합니까?

sys.path.append ('하위 디렉터리')

subdir은 내 루트 디렉토리 (즉, app.yaml을 포함하는 디렉토리)에 있습니다.

subdir에있는 모듈을 가져 오려고하면 내 앱이 폭발하기 때문에 작동하지 않는 것 같습니다.

+0

$ 10 오류가 "자체 고정"경우'잘못된 정보 파일 .pyc'했다 말한다. –

답변

18

1) __init__.py 파일이 subdir에 있는지 확인하십시오.

2) 전체 경로를 사용하십시오. 이 같은 :

import os 
import sys 

sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir')) 

편집 : 코멘트에 묻는 질문에 대답하기 위해 더 많은 정보를 제공한다.

As Nick Johnson demonstrates이 세 줄의 코드를 fix_path.py이라는 파일에 넣을 수 있습니다. 그런 다음 main.py 파일에 다른 모든 가져 오기 전에 import fix_path을 입력하십시오. Link to a tested application using this technique.

그리고 예, __init__.py 파일이 필요합니다. documentation 당 : 패키지를 가져올 때

, 의 sys.path에 디렉토리를 통해 파이썬 검색 패키지 하위 디렉토리를 찾고.

파일은 이어야합니다. 파이썬이 디렉토리를 패키지가 들어있는 으로 처리하도록하십시오. 이 문자열 (예 : 문자열)의 디렉토리가 실수로 올바른 모듈 을 숨기고 경로에서 나중에 발생하는 의 디렉토리를 막습니다. 가장 간단한 경우 __init__.py은 빈 파일 일 수 있지만 패키지에 대한 초기화는 코드를 실행하거나 나중에 설명 할 __all__ 변수를 설정할 수도 있습니다.

+0

subdir이라는 패키지를 만들고 싶지 않습니다. 1) 무엇을 할 것인가? 또한, 당신이 2)에서 언급 한 코드를 어디에 두겠습니까 ?? – allyourcode

+0

2) 제가 찾고있는 답변입니다. 1) docs에서 인용 한 내용에 따라 서브 디렉토리가 패키지가되어, 원하는 바가 아닙니다. – allyourcode

+0

사실, 원래 sys.path.append ('subdir')을 main에 추가하는 이유는 확실하지 않습니다.py (내 app.yaml의 유일한 비 정적 처리기)가 작동하지 않았습니다. 방금 다시 시도했지만 이번에는 폭발하지 않습니다 :/ – allyourcode

2

sys.path의 첫 번째 항목으로 새로운 dir을 삽입하는 데 유용했습니다.

path_changer.py :

import os 
import sys 

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs')) 
sys.path.insert(1, os.path.join(os.path.dirname(__file__), 'apps')) 

app.py :

import path_changer 
from google.appengine.ext.webapp.util import run_wsgi_app 

from flask import Flask 
import settings 

app = Flask('myapp') 
app.config.from_object('settings') 

from website import views as website_views 

run_wsgi_app(app)