访问SDK数据存储管理员时出现导入错误

1 投票
3 回答
786 浏览
提问于 2025-04-16 10:51

我在开发服务器上尝试访问数据存储管理时,遇到了“ImportError: No module named simplejson”的错误。

第一次出现这个错误后,我从slackbuilds安装了simplejson这个包(我用的是Slackware)。看起来一切正常,我在Python控制台中可以顺利导入simplejson模块,没有任何错误。

但是,当我尝试访问数据存储管理时,导入错误依然存在,即使我已经安装了这个模块。重启开发服务器也没有解决问题。

这可能是什么原因呢?

补充:这是错误的详细信息:

追踪信息(最近的调用在最前面):
文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第3245行,在 _HandleRequest self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第3186行,在 _Dispatch base_env_dict=env_dict) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第531行,在 Dispatch base_env_dict=base_env_dict) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第2410行,在 Dispatch self._module_dict) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第2320行,在 ExecuteCGI reset_modules = exec_script(handler_path, cgi_path, hook) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第2216行,在 ExecuteOrImportScript exec module_code in script_module.dict 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/datastore_admin/main.py", 第30行,在 from google.appengine.ext.datastore_admin import copy_handler 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1945行,在 load_module return self.FindAndLoadModule(submodule, fullname, search_path) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1847行,在 FindAndLoadModule description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1798行,在 LoadModuleRestricted description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/datastore_admin/copy_handler.py", 第40行,在 from google.appengine.ext.datastore_admin import utils 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1945行,在 load_module return self.FindAndLoadModule(submodule, fullname, search_path) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1847行,在 FindAndLoadModule description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1798行,在 LoadModuleRestricted description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/datastore_admin/utils.py", 第35行,在 from google.appengine.ext.mapreduce import control 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1945行,在 load_module return self.FindAndLoadModule(submodule, fullname, search_path) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1847行,在 FindAndLoadModule description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1798行,在 LoadModuleRestricted description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/mapreduce/control.py", 第26行,在 from google.appengine.ext.mapreduce import handlers 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1945行,在 load_module return self.FindAndLoadModule(submodule, fullname, search_path) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1847行,在 FindAndLoadModule description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1295行,在 Decorate return func(self, *args, **kwargs) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", 第1798行,在 LoadModuleRestricted description) 文件 "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/mapreduce/handlers.py", 第26行,在 import simplejson 导入错误:没有名为simplejson的模块

3 个回答

0

如果它在应用引擎SDK的库里面,比如在Mac上,它的位置是:

/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/

把它复制到你的应用目录里就可以用了。这样做比先用pip安装再复制要好,因为后者可能包含一些C扩展。而SDK库路径里的模块(至少像simplejson这样的模块)似乎已经被修改过,以适应应用引擎的需求。

2

使用 from django.utils import simplejson

dev_appserver 模拟了生产环境。这意味着你在系统级别安装的任何东西都无法在你的脚本中使用,目的是为了避免在测试时一切正常,但在上线时却出现问题。不过,你不需要把这个特定的模块打包,因为它已经在生产环境中安装的 django 包里了(还有 SDK 里)。

一般来说,你确实需要把外部库放在你的应用程序目录里,虽然你可以从它们安装的位置创建一个符号链接,这样通常也能正常工作(并且在你上线时会被一起部署)。

0

我在一个类似的问题中找到了一个解决办法:使用Google App Engine时出现ImportError

把这个模块复制到应用程序的目录下可以解决问题,但感觉这有点像是个简单的临时解决办法。

撰写回答