#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, но работает.