2012-03-06 8 views
1

У меня есть приложение Python 2.7 GAE, которое использует Django 1.2. Все работает нормально.GAE: remote_api_shell.py использует неправильную версию Django

Я пытаюсь использовать remote_api_shell.py, но когда я импортировать мой models.py, я получаю эту ошибку:

$ PYTHONPATH=.; remote_api_shell.py APP 
App Engine remote_api shell 
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] 
The db, users, urlfetch, and memcache modules are imported. 
s~APP> import models 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Users/.../models.py", line 8, in <module> 
    from django.core.validators import email_re 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/core/validators.py", line 13, in <module> 
    from django.utils.translation import gettext, gettext_lazy, ngettext 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/utils/translation/__init__.py", line 3, in <module> 
    if settings.USE_I18N: 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/conf/__init__.py", line 28, in __getattr__ 
    self._import_settings() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/conf/__init__.py", line 53, in _import_settings 
    raise EnvironmentError, "Environment variable %s is undefined." % ENVIRONMENT_VARIABLE 
EnvironmentError: Environment variable DJANGO_SETTINGS_MODULE is undefined. 

Я не знаю, почему он использует Django 0.96 здесь. Тем более, что я думаю, что Python 2.7 поддерживает только Django 1.2. Вот соответствующие части моего app.yaml:

application: APP 
version: prod 
runtime: python27 
api_version: 1 
threadsafe: true 

[...] 

libraries: 
- name: django 
    version: "1.2" 

Если я закомментируйте from django.core.validators import email_re линию, то импорт успешно.

Любая идея, если я делаю что-то неправильно или это ошибка GAE?

ответ

3

Я была такая же проблема, и я решил ее, выполнив эти две строки, как только я открываю удаленный сеанс API:

from google.appengine.dist import use_library 
use_library('django', '1.3') 

Хотя, очевидно, это хак. Число звезд этот вопрос, чтобы поощрить команду App Engine, чтобы исправить это:

https://code.google.com/p/googleappengine/issues/detail?id=8716

+0

Это лучший рубить, чем мой! –

+0

Я нахожу, что дополнительно нужно установить мои настройки Env путь и делать какое-либо дополнение к пути питона, что я бы в противном случае сделать в моем main.py 'импорт SYS, зева ... os.environ [«DJANGO_SETTINGS_MODULE» ] = 'settings' sys.path.append (os.path.join (os.path.dirname (__ file__), 'libs')) ' –

+0

Вы можете установить DJANGO_SETTINGS_MODULE в app.yaml для упрощения. И мне никогда не нужно обновлять путь, не уверен, зачем вам это нужно. Убедитесь, что у вас есть файл __init__.py в каталоге lib. –

1

попробуйте ввести следующее:

import django 
django.VERSION 

Чтобы проверить версию Джанго! Я предполагаю, что консоль python, на которой запущена u, имеет старую версию django!

+0

Да, это дает 0,96! Он импортирует Django из 'google_appengine/lib', который также имеет Django 1.2. Любая идея, как правильно загрузить версию Django по умолчанию? –

+1

Я могу взломать свой путь со следующей строкой, но, надеюсь, есть лучший способ: sys.path.insert (0, "/ Applications/GoogleAppEngineLauncher.app /.../ google_appengine/lib/django_1_2") –

0

FYI это больше не работает, потому что

use_library('django', '1.5') 

Теперь выдает эту ошибку:

ValueError: 1.5 is not a supported version for django; supported versions are ['0.96', '1.0', '1.1', '1.2', '1.3'] 

Надеюсь, это временная проблема, но моим решением было удалить (переименовать):

C:\Program Files (x86)\Google\google_appengine\lib\django-0.96 

что-то еще, тогда правильная версия django загружается без каких-либо других проблем.

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