2014-10-16 2 views
8

이미 중요한 기능을 실행하고있는 Python GAE 앱에 Google Cloud Storage 기능을 추가하려고합니다. OSX 10.9.5를 실행하는 Mac 인 개발 컴퓨터에서 PyCharm으로 작업합니다.OS X에서 PyCharm에서 GAE GCS 실행 중 런타임 오류 "no module cloudstorage"

나는이 문장이 포함 된 새 파이썬 모듈 만든 : 내가 처음 그 라인을 추가하면 https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/getstarted

에서 샘플 코드와 같이

import cloudstorage as gcs 

을 PyCharm 말했다 "아니 모듈 이름 cloudstorage 없다" 편집기에서.

그런 다음 "pip"및 "svn"지침을 따라 https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download 으로 이동하여 GCS 클라이언트 라이브러리를 다운로드하십시오. 내가 '때문에, 일단 "-t"옵션을 사용하지 않고

  • 이 프로그래밍 환경을 고려 내 사전 경험을 가지고, 그 지침을 따르려고 노력에서

    는 사실을 세 번 "핍"사용하여 시도 내가 지시가 무슨 뜻인지 확실하지 이후, pip install GoogleAppEngineCloudStorageClient -t /Applications/GoogleAppEngineLauncher.app//Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib을 일단 한 번

  • 사용하여 내 응용 프로그램 디렉토리의 "lib 디렉토리"하위 디렉토리를 지정하려면 "-t"옵션을 사용
  • 전에 "핍"에 해당 옵션이 필요 적이 없다 "<your_app_directory/lib> "

앞서 언급했듯이"svn "명령도 실행했습니다. 그런 다음 install python google cloud storage client on Ubuntu 14.04에서 언급했듯이 "cd gcs-client/src"및 "sudo python setup.py install"을 실행했습니다. 내 사용자 루트 디렉토리에서이 명령을 실행했습니다.

GCS 클라이언트 라이브러리를 성공적으로 설치했지만 각각의 설치가 끝난 후, 필자는 모듈의 PyCharm 편집기 창을보고 항상 "No module named cloudstorage"오류가 발생했습니다. 하지만 실험으로 PyCharm을 다시 시작하고 앱을 실행 해 봅니다.

어느 시점에서 편집기 창에 오류가 표시되지 않았습니다. 위의 단계 중 하나를 수행 한 직후가 아니었지만 여러 웹 페이지를 읽은 다음 다시 돌아와 오류를 다시 살펴 보았습니다. 어떤 설치가 PyCharm 편집기의 오류 메시지를 제거한 것인지 알 수 없습니다.

어쨌든 언제든지 (PyCharm 내에서) 앱을 실행하려고 할 때마다 동일한 가져 오기 명령문에서 항상 런타임 오류 "ImportError : 모듈 없음"을 얻습니다.

이 응용 프로그램의 실행/디버그 구성 페이지에는 "콘텐츠 루트를 PYTHONPATH에 추가"와 "원본 루트를 PYTHONPATH에 추가"가 모두 선택되어 있습니다.

물론 내가 원한 주요 도움말은 가져 오기 명령문에 더 이상 오류가 표시되지 않지만 "no module named cloudstorage"런타임 오류를 피하는 방법입니다.

GCS 클라이언트 라이브러리에는 3 가지 가짜 버전이 있다고 생각합니다. 나는 과거의 "모듈을 찾을 수 없다"는 것에 관심이 많습니다. 쇼 스토퍼이기 때문에 그렇습니다. 그렇지만 거짓말 만하지 않도록 위조 된 버전을 어떻게 삭제할 수 있는지 알고 있다면, 나는 가장 많을 것입니다. 그 도움에 대해서도 감사합니다.은 "cloudstorage"디렉토리가 <app>/lib/cloudstorage에있는 경우

+0

프로젝트 폴더를 확인하십시오. GCS 폴더의 이름이 'cloudstorage'인 지 확인하십시오. – Ryan

+0

@Bruyere 구조는 '/lib/cloudstorage'입니다. 현재 '/lib/GoogleAppEngineCloudStorageClient-1.9.5.0-py2.7.egg-info'입니다. 달걀 정보 디렉토리를 이해하지 못합니다. 그건 그렇고, 도움이된다면, 나는 또한 '/lib/crc16pure.py'을 가지고 있으며, 가져올 수 있고 실행될 때 작동한다. 그러나'cloudstorage'는 디렉토리이고,'crc16pure.py'는 파이썬 모듈입니다. 'cloudstorage' 디렉토리에는'cloudstorage.py'가 없지만 다른 파일들에는'cloudstorage_api.py'가 들어 있습니다. – Lindsay

+0

google.appengine.ext에서 가져 오기 cloudstorage – DMTishler

답변

11

, 다음 import 문은 "lib 디렉토리"를 지정해야합니다 : 내 경우

import lib.cloudstorage 

, 그건 : 그런데

import lib.cloudstorage as gcs 

의이 <app>/lib/GoogleAppEngineCloudStorageClient-1.9.5.0-py2.7.egg-info 디렉토리가 필요하지 않아 삭제 될 수 있습니다.

+0

lib.cloudstorage 가져 오기 또는 가져 오기 cloudstorage 나 라이브 GAE 앱에서 작동하지 않습니다. 통찰력? – Jonny

+2

안녕하세요, @ 조니. Cloudstorage 라이브러리를 가져와 프로젝트 디렉토리에 추가해야 배포 할 때 나머지 앱과 함께 업로드 할 수 있습니다."lib"디렉토리를 만들고 거기에 사본을 넣습니다. 내 "lib"디렉토리에는'import cloudstorage' 문과 함께'__init.py__' 파일이 있습니다. Cloudstorage에 대해 얻은 설치에는 불필요한 파일이 포함되어 있다고 생각합니다. 내 "lib"에 보관 된 유일한 파일은 "cloudstorage"디렉토리입니다. – Lindsay

+1

좋아, 이렇게하면 shuold도 온라인으로 작업 할 수 있습니까? – Jonny

10

사실, 당신은 또한 lib 디렉토리에

touch __init__.py

해야합니다. 그러면 "import lib.cloudstorage"명령에 cloudstorage 모듈이 표시됩니다.

안녕하세요. 배포판에이 파일이 포함되어 있어야하며 (또는 절차에서 설명해야합니다) 데모 스크립트는 예상되는 사용법을 반영하여 변경해야합니다. 하지만 더 중요한 것은 왜 이런 라이브러리 코드를 배포/배포하는 것입니까 ?? !!! 왜 이것이 gcloud를 통해 배포되지 않습니까? 이 라이브러리의 패치를 어떻게 가져 옵니까?

+3

이 답변은 저에게 실제로이 문제를 해결해주었습니다. 당신이 가지고있는 downvote의 이유를 알고 싶습니다. –

+0

동일합니다 .GCS-on-GAE 문서는'lib' 디렉토리에 설치하는 것을 제안하지만'touch lib/__ init __. py. '를 제외하고는 작동하지 않습니다. 이것은 제 문제였습니다. –

1

나는 내 기본 응용 프로그램 파일 (main.py)에 다음을 추가하여 누락 된 모듈 문제를 해결 :

import os 
import sys 
sys.path.append(os.path.join(os.path.dirname(__file__), "lib")) 

나는이 의도하는 방식 Guido 생각합니다. 이제 내 코드는 import cloudstorage as gcs이라고 간단히 말합니다. lib.cloudstorage 또는 lib/__init__.py 업체 정보가 없습니다. https://stackoverflow.com/a/37645984/1740008

3

허용 대답의 솔루션

import lib.module_name 

에서

확실히 문제를 해결할 수 있습니다. 그러나 모든 단일 모듈 앞에 lib을 추가하는 것을 좋아하지 않으며 Google이 어떻게 제 3 자 lib를 가져올 것을 제안했는지 보았습니다.

appengine은 appengine_config.py이라는 파일을 자동으로 실행합니다. 그래서 그러한 파일을 만들고 그 파일 안에

from google.appengine.ext import vendor 
vendor.add('lib') 

을 넣을 수 있습니다. 이렇게하면 appengine에게 해당 폴더의 종속성을 찾도록 지시하여 간단하게 쓸 수 있습니다.

import cloudstorage as gcs