Google App Engine (Python): ImportError нет модуля с именем django - PullRequest
2 голосов
/ 02 апреля 2010

Поэтому я пытаюсь использовать шаблонизатор django 1.1 с каркасом веб-приложения google app engine, начиная с здесь . Это на Ubuntu Jaunty, я убедился, что PYTHONPATH содержит местоположение Django-1.1.1, но я получаю эту ошибку «ImportError: нет модуля с именем django», когда он пытается выполнить строку use_library () ниже. Опять же, кто-нибудь может мне помочь? Я в тупике.

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from google.appengine.dist import use_library
use_library('django', '1.1')

Ответы [ 2 ]

3 голосов
/ 20 сентября 2010

Придумали следующее решение:

Получите django 1.1 и поместите его в корневой каталог своего проекта.

Добавьте пустой файл "non_gae_indicator" в корневую папку вашего проекта.

Добавьте django и non_gae_indicator в ваш app.yaml элемент skip_files:

skip_files:
- ^(.*/)?app\.yaml
- ^(.*/)?app\.yml
- ^(.*/)?index\.yaml
- ^(.*/)?index\.yml
- ^(.*/)?#.*#
- ^(.*/)?.*~
- ^(.*/)?.*\.py[co]
- ^(.*/)?.*/RCS/.*
- ^(.*/)?\..*
- ^(.*/)?.*\.bak$
- ^django
- ^non_gae_indicator

Теперь у нас есть способ узнать, работаем ли мы под GAE-sdk или вживую - поскольку non_gae_indicator не будет доступен, когда мы живы.

Так что в main.py вы можете сделать:

if not os.path.exists(os.path.abspath(os.path.dirname(__file__)) + '/non_gae_indicator'):
    # GAE
    from google.appengine.dist import use_library
    use_library('django', '1.1')
else:
    # Not GAE - Add our django package to the path
    sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)) + '/django')

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

0 голосов
/ 24 мая 2010

@ stallarida - проблема в том, что .96 поставляется с SDK по умолчанию. В конце концов, я сделал грязный хак, но работает, чтобы обновить версию django в каталоге appengine до версии 1.1. Работал нормально, нужно немного подправить между разработкой и производством. В частности, я должен был закомментировать use_library('django', '1.1') при локальном запуске, но включить его при загрузке моего приложения.

Я уверен, что есть лучшее решение, и я разберусь с ним, когда улучшится мой опыт работы с Linux.

...