无法让gcloud与Python和Pycharm一起使用

时间:2016-09-23 17:28:42

标签: python google-app-engine gcloud-python google-cloud-python

我正在尝试从本地计算机连接到Google App Engine数据存储区。我花了一整天时间都没有运气。

我在这里尝试了这种方法(以及来自SO的其他很多建议,例如Using gcloud-python in GAEUnable to run dev_appserver.py with gcloud):

How to access a remote datastore when running dev_appserver.py?

我首先根据谷歌的描述安装了gcloud: https://cloud.google.com/appengine/docs/python/tools/using-libraries-python-27

根据描述,我应该将以下内容添加到我的appengine_config.py:

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

如果我这样做,我会收到错误ImportError: No module named gcloud

如果我然后将代码移动到我的main.py,它似乎在那里拾取lib文件夹和模块。这对我来说似乎有点奇怪,因为我认为首先运行appengine_config以确保事情已初始化。 但现在我得到以下堆栈跟踪:

ERROR    2016-09-23 17:22:30,623 cgi.py:122] Traceback (most recent call last):
  File "/Users/thomasd/Documents/github/myapp/main.py", line 10, in <module>
    from gcloud import datastore
  File "/Users/thomasd/Documents/github/myapp/lib/gcloud/__init__.py", line 17, in <module>
    from pkg_resources import get_distribution
  File "/Users/thomasd/Documents/github/myapp/lib/pkg_resources/__init__.py", line 2985, in <module>
    @_call_aside
  File "/Users/thomasd/Documents/github/myapp/lib/pkg_resources/__init__.py", line 2971, in _call_aside
    f(*args, **kwargs)
  File "/Users/thomasd/Documents/github/myapp/lib/pkg_resources/__init__.py", line 3013, in _initialize_master_working_set
    dist.activate(replace=False)
  File "/Users/thomasd/Documents/github/myapp/lib/pkg_resources/__init__.py", line 2544, in activate
    declare_namespace(pkg)
  File "/Users/thomasd/Documents/github/myapp/lib/pkg_resources/__init__.py", line 2118, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/Users/thomasd/Documents/github/myapp/lib/pkg_resources/__init__.py", line 2057, in _handle_ns
    loader.load_module(packageName)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pkgutil.py", line 246, in load_module
    mod = imp.load_module(fullname, self.file, self.filename, self.etc)
  File "/Library/Python/2.7/site-packages/google/cloud/logging/__init__.py", line 18, in <module>
  File "/usr/local/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 999, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named google.cloud.logging.client

我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

google-cloud库是not working on App Engine,您很可能甚至不必这样做,因为您可以使用内置功能。<​​/ p>

official docs您可以像这样使用它:

import cloudstorage as gcs

答案 1 :(得分:0)

我这样解决了: -

1。)在项目路径中创建一个lib文件夹。

2。)通过从项目路径向终端运行以下命令来安装gcloud库: -

    pip install -t lib gcloud

3.。)在项目中创建一个appengine_config.py模块,并添加以下代码行: -

    import sys
    import os.path
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib'))

4.)之后,您可以像这样导入: -

    from gcloud import datastore

5.。)要将数据保存到本地的实时Google数据存储中: -

    client = datastore.Client("project-id")
    key = client.key('Person')
    entity = datastore.Entity(key=key)
    entity['name'] = ashish
    entity['age'] = 23
    client.put(entity)

它将保存名为Person的实体,该实体具有属性名称和年龄。不要忘记指定正确的项目ID。

答案 2 :(得分:0)

旧问题,但这可能值得包括:

我不确定你的 requirements.txt 文件的状态,但我稍微想了一下,发现 setuptools 未包含。< / p>

pip freeze无法导出 setuptools related question

假设您正在关注本教程,您可能会将这些库 EXCEPT for setuptools 安装到 lib

我将 setuptools == {verionnumber} 添加到 requirements.txt ,并为我修复了此相关问题。