当我尝试将google云端点集成到现有项目中时,我收到此错误:
ImportError: No module named endpoints
我已经在我的app.yaml文件中添加了端点。端点api文件在外部使用自己的app.yaml文件,但在项目目录中运行时会出错。为简单起见,我将所有api调用路由到“endpoints_api.py”。也许我错过了什么。
这是我的目录设置:
-project
-handlers
-media
-templates
-webapp2_extras
__init__.py
app.yaml
main.py
endpoints_api.py
这是我的app.yaml文件:
application: project-aplha
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
# Endpoints Api
- url: /_ah/spi/.*
script: endpoints_api.APPLICATION
- url: /favicon\.ico
static_files: media/favicon.ico
upload: media/favicon.ico
- url: /media
static_dir: media
# Main Script
- url: /.*
script: main.APPLICATION
libraries:
- name: endpoints
version: 1.0
- name: webapp2
version: latest
- name: jinja2
version: latest
- name: pycrypto
version: latest
处理程序类的示例(如果重要):
class SignupHandler(base.BaseHandler):
def get(self):
return self.render_template('sighup.html')
def post(self):
name = self.request.get('name')
email = self.request.get('email')
password = self.request.get('password')
也许是endpoints_api.py文件:
import endpoints
from google.appengine.ext import ndb
from protorpc import messages
from protorpc import message_types
from protorpc import remote
class Task(messages.Message):
name = messages.StringField(1, required=True)
owner = messages.StringField(2)
class TaskModel(ndb.Model):
name = ndb.StringProperty(required=True)
owner = ndb.StringProperty()
@endpoints.api(name='tasks', version='v1',
description='API for Task Management')
class TaskApi(remote.Service):
@endpoints.method(Task, Task,
name='task.insert',
path='task',
http_method='POST')
def insert_task(self, request):
TaskModel(name=request.name, owner=request.owner).put()
return request
APPLICATION = endpoints.api_server([TaskApi])
答案 0 :(得分:1)
我在OS X上遇到与最新的AppEngine SDK 1.9.40相同的错误。endpoints
模块不在Python模块搜索路径中,因此代码运行时import endpoints
,它因ImportError而失败。
即使使用GUI GoogleAppEngineLauncher运行,该模块也未被引用。
在OS X上,模块位于/usr/local/google_appengine/lib/endpoints-1.0/endpoints
。您可以通过将其添加到PYTHONPATH然后从解释器运行import endpoints
来验证这一点。这应该有效,虽然它会失败,因为它有一个内部引用`protorpc'。
不幸的是,在命令行中,dev_appserver.py
无法引用PYTHONPATH,因此您继续使用以下命令获取ImportError:
dev_appserver.py --datastore_path=datastore.db .
为了记录,我将其包含在我的app.yaml
:
libraries:
- name: ssl
version: latest
- name: webapp2
version: "2.5.2"
- name: jinja2
version: latest
- name: pycrypto
version: "2.6"
- name: endpoints
version: "1.0"
答案 1 :(得分:0)
您必须使用最新版本的Google Cloud SDK运行项目。
切换到项目文件夹并通过以下命令运行它:
dev_appserver.py .