UPDATE: This is a problem that I encountered with 1.8.0 App Engine SDK on a new installation of OS X 10.8.3.
First of all, there are a bunch of questions about SO with a similar name. I checked them and I do not believe that they answer my question. Basically they recommend getting libsqlite3-dev and rebuilding python to get _sqlite3.so, but this is where it should be:
$ 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
The actual code that makes the Engine Engine SDK try to load this module:
remaining = TaskSetElement.all().filter('taskSet', ts_key).filter('complete', False).count()
Here's the SDK stack trace:
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
I have a bunch of data warehouse code up to this line, which runs fine. I get the same problem running dev_appserver.py directly from the command line or in eclipse with pydev.
From the command line, everything looks good:
$ 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']
>>>
This code fragment (works in the application SDK) removes the application data store code from the equation:
... logging.info("Python Version: %s" % sys.version) logging.info(filter(lambda p: 'lib-dynload' in p, sys.path)) import sqlite3 ...
... logging.info("Python Version: %s" % sys.version) logging.info(filter(lambda p: 'lib-dynload' in p, sys.path)) import sqlite3 ...
He outputs this:
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
Any ideas what the problem is? Thanks,
Colin