googleappengine установить pubd

Я хочу отлаживать свое приложение Python в движке приложений Google с помощью pudb. Я установил buildout без использования virtualenv и создал для него файл конфигурации buildout.cfg:

[buildout]
develop = .
parts =
    python
    app
    pudb
    nosetests
    zipsymlink

eggs =
    gaeapp

unzip = true

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}

[app]
recipe = rod.recipe.appengine
url = https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.11.zip
server-script = dev_appserver
src = ${buildout:directory}/src/gaeapp
exclude = tests
zip-packages = True

[pudb]
recipe = zc.recipe.egg
eggs =
    gaeapp
    pudb

[nosetests]
recipe = zc.recipe.egg
eggs =
    NoseGAE
    WebTest
    gaeapp
    nose

extra-paths =
    ${buildout:directory}/etc
    ${buildout:directory}/parts/google_appengine
    ${buildout:directory}/parts/google_appengine/lib/antlr3
    ${buildout:directory}/parts/google_appengine/lib/fancy_urllib
    ${buildout:directory}/parts/google_appengine/lib/ipaddr
    ${buildout:directory}/parts/google_appengine/lib/webob_1_1_1
    ${buildout:directory}/parts/google_appengine/lib/webapp2/
    ${buildout:directory}/parts/google_appengine/lib/yaml/lib

interpreter = python

[zipsymlink]
recipe = svetlyak40wt.recipe.symlinks
path = ${app:src}
files = ${app:app-directory}/packages.zip

# Tools and dependencies
svetlyak40wt.recipe.symlinks = 0.2.1

Мое приложение.yaml:

application: gaeapp
runtime: python27
threadsafe: true
api_version: 1

handlers:
- url: /_ah/spi/.*
  script: gae_api.APPLICATION

libraries:
- name: pycrypto
  version: latest

- name: endpoints
  version: 1.0

- name: setuptools
  version: latest

- name: webob
  version: latest

- name: webapp2
  version: latest

builtins:
- deferred: on

Мой setup.py:

from setuptools import setup, find_packages

setup(
    name = "gaeapp",
    version = "1.0",
    url = 'http://github.com/blabla/gaeapp',
    license = 'BSD',
    description = "Just a test GAE app.",
    author = 'WOW',
    packages = find_packages('src'),
    package_dir = {'': 'src'},
    install_requires = ['setuptools', 'pudb']
)

Все установилось, носовые тесты и devappserver работают. Запустить сервер:

bin/devappserver parts/app

Я пытаюсь использовать pudb в коде:

import pudb; pudb.set_trace();

И просто увидеть такую ​​​​ошибку:

ImportError: No module named pudb

Есть ли способы использовать pudb с приложениями GAE?


person Igor Komar    schedule 22.09.2014    source источник


Ответы (1)


Вам нужно указать rod.recipe.appengine, какие яйца копировать:

packages =
    pudb
    urwid
person Martijn Pieters    schedule 22.09.2014
comment
Я только что попробовал, после того, как я запустил bin/buildout, и это не помогло, возникла та же ошибка. - person Igor Komar; 23.09.2014
comment
что находится в каталоге parts/app? Можете ли вы также просмотреть zip-файл, созданный для библиотек? - person Martijn Pieters; 23.09.2014
comment
Ну конечно; естественно. Если я напишу в части app только этот код, как вы сказали eggs = gaeapp, структура parts/app будет следующей: gaeapp - копия моего проекта. Иначе, если я напишу в части app это eggs = gaeapp, pudb, то parts/app будет: gaeapp - копия моего проекта, EGGS-INFO , packages.zip - есть файл pkg_resources.py, в котором: def _dummy_func(*args): pass declare_namespace = _dummy_func resource_filename = _dummy_func - person Igor Komar; 23.09.2014
comment
@kazantip: и это полное содержимое packages.zip? Тогда зависимость не была скопирована. Попробуйте явно добавить pudb в список яиц. - person Martijn Pieters; 23.09.2014
comment
хорошо, я добавил pudb в список app -> eggs, packages.zip не изменился. - person Igor Komar; 23.09.2014
comment
@kazantip: следующий вариант: packages = pudb. - person Martijn Pieters; 23.09.2014
comment
Добавил packages = pudb и в packages.zip появилась папка packages, в которой лежит pudb. Сейчас import pudb есть - ок, но когда пишу pudb.set_trace() =› у меня следующая ошибка File "packages.zip/pudb/debugger.py", line 5, in <module> ImportError: No module named urwid - person Igor Komar; 23.09.2014
comment
@kazantip: так что urwid - это еще одна зависимость, которую вам нужно добавить. - person Martijn Pieters; 23.09.2014
comment
@kazantip: Лично я вместо этого использую appfy.recipe.gae; дает мне больше контроля над тем, что включено, так как я могу указать в app.yaml, что не загружать (например, исключить инструменты отладки и локальные библиотеки, локальные копии которых есть у GAE). - person Martijn Pieters; 23.09.2014
comment
Извините, но я действительно не знаю, почему движок приложения Google теперь выдает такую ​​​​ошибку: google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 886, in load_module ImportError: No module named termios. Думаю, это странно - person Igor Komar; 23.09.2014
comment
Вы развертываете библиотеку отладчика, которая зависит от доступа к терминалу. В GAE нет терминала, а это значит, что нет и специфичных для терминала библиотек, таких как termios. - person Martijn Pieters; 23.09.2014
comment
да, но эта ошибка отображается локально на сервере разработки, я не развертывал ее в облаке. - person Igor Komar; 23.09.2014
comment
Но сервер разработки пытается точно воспроизвести для вас серверную среду. Это включает в себя скрытие библиотек stdlib, недоступных в GAE. - person Martijn Pieters; 23.09.2014
comment
Итак, большое спасибо, теперь я буду знать, что невозможно использовать удобный отладчик при разработке приложений GAE. - person Igor Komar; 23.09.2014