2014-03-26 45 views
1

當我嘗試谷歌雲終端集成到現有的項目中,我得到這個錯誤:如何將Python的Google雲端點與現有的GAE項目集成?

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]) 
+1

你沒有真正提供足夠的信息給人們做任何事情,而不是猜測。例如,您是否在app.yaml中啓用了端點,app.yaml中的處理程序是什麼樣的...... –

+0

上述上下文指出已將端點添加到app.yaml文件中。我將所有「/ _ah/api/explorer」鏈接路由爲使用endpoints_api.py而不是main.py.添加app.yaml和 – Orane

+0

以上的處理程序示例爲什麼您的應用程序是上層? –

回答

0

您必須使用最新版本的Google Cloud SDK運行您的項目。

切換到項目文件夾,並通過以下命令來運行它:

dev_appserver.py .

+0

端點API與其自己的app.yaml文件一起工作,但在與現有項目集成時不會運行。將更新應用引擎sdk並回報。 – Orane

1

我得到了同樣的錯誤與OS X的最新的AppEngine SDK 40年9月1日的endpoints模塊不是在Python模塊搜索路徑中,因此當您的代碼運行import endpoints時,它會因導入錯誤而失敗。

即使使用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" 
相關問題