在Google App Engine上使用couchdbkit(第三方库)

3 投票
2 回答
778 浏览
提问于 2025-04-16 17:05

我在Google App Engine上使用couchdbkit时遇到了一些麻烦。可能是我没有正确导入库,或者是触犯了GAE的Python沙箱规则。有人知道在GAE上使用couchdbkit时是否需要包含restkit吗?(这可能是我遇到一些问题的原因)

这是我的配置:

app.yaml
zapdome.py
couchdbkit/
restkit/

我把zapdome.py简化到了基本功能(连接到我的CouchDB数据库服务器):

#! /usr/bin/env python

import urllib, httplib, datetime
from couchdbkit.schema.base import *
from couchdbkit.schema.properties import *
from couchdbkit.client import Server

USERNAME = ''
PASSWORD = ''

class QuoteEntry(Document):
    name = StringProperty()
    symbol = StringProperty()
    price = StringProperty()
server = Server('https://' + USERNAME + ':' + PASSWORD + '@' + USERNAME + '.cloudant.com/')

这是我记录的错误信息:

E 2011-05-05 20:39:31.309
Traceback (most recent call last):
E 2011-05-05 20:39:31.309
  File "/base/data/home/apps/zapdome/1.350215157753999092/restkit/__init__.py", line 12, in <module>
E 2011-05-05 20:39:31.309
    from .client import Client, MAX_FOLLOW_REDIRECTS
E 2011-05-05 20:39:31.309
  File "/base/data/home/apps/zapdome/1.350215157753999092/restkit/client.py", line 21, in <module>
E 2011-05-05 20:39:31.309
    from httplib import FakeSocket
E 2011-05-05 20:39:31.309
ImportError: cannot import name FakeSocket
E 2011-05-05 20:39:31.309
Traceback (most recent call last):
E 2011-05-05 20:39:31.309
  File "/base/data/home/apps/zapdome/1.350215157753999092/couchdbkit/__init__.py", line 10, in <module>
E 2011-05-05 20:39:31.310
    from .resource import  RequestFailed, CouchdbResource
E 2011-05-05 20:39:31.310
  File "/base/data/home/apps/zapdome/1.350215157753999092/couchdbkit/resource.py", line 25, in <module>
E 2011-05-05 20:39:31.310
    from restkit import Resource, ClientResponse
E 2011-05-05 20:39:31.310
ImportError: cannot import name Resource
E 2011-05-05 20:39:31.310
<type 'exceptions.SyntaxError'>: 'import *' not allowed with 'from .' (__init__.py, line 159)
Traceback (most recent call last):
  File "/base/data/home/apps/zapdome/1.350215157753999092/zapdome.py", line 4, in <module>
    from couchdbkit.schema.base import * 

由于它在处理httplib.FakeSocket和restkit.Resource时出现问题,我开始怀疑我可能超出了GAE允许的范围。有人有什么想法吗?谢谢。

2 个回答

0

在这个情况下,问题看起来是因为导入的写法不对,而不是因为沙箱规则。它在抱怨是因为你在用“import * from base”,然后又试图从“.resource”导入。Python 2.5不允许用相对路径来做“import *”。

你可以试着把“import *”改成只导入你真正需要的东西,比如“Document”。

1

我不太想自己回答自己的问题,但看起来我是在尝试做一些超出GAE的Python沙箱限制的事情。我觉得是和socket相关的内容出了问题。好心的Cloudant的朋友们给我推荐了这个Quora的回答,里面介绍了更多适合Python/Django的托管选择。

顺便说一下,我选择了WebFaction,在一个小时内就把一切搞定了,而我可不是系统管理员(不过他们不提供免费的托管方案)。

撰写回答