Модификация Sys.path или более сложная проблема? - PullRequest
4 голосов
/ 30 августа 2010

У меня проблемы с правильным импортом модуля на appengine. Мое приложение обычно использует django с app-engine-patch, но эта часть - очереди задач, использующие только среду webapp.

Мне нужно импортировать настройки django для правильной работы приложения.

Мой скрипт начинается с:

import os
import sys
sys.path.append('common/')
# Force Django to reload its settings.
from django.conf import settings
settings._target = None

# Must set this env var before importing any part of Django
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

Я всегда получаю эту ошибку или что-то связанное:

<type 'exceptions.ImportError'>: No module named ragendja.settings_pre

потому что файл settings.py начинается с

from ragendja.settings_pre import *

Я думаю, мне нужно снова добавить ragendja в sys.path, но у меня было несколько попыток, которые не сработали.

Вот мой каталог:

project/
    app.yaml
    setting.py
    common/
        appenginepatch/
            ragendja/
                setting_pre.py
    myapp/
        script.py 

Это только проблема sys.path и как мне нужно изменить ее с правильным синтаксисом?

Спасибо

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

Патч движка приложения внутренне манипулирует sys.path. Фоновые задачи обходят этот код, поэтому ваш путь не будет готов для вызовов Django. У вас есть два варианта:

  • Исправьте пути вручную. Документация движка приложения (см. Подраздел «Обработка импорта пути») предлагает включить код манипуляции пути в модуль, который может быть импортирован вашим скриптом задачи.

  • Устранить зависимости от кода django, если это возможно. Если вы можете написать свою задачу, чтобы быть чистым Python и / или Google Api звонки, вы можете пойти. В вашем случае это может означать рефакторинг кода настроек.

0 голосов
/ 30 августа 2010

Почему бы и нет:

sys.path.append('common/appenginepatch')

, поскольку ragendja находится в этом каталоге?

...