【问题标题】:Running GAE GCS on PyCharm under OS X, runtime error "No module named cloudstorage"在 OS X 下的 PyCharm 上运行 GAE GCS,运行时错误“No module named cloudstorage”
【发布时间】:2026-01-04 01:50:02
【问题描述】:

我正在尝试将 Google Cloud Storage 功能添加到已运行具有重要功能的 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 的“pip”和“svn”说明进行操作 下载 GCS 客户端库。

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

  • 曾经没有“-t”选项,因为我以前从不需要带有“pip”的选项
  • 曾经使用“-t”选项指定我的应用程序目录的“lib”子目录
  • 一旦使用: pip install GoogleAppEngineCloudStorageClient -t /Applications/GoogleAppEngineLauncher.app//Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/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 中),我总是在同一个导入语句中收到运行时错误“ImportError: No module named cloudstorage”。

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

当然,我想要的主要帮助是如何克服“No module named cloudstorage”运行时错误,即使 import 语句不再显示错误。

我想我还有多达三个 GCS 客户端库的虚假版本。我更关心通过“未找到模块”,因为它是一个阻碍,但如果你知道我如何删除虚假版本,以便它们不只是躺在那里,我会是最也感谢您的帮助。

【问题讨论】:

  • 检查项目文件夹。确保 GCS 文件夹被命名为“cloudstorage”,如果它命名为任何其他它不会看到它。
  • @Bruyere 结构是<app>/lib/cloudstorage。还有<app>/lib/GoogleAppEngineCloudStorageClient-1.9.5.0-py2.7.egg-info。我不明白 egg-info 目录。顺便说一句,如果有帮助,我还有<app>/lib/crc16pure.py,它可以被导入并在执行时工作。但是请注意,cloudstorage 是一个目录,而crc16pure.py 是一个 Python 模块。 cloudstorage 目录不包含 cloudstorage.py,但它确实包含 cloudstorage_api.py 以及其他文件。
  • 从 google.appengine.ext 导入云存储

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


【解决方案1】:

如果“cloudstorage”目录位于<app>/lib/cloudstorage,那么导入语句必须指定“lib”:

import lib.cloudstorage

就我而言,它是:

import lib.cloudstorage as gcs

对了,<app>/lib/GoogleAppEngineCloudStorageClient-1.9.5.0-py2.7.egg-info这个目录好像不需要,可以删除。

【讨论】:

  • import lib.cloudstorage 和 import cloudstorage 都不适用于我的实时 GAE 应用程序。洞察力?
  • 嗨,@Jonny。您需要获取 Cloudstorage 库并将其添加到您的项目目录中,以便在部署时将其与您的应用程序的其余部分一起上传。我创建了一个“lib”目录并将我的副本放在那里。我的“lib”目录也有一个文件__init.py__,声明为import cloudstorage。我相信我为 Cloudstorage 获得的安装包含不必要的文件。我保存在“lib”中的唯一一个是目录“cloudstorage”。
  • @Jonny 是的,如果您更新代码以在答案中添加 lib. 前缀,然后导入库并在 lib 中创建一个 __init.py__ 文件(如 Lindsay 的 comment 然后它可以在本地和实时工作。(根据我的经验,一个空的__init.py 文件就足够了——它只是告诉 Python 可以导入该目录。)
【解决方案2】:

其实你也需要

触摸__init__.py

在 lib 目录中。这将使 cloudstorage 模块对“import lib.cloudstorage”命令可见。

尊敬的 Google:发行版应包含此文件(或程序应考虑到该文件),并且应更改演示脚本以反映预期用途。但更重要的是,你为什么要像这样分发/PROLIFERATING 库代码??!!!为什么这不是通过 gcloud 分发的?我将如何为这个库获取补丁?

【讨论】:

  • 这个答案实际上为我解决了这个问题。我想知道你投反对票的原因。
  • 相同。 GCS-on-GAE 文档建议安装到lib 目录中,但除非您也使用touch lib/__init__.py,否则这样做是行不通的。这正是我的问题。
【解决方案3】:

接受的答案的解决方案

import lib.module_name

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

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

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

在那个文件里面。这将帮助您告诉 appengine 在该文件夹中查找依赖项,因此您可以简单地编写

import cloudstorage as gcs

【讨论】:

    【解决方案4】:

    我通过将以下内容添加到我的主应用程序文件 (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://*.com/a/37645984/1740008

    【讨论】:

    • 我真的被这个问题困住了,其他解决方案根本不起作用,但这对我来说非常有效。
    最近更新 更多