Python OS X AppEngine-导入错误:没有名为_sqlite3的模块

Python OS X AppEngine-导入错误:没有名为_sqlite3的模块,python,google-app-engine,Python,Google App Engine,更新:这是我在新安装的OS X 10.8.3上使用1.8.0 App Engine SDK时遇到的问题 首先,这里有一大堆问题,题目很相似。我已经查过了,我不相信他们回答了我的问题。大多数情况下,他们建议获得libsqlite3 dev并重建python以获得_sqlite3.so,但这已经是应该的了: $ find / -name _sqlite3.so Password: ... /System/Library/Frameworks/Python.framework/Versions/2.5

更新:这是我在新安装的OS X 10.8.3上使用1.8.0 App Engine SDK时遇到的问题

首先,这里有一大堆问题,题目很相似。我已经查过了,我不相信他们回答了我的问题。大多数情况下,他们建议获得libsqlite3 dev并重建python以获得_sqlite3.so,但这已经是应该的了:

$ find / -name _sqlite3.so Password: ... /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/_sqlite3.so /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/_sqlite3.so /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_sqlite3.so 以下是SDK堆栈跟踪:


  File "~/dev/myApp/myApp/task.py", line 90, in completeTaskSetElement
    remaining = TaskSetElement.all().filter('taskSet', ts_key).filter('complete', False).count()
  File "~/dev/GAE/google_appengine/google/appengine/ext/db/__init__.py", line 2133, in count
    result = raw_query.Count(limit=limit, **kwargs)
  File "~/dev/GAE/google_appengine/google/appengine/api/datastore.py", line 1698, in Count
    batch = self.GetBatcher(config=config).next()
  File "~/dev/GAE/google_appengine/google/appengine/datastore/datastore_query.py", line 2754, in next
    return self.next_batch(self.AT_LEAST_ONE)
  File "~/dev/GAE/google_appengine/google/appengine/datastore/datastore_query.py", line 2791, in next_batch
    batch = self.__next_batch.get_result()
  File "~/dev/GAE/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 604, in get_result
    return self.__get_result_hook(self)
  File "/Users/colin/dev/GAE/google_appengine/google/appengine/datastore/datastore_query.py", line 2528, in __query_result_hook
    self._batch_shared.conn.check_rpc_success(rpc)
  File "~/dev/GAE/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1222, in check_rpc_success
    rpc.check_success()
  File "~/dev/GAE/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 570, in check_success
    self.__rpc.CheckSuccess()
  File "/Users/colin/dev/GAE/google_appengine/google/appengine/api/apiproxy_rpc.py", line 156, in _WaitImpl
    self.request, self.response)
  File "~/dev/GAE/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 200, in MakeSyncCall
    self._MakeRealSyncCall(service, call, request, response)
  File "~/dev/GAE/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 234, in _MakeRealSyncCall
    raise pickle.loads(response_pb.exception())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1382, in loads
    return Unpickler(file).load()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1090, in load_global
    klass = self.find_class(module, name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1124, in find_class
    __import__(module)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/__init__.py", line 24, in 
    from dbapi2 import *
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/dbapi2.py", line 27, in 
    from _sqlite3 import *
  File "~/dev/GAE/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 856, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named _sqlite3
在这一行之前,我有一堆数据存储代码,执行得很好。直接从命令行运行dev_appserver.py或在eclipse中使用pydev运行dev_appserver.py也会遇到同样的问题。

从命令行中,一切看起来都很好:

$ python Python 2.7.2 (default, Oct 11 2012, 20:14:37) [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sqlite3 >>> import _sqlite3 >>> import sys >>> print(sys.path) ['', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages'] >>> 它的输出是:

INFO 2013-05-26 05:55:12,055 main.py:38] Python Version: 2.7.2 (default, Oct 11 2012, 20:14:37) [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] INFO 2013-05-26 05:55:12,055 main.py:40] ['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload'] ERROR 2013-05-26 05:55:12,058 cgi.py:121] Traceback (most recent call last): File "main.py", line 42, in import sqlite3 File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/__init__.py", line 24, in from dbapi2 import * File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/dbapi2.py", line 27, in from _sqlite3 import * File "~/dev/GAE/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 856, in load_module raise ImportError('No module named %s' % fullname) ImportError: No module named _sqlite3 INFO 2013-05-2605:55:12055 main.py:38]Python版本:2.7.2(默认,2012年10月11日,20:14:37) [GCC 4.2.1兼容Apple Clang 4.0(标签/Apple/Clang-418.0.60)] INFO 2013-05-2605:55:12055 main.py:40]['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib dynload'] 错误2013-05-2605:55:12058 cgi.py:121]回溯(最近一次呼叫最后一次): 文件“main.py”,第42行,在 导入sqlite3 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/_init__.py”,第24行,在 从dbapi2导入* 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/dbapi2.py”,第27行,在 从_sqlite3导入* 文件“~/dev/GAE/google\u appengine/google/appengine/tools/devappserver2/python/sandbox.py”,第856行,在load\u模块中 引发导入错误('没有名为%s“%fullname”的模块) ImportError:没有名为_sqlite3的模块 你知道问题出在哪里吗?谢谢


Colin

从堆栈跟踪中,它显示您正试图在main.py中导入sqlite

你为什么这么做


appengine不支持导入sqlite。sqlite是用二进制库实现的,您不能只导入任何旧的二进制文件。此外,文件系统是只读的,您无法写入sqlite db。

看起来像是在sandbox.py第742行的
\u WHITE\u LIST\u C\u MODULES
列表中添加了
“u sqlite3”
(位于我机器上的
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine default.bundle/Contents/Resources/google\u appengine/google/appengine/tools/devappserver2/python
)现在已经为我工作了

在我未受过教育的眼中,似乎
CModuleImportHook
错误地阻止了_sqlite3的导入,修改任何一个必须返回
None
的检查都会删除错误。有更多理智的人-请详细说明我所说的或纠正我


该更改可能允许您在自己的代码中导入_sqlite3,这将是一个错误。也许它需要一种方法将导入限制为dbapi2.py?

您提到这是一个新安装的OSX。我想知道您是否使用自制来构建Python?进行Brew更新或Brew升级会给我带来类似的问题,尽管不是在GAE上。您可能会nd有用。

据我所知,本地开发服务器中的数据存储是使用SQLite实现的,因此导入是在App Engine代码中进行的,而不是在他自己的代码中进行的(请参阅问题中的最后一个代码片段).Correct-App engine在sdk中导入sqlite以支持开发数据存储-这是我在开发环境中遇到的一个问题。在我自己的代码中导入只是为了演示该问题(不适用于生产部署),打印出python版本,并显示路径包含在我的运行时环境中应该包含的内容。我的测试代码是在首先查看应用程序引擎代码后生成的-即,我导入相同的内容以生成相同的错误。我修改了问题,将SDK问题放在首位,并包含了来自应用程序引擎的堆栈跟踪,以及从我的演示代码中。我发现了这个问题,这可能与以下问题有关:-3月26日和4月27日对同一问题的评论。包括一个小stacktrace,在第42行显示sqlite的显式导入确实令人困惑。也许-目的是强调问题似乎与数据存储无关。通常在询问时对于一个问题,建议是构造一个简单的案例来演示这个问题。希望我已经对这个问题进行了充分的编辑,以避免进一步的混淆。太好了!我正在通过eclipse运行linux GAE SDK发行版,但解决方案在那里也运行得很好-感谢您的帮助,非常感谢。很高兴提供帮助。这个问题也困扰了我很多年了!

...
logging.info("Python Version: %s" % sys.version)
logging.info(filter(lambda p: 'lib-dynload' in p, sys.path))

import sqlite3
...
INFO 2013-05-26 05:55:12,055 main.py:38] Python Version: 2.7.2 (default, Oct 11 2012, 20:14:37) [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] INFO 2013-05-26 05:55:12,055 main.py:40] ['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload'] ERROR 2013-05-26 05:55:12,058 cgi.py:121] Traceback (most recent call last): File "main.py", line 42, in import sqlite3 File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/__init__.py", line 24, in from dbapi2 import * File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sqlite3/dbapi2.py", line 27, in from _sqlite3 import * File "~/dev/GAE/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 856, in load_module raise ImportError('No module named %s' % fullname) ImportError: No module named _sqlite3