我正在尝试将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”三次:
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客户端库。我更关心的是越过“未找到模块”,因为它是一个显示阻止,但如果你有任何想法我怎么能删除虚假版本,以便他们不只是躺着,我会是最也感谢你的帮助。
答案 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.cloudstorage
或lib/__init__.py
业务。