导入错误:没有名为 _sqlite3 的模块
我正在为谷歌的应用引擎写代码,但在本地测试时遇到了以下错误:
--> --> -->
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3185, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3128, in _Dispatch
base_env_dict=env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 515, in Dispatch
base_env_dict=base_env_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2387, in Dispatch
self._module_dict)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2297, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2193, in ExecuteOrImportScript
exec module_code in script_module.__dict__
File "C:\Users\Chris Reade\Documents\SI 182\Final\geneticsalesman\Final.py", line 7, in <module>
from pyevolve import DBAdapters
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1922, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1824, in FindAndLoadModule
description)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1775, in LoadModuleRestricted
description)
File "C:\Users\Chris Reade\Documents\SI 182\Final\geneticsalesman\pyevolve\DBAdapters.py", line 21, in <module>
import sqlite3
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1922, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1824, in FindAndLoadModule
description)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1775, in LoadModuleRestricted
description)
File "C:\Python26\lib\sqlite3\__init__.py", line 24, in <module>
from dbapi2 import *
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1922, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1824, in FindAndLoadModule
description)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1272, in Decorate
return func(self, *args, **kwargs)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 1775, in LoadModuleRestricted
description)
File "C:\Python26\lib\sqlite3\dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: No module named _sqlite3
我的Python环境里有一个关于sqlite3的库文件,但我不知道为什么它找不到这个文件。任何帮助都将非常感谢。
2 个回答
0
当你第一次想在 App Engine 上使用 sqlite3 时,它会试图给你报错。这并不是因为本地的 App Engine 不允许使用 sqlite3 作为替代数据库,而是因为 sqlite3 在生产环境中不被支持。所以,App Engine 是在尽力让你不要使用 sqlite3,以免你在部署应用时搞错了。
如果你想在本地的 App Engine 中使用 sqlite3,你需要把 sqlite3 加入白名单,步骤如下:
首先,去到C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\python\runtime\sandbox.py这个文件夹。
打开这个文件,你会看到一个叫做 _WHITE_LIST_C_MODULES 的常量变量,内容是:
_WHITE_LIST_C_MODULES = [
'array',
'_ast',
'binascii',
'_bisect',
.
.
.,
]
然后,按照下面的方式添加 sqlite3:
_WHITE_LIST_C_MODULES = [
'array',
'_ast',
'binascii',
'_bisect',
.
.
.,
_sqlite3,
]
希望这对你有帮助。
1
App Engine SDK会努力让你在导入模块时发现错误,这些错误在真正的App Engine(也就是谷歌的服务器上)会出现。因为SQlite在真正的服务器上是不被支持的,所以SDK给你提示错误,其实就是在友好地告诉你:“你无法把这段代码部署到真正的谷歌App Engine服务器上!”