我正在尝试从本地机器连接到谷歌应用程序引擎数据存储。我花了一整天的时间钻研这件事,但没有任何运气。
我已经尝试了这里的方法(以及许多其他的建议,如使用gcloud-python在GAE和无法运行dev_appserver.py与gcloud):
运行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
我在这里做错了什么?
google-cloud
库不能在App Engine上工作,而且很可能你甚至不需要这样做,因为你可以使用内置功能。
在官方文档中你可以这样使用它:
import cloudstorage as gcs
我是这样解决的:-
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的实体,具有属性name和age。不要忘记指定正确的项目id。
老问题,但这可能值得包括:
我不确定你的requirements.txt文件的状态,但我搜索了一下我的文件,注意到setuptools不包括。
pip freeze
不导出setuptools相关问题
假设您遵循本教程,除了setuptools到lib,您可能已经安装了这些库。
我添加了setuptools=={verionnumber}到requirements.txt,这为我修复了这个相关的问题。