Fork me on GitHub
14/10/2006

Pythonic IDEs: Субъективный взгляд на IDLE

Со времени написания прошлой заметки прошло более трех месяцев. Всё это время я пользовался IDLE. О своих впечатлениях и расскажу

IDLE хороша тем, что доступна практически везде и без дополнительных усилий. Написана она на Tkinter и к ней приложил руку ГвР. Про Tk я слышал мнение, что он одинаково плохо выглядит на всех платформах. На самом деле, просто другие toolkit'ы стали выглядеть лучше, а Tk какой был, такой и остался. И вот в сравнении с "глянцевыми" GTK/Qt он выглядит "серым". В любом случае, с внешним видом можно мириться, если функциональность на высоте.

Насчет функциональности небольшое отступление. Что нужно для того, чтобы IDE/редактор мог называться Pythonic? По-порядку:

  1. Уметь работать с отступами. Поскольку отступы - часть синтаксиса, то редактор просто обязан уметь: делать "правильные" отступы (по Python Style Guide это 4 пробела) и изменять уровень вложенности у блока текста.
  2. Уметь подсвечивать синтаксис. Не требую чего-то навороченного, хотя бы базовые возможности (выделение ключевых слов, строк, комментариев).
  3. Уметь работать с встроенной документацией (docstring). Иначе странно было бы называть инструмент предназначенным для работы с Python, если игнорируется такая мощная встроенная в язык функция.
  4. Уметь определять кодировку текста. Раз уж указывается кодировка исходного текста (PEP-263), то грех не брать ее из файла.

На мой взгляд, это необходимые условия. Различного рода дополнительная функциональность (автодополнение названий функций/классов/методов/атрибутов/переменных, интеграция с системой контроля версий, интеграция с инструментами тестирования/рефакторинга) рассматривается мной как факультативная. Т.е. если она есть - хорошо, но в этом случае смотрю как она реализована, насколько удобно. Если же этих "фишек" нет, то и в минус записывать не буду.

Итак, "карточка" на IDLE:

  • Лицензия - PSFL v2
  • Требуемые дополнительные библиотеки - Tk (поправка: для Windows включена в дистрибутив Python)
  • Базовый функционал - полностью
  • Дополнительный функционал
    • автодополнение названий переменных (в версии 1.2)
    • обзор классов/функций
    • обзор директорий, в которых ищутся модули
    • контекст кода (показ ключевых конструкций выше по коду)
    • наличие отладчика

Из дополнительных "фишек" отмечу хороший алгоритм переноса данных внутри скобок: курсор переносится не на начало строки, а на позицию под открывающей скобкой. Понравилось еще, что IDLE "понимает", что после return нужно возвращаться на один уровень вверх по вложенности. Из того что появилось в версии 1.2 и достаточно удобно - визуальный показ парности скобок. Всё это не killer features, но по-мелочи приятно.

Что касается общего впечатления: сразу стоит предупредить, что в ненастроенной *nix системе его могут испортить шрифты, поскольку зачастую в Tk они по умолчанию "кривоваты" (это касается, естественно, только кириллицы). В целом, у меня сложилось мнение, что IDLE не очень подходит к крупным проектам. Я не знаю, с чем это связано, но субъективно мне сложнее ориентироваться по коду внутри IDLE (и Class Browser тут скорее просто для галочки, реальной помощи от него я не ощутил), чем в большинстве других редакторов. По мне, так ниша IDLE - небольшие Python-программы, где код умещается на два-три экрана (т.е. где-то в районе 200 строк). Как уже сказал, навигация по более объемному коду вызывает некоторый дискомфорт.

Из недостатков, которые мне мешали, помню:

  • Постоянное попадание скрытых файлов/директорий в диалоге "Открыть/Сохранить файл". С учетом того, что у меня в домашней директории их под 200 штук, это утомляло
  • Изредка, при запуске "долгоиграющих" процессов (например, twisted-приложений, или GUI), IDLE "замораживалась" (см. скриншот). При этом на Windows я с этим сталкивался чаще, чем на Linux.

В целом, для "IDE в поставке", IDLE не плоха. Не "лучший выбор", но твердая четвертка. По крайней мере, весь базовый функционал реализован вполне достойно. Я буду рассматривать IDLE как некий эталон (надо ж от чего-то отталкиваться) и остальные инструменты буду сравнивать уже с ней.

Вообще, это время я помимо IDLE, использовал PyDev на Windows и gvim на Linux, и пришел к выводу, что искать лучший (для себя) инструмент на все случаи жизни не особо разумно. Так что поиск разделился на две категории:

  1. быстрый инструмент для мелких скриптов:
  2. полный инструмент для крупных проектов:

Дальше совет тем, кто хочет использовать IDLE-1.2 (появилась в Py25) вместе с Py24.

Во-первых, нужно получить исходные тексты IDLE-1.2 с репозитария Python (я делаю это в Linux, в командной строке, Вы можете воспользоваться каким-нибудь Subversion-клиентом)

svn checkout http://svn.python.org/projects/python/branches/release25-maint/Lib/idlelib idlelib12

Чтобы не "ломать" инсталляцию Python, а также для возможности использовать предыдущую версию IDLE (если что-то пойдет не так), я ставлю IDLE-1.2 как пакет idlelib12, а не idlelib.

Далее, исходя из требований (запускаться на Py24, запускаться как пакет idlelib12), пришлось немного доработать IDLE. Патч можно посмотреть здесь, а здесь можно взять уже измененные исходные тексты IDLE-1.2.

Потом копируем "доработанную" IDLE в директорию, находящуюся в PYTHONPATH (либо добавляем нужную директорию к PYTHONPATH), я для этого использую /usr/local/lib/python2.4/site-packages и запускаем при помощи такого кода:

#!/usr/bin/python
from idlelib12 import PyShell
PyShell.main()

Если что-то не получается, пишите комментарии - будем разбираться вместе.

Комментарии

Все статьи