在OS X下在PyCharm上运行GAE GCS,运行时错误"没有名为cloudstorage的模块"

时间:2014-10-16 14:14:18

标签: google-app-engine google-cloud-storage pycharm

我正在尝试将Google云端存储功能添加到已经运行了重要功能的Python GAE应用中。我在我的开发计算机上完全在PyCharm中工作,这是一台运行OS X 10.9.5的Mac。

我创建了一个包含此语句的新Python模块:

import cloudstorage as gcs

,如https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/getstarted

中的示例代码所示

当我第一次添加该行时,PyCharm在编辑器中说“没有名为cloudstorage的模块”。

然后我跟着https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download处的“点子”和“svn”说明 下载GCS客户端库。

在尝试遵循这些说明时,考虑到我之前使用此编程环境的经验,我实际上尝试过使用“pip”三次:

  • 一旦没有“-t”选项,因为我之前从未需要“pip”选项
  • 使用“-t”选项指定我的应用程序目录的“lib”子目录
  • 一旦使用: pip install GoogleAppEngineCloudStorageClient -t /Applications/GoogleAppEngineLauncher.app//Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib,因为我不确定“< 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编辑器窗口,它始终具有相同的“无模块名为cloudstorage”错误。但作为一个实验,我也会尝试重启PyCharm,并尝试运行我的应用程序。

在某些时候,编辑器窗口停止显示错误。它不是在上面的一个步骤之后立即,而是在我离开阅读各种网页然后再回来再次查看错误之后。我不知道哪个安装是在PyCharm编辑器中摆脱错误消息的安装。

无论如何,每当我尝试运行应用程序时(再次在PyCharm中),我总是在同一个import语句中得到运行时错误“ImportError:No module named cloudstorage”。

此应用程序的“运行/调试配置”页面同时选中“将内容根添加到PYTHONPATH”和“将源根添加到PYTHONPATH”。

当然,我想要的主要帮助是如何通过“没有名为cloudstorage的模块”运行时错误,即使import语句不再显示错误。

我想我也有多达三个虚假版本的GCS客户端库。我更关心的是越过“未找到模块”,因为它是一个显示阻止,但如果你有任何想法我怎么能删除虚假版本,以便他们不只是躺着,我会是最也感谢你的帮助。

4 个答案:

答案 0 :(得分:12)

如果&#34; cloudstorage&#34;目录位于<app>/lib/cloudstorage,然后import语句必须指定&#34; lib&#34;:

import lib.cloudstorage

就我而言,它是:

import lib.cloudstorage as gcs

顺便说一句,似乎不需要<app>/lib/GoogleAppEngineCloudStorageClient-1.9.5.0-py2.7.egg-info目录,可以将其删除。

答案 1 :(得分:10)

实际上,你还需要

  

触摸__init__.py

在lib目录中。这将使cloudstorage模块对&#34; import lib.cloudstorage&#34;命令。

亲爱的Google:发行版应该包含此文件(或者程序应该考虑它),并且应该更改演示脚本以反映预期的使用情况。但更重要的是,为什么你这样分发/ PROLIFERATING库代码?? !!!为什么不通过gcloud分发?我怎么去为这个图书馆买贴片?

答案 2 :(得分:3)

接受的答案解决方案

import lib.module_name
绝对可以解决问题。但是我不喜欢在每个模块前添加lib,并且碰巧看到谷歌建议如何导入这样的第三方库。

appengine将自动运行名为appengine_config.py的文件。所以你可以创建这样一个文件并放入

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

在该文件中。这将帮助您告诉appengine在该文件夹中查找依赖项,因此您只需编写

即可
import cloudstorage as gcs

答案 3 :(得分:2)

我通过在主应用程序文件(main.py)中添加以下内容来解决缺少的模块问题:

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

我认为这是Guido预期的方式。现在我的代码只是说import cloudstorage as gcs。没有lib.cloudstoragelib/__init__.py业务。

https://stackoverflow.com/a/37645984/1740008