Как динамически импортировать модуль в App Engine? - PullRequest
1 голос
/ 21 декабря 2010

Я пытаюсь динамически загрузить класс из определенного модуля (так называемые «команды»), и код работает на моей локальной установке с локального сервера Django.Это взрывает, когда я развернуть в Google App Engine.Я попытался добавить родительский модуль команд к import , но безрезультатно (в любом случае в любом случае).Вот код:

mod = __import__('commands.%s' % command, globals(), locals(), [command])
return getattr(mod, command)

App Engine просто генерирует ошибку ImportError при каждом попадании в нее.

И поясните, что это не бомбит модуль команд.Если у меня есть такая команда, как 'commands.cat', она не может найти 'cat'.

Ответы [ 4 ]

1 голос
/ 23 декабря 2010

Я получал ошибки импорта при импорте таким образом, когда моя папка / пакет назывался «команды».Я переименовал пакет в «cmds», и все заработало.Я предполагаю, что был конфликт со встроенным именем "команды".Кроме того, я не знаю, имеет ли это значение, но я только передал значение параметра name при вызове import :

__import__('cmds.' + command_name)
0 голосов
/ 23 мая 2012

Возможно, вы захотите посмотреть mapreduce.util.for_name , который позволяет динамически импортировать класс / функцию / метод .Обещаю :) Я заверну это в блоге.

0 голосов
/ 21 декабря 2010

Моя платформа AppEngine MVCEngine динамически импортирует классы контроллеров.Фактический код в контексте можно просмотреть на Google Code .

Вкратце, вот как я это делаю:

controller_name = "foo"
controller_path = "app/controllers/%s_controller.py" % controller_name
controller = __import__(controller_path)
controllerClass = classForName(controller_name, namespace=controller.__dict__)

и функция classForName:

def classForName(name, *args, **kw):
    ns = kw.get('namespace',globals())
    return ns[name](*args)

Я не читал статью Ника о Lazy Loading, на которую ссылались выше, но он в значительной степени авторитет в AppEngine, и он лучше меня понимает (крайне важную) производительностьхарактеристики различных подходов к кодированию для AppEngine.Обязательно прочитайте его статью.

0 голосов
/ 21 декабря 2010

Ник Джонсон из команды AppEngine написал сообщение в блоге на эту тему, которое может помочь вам:

Веб-приложения в App Engine, часть 6: отложенная загрузка

Целую партию из них рекомендуется прочитать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...