Pull to refresh

Comments 26

На следующей строке заголовка ожидалось «и профилирование Python» :)
Есть еще django-devserver от того-же разработчика что и Sentry сделал — Дэвида Крамера из Disqus.
Точно! Совсем про него забыл. Хорошее дополнение к статье, спасибо!

Девид вообще молодец, пишет замечательные проекты, его выступления на конференциях одни из лучших.
UFO just landed and posted this here
Не буду спорить, всё может быть =)
Когда-то я недоумевал, как можно работать в OS X, ведь линукс намного круче, но сейчас сижу за макбуком и не понимаю, как может быть иначе.
К списку IDE можно добавить Wing IDE. Там быстрый графический отладчик, который корректно работает с библиотекой matplotlib.
Спасибо за дополнение, добавил ссылку на Wing IDE в статью.
А как именно можно некорректно работать с библиотекой matplotlib?
Цикл обработки сообщений matplotlib не позволяет продолжать (блокирует) выполнение кода после вызова show(). Интерактивный режим не работает, после завершения исполняемого процесса python, все фигуры matplotlib'а закрываются. В IPython и Wing IDE эту проблему обошли, там цикл обработки сообщений matplotlib'а выполняется независимо, то есть аналогично тому как это сделано в Matlab. В PyCharm с этой проблемой делать ничего в ближайшее время не собираются, что очень печально.
Вы вроде имеете отношение к разработке PTVS, как там с этим дело обстоит?
А, понял, о чем вы.

В PTVS есть «IPython REPL» — как можно догадаться из названия, под капотом там IPython + pylab, а графика отображается непосредственно в окне REPL, так что show не нужен:

PTVS IPython REPL
В режиме отладки это тоже работает? То есть, я могу поставить точку остановки в коде после вывода графика (plot), например, с tk/qt бэкендом, а затем добавить на созданные оси новый график прямо из REPL, вызвав ещё раз функцию plot()?
В режиме отладки REPL только обычный, поэтому там графики непосредственно отображаться не будут, и нужен show. Но можно остановиться внутри show (без брейкпоинта, просто нажать паузу в отладчике — окно графика на это время замерзнет), сделать новый plot в REPL, и запустить выполнение дальше, чтобы новый график отобразился в окне.
А можно чуть подробнее про Sentry? Правильно ли я понимаю, что вы подняли свой сервер Sentry и шлете данные в него, а не пользуетесь их платной подпиской? Нужна ли лицензия в таком случае?
Сколько данных прокачиваете в Sentry и на каком сервере?
Да, мы подняли sentry на своём сервере, это совсем не сложно. Кроме того, политика нашей компании запрещает отправлять любые внутренние данные наружу, в сторонние сервисы.

Не совсем понял, о какой лицензии идёт речь? Sentry — open-source продукт, им можно пользоваться совершенно бесплатно: github.com/getsentry/sentry/blob/master/LICENSE

К сожалению, я не вспомню точно характеристики машины, на которой у нас крутится sentry (если нужно — могу позже уточнить у наших админов), но там совершенно точно самый обычный сервер без изысков. Сейчас с нашего проекта приходит, в среднем, около 100 сообщений в час — это ошибки и разного рода логгирование. Пару раз мы не совсем удачно раскатывались в бой и в sentry попадало порядка нескольких тысяч сообщений в минуту — сервер выдержал и никаких проблем не было. Кроме того, там можно настроить рейт-лимиты, тогда некоторые ошибки будут игнорироваться, зато проблем с нагрузкой не будет.

Вот тут я писал про инфраструктуру нашего проекта: habrahabr.ru/company/mailru/blog/196184/ там есть раздел про sentry.
> Если честно, я не вижу особого смысла рассматривать каждую из этих IDE, достаточно знать что они есть, что они успешно справляются со своими задачами и вы можете использовать встроенный отладчик прямо из редактора

Рассматривать все-таки имеет смысл, потому что функциональность, помимо базовой, там может весьма сильно различаться. Например, PyCharm умеет дебажить Google AppEngine и автоматически аттачиться к дочерним процессам. PTVS — аттачиться к уже запущеным питоновским процессам (в т.ч. кастомным хостам, а не только python.exe) и отлаживать нативный код одновременно с питоновским, и предоставляет полноценный отладочный REPL, работающий «внутри» отлаживаемого процесса. Оба умеют отлаживать шаблоны Django (ставить в них брейкпоинты, ходить пошагово etc). Не берусь сказать, что уникального есть в PyDev или Wing, но наверняка какие-то интересные вещи можно найти.
Так я же не спорю, это всё замечательные продукты и у всех них есть свои плюсы и минусы (например, PTVS — только под Windows и это сразу очень сильно ограничивает возможности его применения).

Я не люблю писать о том, чего я сам лично не пробовал, поэтому не стал юлить и честно обошёл этот вопрос стороной. Было бы здорово, кстати, если бы кто-нибудь (может, ты? ;) написал обо всех этих возможностях IDE в режиме отладки и профилирования. Чем больше информации, тем лучше — каждый найдёт что-нибудь себе по душе.
У меня, как у разработчика одного из этих продуктов, будут проблемы с предвзятостью :)

Вообще, детальный сторонний разбор имеющихся питоновских IDE — отладки и профилирования в т.ч., но также и редактирования, и поддержки веб-фреймворков, и всяких экзотических фич типа редактирования Cython или нативной отладки, мог бы быть очень интересной статьей, имхо. Благо, что хороших вариантов за последние пару лет стало неприлично много, и отличий там тоже накопилось довольно много. И при этом большинство разработчиков про них не в курсе — как правило, люди знают подробности о «своей» IDE, но не о других.
Ну что ж, будем ждать желающего написать пост =)
Иметь возможность отлаживать Cython код графическим отладчиком было бы здорово! Я, например, не в курсе, существуют ли какие-то инструменты для этого.

А PyCharm, кстати, использует отладчик PyDev.

И ещё было бы интересно почитать про возможности отладки сишных модулей расширений. Я когда-то пробовал собирать pyd-файлы с отладочной информацией и аттачиться к python-процессу с помощью VisualStudio, но ничего не вышло. Хотя в Matlab c mex-файлами такой способ работает отлично.
Мне неизвестно о специальной поддерже отладки Cython в какой-либо IDE. В PyCharm есть поддержка Cython в редакторе, причем он в т.ч. использует объявления типов для автозавершения, а также генерация кода при сборке. Больше вроде бы ни у кого никакой специальной поддержки нет.

В PTVS, теоретически, можно отлаживать Cython как C — если включить вывод #line в сгенерированном коде, то нативный отладчик будет при этом показывать Cython-исходник, но локальные переменные будут отображаться из сгенерированного кода, и вычисление выражений в этих фреймах тоже будет сишным. Хотя PTVS умеет в режиме смешанной отладки показывать в нативных фреймах PyObject* как питоновские объекты, но это все-таки не совсем то.

Идеальным вариантом было бы взять редактирование от PyCharm :) а отладку нативного кода — от PTVS, и к последней прикрутить явную поддержку Cython — теоретически, это возможно, я уже исследовал немного эту тему, но в ближайшем релизе этой фичи не будет точно. В следующем за ним — очень вероятно.

Про сборку и отладку .pyd трудно сказать что-либо конкретное, не зная, какие именно у вас были проблемы. Посмотрите доку по соответствующей фиче в PTVS; если не поможет — можете кидать вопросы мне в личку.
Я, пожалуй, выделю три среды, предназначенные для разработки на Python: PyCharm, PyDev, Wing IDE и PTVS.


Все люди делятся на три категории: те, которые умеют считать и те, которые нет.
Fixed. Спасибо за полезный комментарий =)
Спасибо за интересную статью. Кстати о тестах. А что думаете о pyVows? (Тут рассказывают как использовать в Django.) Пока это моя любимая либа для тестов.
Не пробовал, спасибо за ссылку!
Обязательно изучу и попробую, асинхронность выглядит крайне заманчиво =)
Если что-то свалилось, а мы в IPython, то запустить %debug.
Sign up to leave a comment.