Пирамида 1.2 в Google App Engine вызывает ошибку импорта

#python #google-app-engine #pylons #pyramid

#python #google-app-engine #пилоны #пирамида

Вопрос:

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

 <type 'exceptions.ImportError'>: cannot import name BaseRequest
Traceback (most recent call last):
  File "/base/data/home/apps/.../0-0-1.353634463095353211/main.py", line 9, in <module>
    from pyramid.config import Configurator
  File "/base/data/home/apps/.../0-0-1.353634463095353211/lib/dist/pyramid/__init__.py", line 1, in <module>
    from pyramid.request import Request
  File "/base/data/home/apps/.../0-0-1.353634463095353211/lib/dist/pyramid/request.py", line 6, in <module>
    from webob import BaseRequest
  

Вероятно, это вызвано тем фактом, что GAE использует WebOb 0.9, в то время как Pyramid использует WebOb 1.1 (он находится lib/dist/webob в моем проекте), поскольку BaseRequest отсутствует в 0.9.

В main.py файле есть этот фрагмент:

 sys.path.insert(0,'lib/dist')
  

но, похоже, это помогает только для случая с сервером разработки. Есть ли способ заставить среду выполнения GAE использовать версию 1.1, включенную в мое приложение?

Ответ №1:

Само по себе это не решение, но мы собираемся выпустить новую среду выполнения Python, Python 2.7, которая включает обновленные версии библиотек, включая webob 1.1. Возможно, вы могли бы настроить свое приложение на это, а не на время выполнения 2.5?

Комментарии:

1. @bdonlan Мы объявили, что это будет частью 1.5.5, и мы только что выпустили предварительный просмотр / предварительный выпуск для этого. Предварительные версии обычно предлагаются за пару недель до месяца до общего выпуска.

Ответ №2:

Помимо обновления во время выполнения, я нашел другое обходное решение. Я переименовал модуль WebOb 1.1 из webob в webobx и сделал ссылку pyramid на переименованный webobx модуль. Не очень элегантно, и его придется повторить, если я смогу обновить pyramid, но работает.