0

我刚刚从 Python 2.5 迁移到 2.7 运行时,我编写的大多数服务器运行良好。但是我偶尔会看到这个奇怪的堆栈跟踪(为简洁起见,我已经将其砍掉了):

ERROR    2013-04-23 10:40:15,598 wsgi.py:235]
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/jinja2-2.6/jinja2/environment.py", line 894, in render
return self.environment.handle_exception(exc_info, True)
File "templates/querystart.html", line 30, in top-level template code
{% for session in sessions %}
ImportError: No module named _sqlite3

我自己没有导入sqlite3,也不依赖它。调用它的代码非常简单(可能接近于愚蠢的一面):

class UserIdQuery(BaseHandler):
def get(self):
    sessionQuery=Session.all().order("userid")
    template_values = {
        'sessions': sessionQuery,
    }
    self.render_template('querystart.html',**template_values)

以上只是对以下内容的扩展(取自一个非常有用的迁移教程)

class BaseHandler(webapp2.RequestHandler):
@webapp2.cached_property
def jinja2(self):
    return jinja2.get_jinja2(app=self.app)

def render_template(self, filename, **template_args):
    self.response.write(self.jinja2.render_template(filename, **template_args))

任何人都知道什么可能会触发导入错误?谢谢,

4

2 回答 2

1

Appengine 使用 sqlite 作为数据存储,我敢打赌你在 OSX 上安装的 python2.7 缺少 sqlite 二进制库。做一个快速测试,启动一个 python 解释器(在 appengine 之外)并尝试导入 sqlite3

$ python
Python 2.7.3 (default, Sep 26 2012, 21:53:58) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> 

如果失败,您就知道您安装了不完整的 2.7 运行时。

于 2013-04-23T11:11:50.267 回答
0

我遇到了同样的问题并修复了它。

我正在运行从 Ninite.com 安装的 python 2.7.3。

卸载python,直接从python.org下载并安装2.7.5安装程序,问题就消失了。

于 2013-06-03T00:05:10.293 回答