2011-01-29 5 views
1

Я получаю «ImportError: Нет модуля с именем simplejson» при попытке получить доступ к администратору хранилища данных на сервере разработки.Ошибка импорта при попытке доступа к sdk datastore admin

После того, как я впервые получил эту ошибку, я установил пакет simplejson из slackbuild (я на Slackware). Кажется, что он работает нормально, я могу импортировать модуль simplejson без ошибок на консоли python.

Но ошибка импорта сохраняется, когда я пытаюсь получить доступ к администратору хранилища данных даже после установки модуля. Перезапуск сервера разработки ничего не сделал.

Что может быть неправильным?

Edit: вот StackTrace:

Traceback (most recent call last):
File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 3245, in _HandleRequest self._Dispatch(dispatcher, self.rfile, outfile, env_dict) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 3186, in _Dispatch base_env_dict=env_dict) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 531, in Dispatch base_env_dict=base_env_dict) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 2410, in Dispatch self._module_dict) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 2320, in ExecuteCGI reset_modules = exec_script(handler_path, cgi_path, hook) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 2216, in ExecuteOrImportScript exec module_code in script_module.dict File "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/datastore_admin/main.py", line 30, in from google.appengine.ext.datastore_admin import copy_handler File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1945, in load_module return self.FindAndLoadModule(submodule, fullname, search_path) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1847, in FindAndLoadModule description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1798, in LoadModuleRestricted description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/datastore_admin/copy_handler.py", line 40, in from google.appengine.ext.datastore_admin import utils File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1945, in load_module return self.FindAndLoadModule(submodule, fullname, search_path) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1847, in FindAndLoadModule description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1798, in LoadModuleRestricted description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/datastore_admin/utils.py", line 35, in from google.appengine.ext.mapreduce import control File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1945, in load_module return self.FindAndLoadModule(submodule, fullname, search_path) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1847, in FindAndLoadModule description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1798, in LoadModuleRestricted description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/mapreduce/control.py", line 26, in from google.appengine.ext.mapreduce import handlers File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1945, in load_module return self.FindAndLoadModule(submodule, fullname, search_path) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1847, in FindAndLoadModule description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1295, in Decorate return func(self, *args, **kwargs) File "/home/lwlun/AppEngine/google_appengine/google/appengine/tools/dev_appserver.py", line 1798, in LoadModuleRestricted description) File "/home/lwlun/AppEngine/google_appengine/google/appengine/ext/mapreduce/handlers.py", line 26, in import simplejson ImportError: No module named simplejson

+0

У вас есть несколько версий Python? –

+0

Насколько я знаю, Slackware уже поставляется с Python. Я никогда не устанавливал другую версию самостоятельно. Как проверить, есть ли у меня несколько версий? –

+0

@David 'ls/usr/bin | grep python' расскажет вам каждую установленную версию. – new123456

ответ

0

Я нашел решение в аналогичный вопрос: ImportError when using Google App Engine

Копирование модуля в каталог приложение работало, но это своего рода чувствует, как дешевый обходной путь.

2

Использование from django.utils import simplejson.

dev_appserver имитирует производственную среду. Ничто, которое вы устанавливаете на системном уровне, не будет доступно для импорта на ваши скрипты, чтобы избежать импорта, работающего нормально в вашем тестировании, а затем неэффективно при развертывании. Однако вам не нужно связывать этот конкретный модуль, потому что он уже доступен в пакете django, установленном для производства (и с SDK).

В общем, вам нужно включить внешние библиотеки в свой каталог приложений, хотя вы можете символизировать их из установленных мест, и они, как правило, будут работать нормально (и будут развернуты для производства при развертывании).

+0

Если он доступен на SDK, почему он дал ошибку импорта? Ошибка была от dev_appserver. –

+0

вам нужна часть 'django.utils'; просто использование 'import simplejson' не будет работать. – geoffspear

+0

Я просмотрел код dev_appserver.py, и там нет «import simplejson». Но есть строка с 'os.path.join (DIR_PATH,' lib ',' simplejson ')', которая была частью объявления списка с несколькими другими модулями. Должен ли я прокомментировать эту строку и добавить «из django.utils import simplejson» в скрипт? Я чувствую, что файлы, которые поставляются вместе с sdk, не следует подделывать. –

0

Если в Lib App Engine SDK в области, например на Mac это

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

скопировать его в директорию приложения будет работать. Это лучше, чем pip install, а затем копировать, что может содержать c-расширение. Модули в пути к SDK (по крайней мере, simplejson), похоже, были модифицированы для работы с потребностями движка приложения.

Смежные вопросы