В сети часто возникают разговоры на тему «Python best IDE — does it really exist?». Для примера — недавний Q&A в группе Python community на LinkedIn (к сожалению, просмотр возможен только для пользователей группы). Если вкратце, то мир вертится вокруг:
Если первые четыре решения предоставляют IDE для Python прямо из коробки, то последние два требуют опред��ленных настроек. Для Vim не знаю, но для Emacs надо потратить не меньше 6 часов поисков по интернету и экспериментов перед тем как будет получена удобная и (очень) функциональная среда для Python.
Что до меня, то весьма долгое время я работал с Eclipse + PyDev — вполне работоспособное решение. Но после окончательного переезда с Windows в Ubuntu (всем ставить шрифты Liberation в Убунте!), я решил таки завершить начатое уже давно — начать использовать Emacs не только как GTD-органайзер, IRC-клиент и редактор «когда не хочется запускать Eclipse».
История данных шести часов под хабракатом (история предполагает, что читающие хоть немного знакомы с Emacs и Python, а также носит Ubuntu(Debian)-specific оттенок, когда дело касается установки пакетов).
Emacs версий 21 и старше имеют встроенный режим программирования на Python, называемый по имени файла модуля python.el. Существует и независимый проект, который дает примерно ту же функциональность. Сравним оба решения.
Хорошая новость для тех, кому просто нужен удобный и функциональный текстовый редактор для python-скриптов – можно ничего, что описано ниже не делать, python.el обеспечивает хороший комплект возможностей прямо из коробки:
Походив некоторое время по просторам интернета на тему «python-mode.el vs. python.el», я пришел к выводу, что большая часть сообщества пользуется модулем python-mode.el. Основные причины этого вполне себе изложены в этой ветке на форуме velocityreviews. Из основных можно выделить:
Собственно различий не так уж и много и сразу они не будут заметны — нужно какое-то время поработать там и там, чтобы их обнаружить. Но я все-таки поставил python-mode.el:
Итак, считаем, что режим выбрали, переходим дальше после пары скриншотов Emacs в Python-Mode:


Наблюдательные, наверное, заметили, что у меня в Emacs ttf-шрифты? Об этом будет небольшой следующий пост. Также можно заметить, что ошибки подсвечиваются на лету.
У Emacs есть отличный режим flymake-mode, который позволяет подсвечивать на лету все ошибки компиляции (а также предупреждения и сообщения о плохом стиле программирования). Беда в том, что по умолчанию Python не поддерживается. Исправляем это упущение:
В консоли:
Эти пакеты требуются для flymake в python-mode. pylint — для проверки кода на ошибки, pymacs обеспечивает двусторонее взаимодействие между Python и EmacsLISP'ом.
Создайте следующий скрипт в вашем PATH (я создал в ~/bin), назовите его epylint:
Данный скрипт будет проверять наши исходники на ошибки вызовом pylint'а.
Далее, в вашем .emacs (обычно ~/.emacs, но у упорядоченных людей имеется небольшая иерархия файлов, вроде programming.el, python.el, common.el, которые подгружаются в .emacs c помощью load-file) добавляем строки:
Последняя ��трочка необязательна — она включает режим flymake по умолчанию для всех новых буферов, использующих python-mode. Если ее не написать, для включения flymake нужно будет выполнять
Все, подсветка ошибок должна заработать.
Идем на SourceForge-хостинг проектов Rope и Ropemacs, качаем rope и ropemacs, устанавливаем —
После этого нужно добавить в .emacs-файл строки:
Возможно, что вы заметили в процессе, что оба пакета rope и ropemacs — обычные python-модули. А расширение функционала Emacs с помощью ropemacs происходит через pymacs — который связывает EmacsLISP и Python.
Смотрим результат (обратите внимание на меню — там появился пункт «Rope», через который доступны большинство функций ropemacs):
Completion (срабатывает по нажатию M-/):

Рефакторинг (на примере Rename):

На самом деле это не лучший completion, который можно получить в Emacs для Python, но давайте в следующий раз :) Обещаю рассказать про свои дальнейшие изыскания.
Я привык к Emacs'у, его сочетаниям клавиш и общей парадигме — поэтому со всем тем, что у получилось в итоге, мне работать в удовольствие — пальцы летают по клавиатуре, о мыши совсем забыл, минибуфер рулит… Однако у меня есть серьезные опасения, что у тех, кто Emacs'ом пока не пользовался, но хотел бы, возникнут серьезные проблемы — это как после Windows пересесть на Linux, очень похожие ощущения. Кнопки странные, курсор двигать слишком мудрено, какие-то буферы, окна… Именно для таких читателей пишу — если правда хочется попробовать Emacs (не зря же о нем столько разговоров) — пройдите сначала Emacs tutorial, потом поиграйте с ним с недельку по вечерам и уже потом запускайте его в свой рабочий процесс — отвыкнуть будет сложно. Я сам скептически относился к этому «редактору» полгода назад — а сейчас он у меня работает от включения до выключения компьютера, заменяя с десяток программ (органайзер, дневник, IDE для разных языков, просто редактор, jabber и IRC-клиент, средства для написания и публикования документации в html и не только, файловый менеджер) — причем он не навязывается, он просто удобней их.
Всем спасибо за внимание, надеюсь, информация будет полезной для вас. И да — это моя первая публикация на хабре, если есть оплошности — пишите в комментариях, учту на будущее.
EmacsWiki по Python-Mode
Выбор между python.el и python-mode.el
Bazaar-репозитарий проекта python-mode.el
Включение completion в python-mode
Использование C-c! для запуска ipython вместо python
Нажимаем F1 для проверки кода pylint'ом
Отличный code completion и рефакторинг python-кода
Отладка python-кода в Emacs: PdbNotes
Python completion с pycomplete
И еще про completion
- Eclipse + PyDev — похоже, что самое популярное из свободных решений.
- Komodo IDE — по отзывам отличное средство, но не free.
- WingIDE — лучший autocompletion для Python, но опять-таки non-free.
- Eric — IDE на Qt и QScintilla, пробовал только на Windows, видно недопробовал — показалась неудобной. Если у кого есть полезная информация и ссылки — поделитесь, пожалуйста, в комментариях.
- NetBeans 6.5 — готовится к выходу встроенная поддержка Python в этой IDE версии 6.5, ждем с нетерпением!
- Vim — для фанатов Vim ничего лучше быть, понятно, не может — после обработки напильником, правда.
- Emacs — аналогично Vim — для пользователей, которые много времени проводят в Emacs, он дает лучший user-experience при разработке на любом языке.
Если первые четыре решения предоставляют IDE для Python прямо из коробки, то последние два требуют опред��ленных настроек. Для Vim не знаю, но для Emacs надо потратить не меньше 6 часов поисков по интернету и экспериментов перед тем как будет получена удобная и (очень) функциональная среда для Python.
Что до меня, то весьма долгое время я работал с Eclipse + PyDev — вполне работоспособное решение. Но после окончательного переезда с Windows в Ubuntu (всем ставить шрифты Liberation в Убунте!), я решил таки завершить начатое уже давно — начать использовать Emacs не только как GTD-органайзер, IRC-клиент и редактор «когда не хочется запускать Eclipse».
История данных шести часов под хабракатом (история предполагает, что читающие хоть немного знакомы с Emacs и Python, а также носит Ubuntu(Debian)-specific оттенок, когда дело касается установки пакетов).
Emacs Python-Mode
Emacs версий 21 и старше имеют встроенный режим программирования на Python, называемый по имени файла модуля python.el. Существует и независимый проект, который дает примерно ту же функциональность. Сравним оба решения.
Встроенный python.el
Хорошая новость для тех, кому просто нужен удобный и функциональный текстовый редактор для python-скриптов – можно ничего, что описано ниже не делать, python.el обеспечивает хороший комплект возможностей прямо из коробки:
- Синтаксическая подсветка кода.
- Автоматическое расставление отступов.
- Возможность запуска внутреннего (в Emacs) интерпретатора.
- Запуск редактируемого кода во внутреннем интерпретаторе (как всего буфера, так и выделенной его части).
- Какой-никакой completion.
- Удобные функции комментирования/раскомментирования кода.
- Взаимодействие со справочной системой Python.
Независимый python-mode.el
Походив некоторое время по просторам интернета на тему «python-mode.el vs. python.el», я пришел к выводу, что большая часть сообщества пользуется модулем python-mode.el. Основные причины этого вполне себе изложены в этой ветке на форуме velocityreviews. Из основных можно выделить:
- Плохая «встроенность» внутреннего интерпретора у python.el.
- Отсутствие обозревателя классов у python.el.
- «Совсем не тот look&feel как у старого доброго python-mode.el» — сообщество придирчиво :)
Собственно различий не так уж и много и сразу они не будут заметны — нужно какое-то время поработать там и там, чтобы их обнаружить. Но я все-таки поставил python-mode.el:
sudo aptitude install python-mode и делов — даже .emacs править не надо.Итак, считаем, что режим выбрали, переходим дальше после пары скриншотов Emacs в Python-Mode:


Наблюдательные, наверное, заметили, что у меня в Emacs ttf-шрифты? Об этом будет небольшой следующий пост. Также можно заметить, что ошибки подсвечиваются на лету.
Подсветка ошибок на лету — pylint
У Emacs есть отличный режим flymake-mode, который позволяет подсвечивать на лету все ошибки компиляции (а также предупреждения и сообщения о плохом стиле программирования). Беда в том, что по умолчанию Python не поддерживается. Исправляем это упущение:
В консоли:
sudo aptitude install pylint pymacsЭти пакеты требуются для flymake в python-mode. pylint — для проверки кода на ошибки, pymacs обеспечивает двусторонее взаимодействие между Python и EmacsLISP'ом.
Создайте следующий скрипт в вашем PATH (я создал в ~/bin), назовите его epylint:
#!/usr/bin/env python
import re
import sys
from subprocess import *
p = Popen("pylint -f parseable -r n --disable-msg-cat=C,R %s" %
sys.argv[1], shell = True, stdout = PIPE).stdout
for line in p.readlines():
match = re.search("\\[([WE])(, (.+?))?\\]", line)
if match:
kind = match.group(1)
func = match.group(3)
if kind == "W":
msg = "Warning"
else:
msg = "Error"
if func:
line = re.sub("\\[([WE])(, (.+?))?\\]",
"%s (%s):" % (msg, func), line)
else:
line = re.sub("\\[([WE])?\\]", "%s:" % msg, line)
print line,
p.close()
Данный скрипт будет проверять наши исходники на ошибки вызовом pylint'а.
Далее, в вашем .emacs (обычно ~/.emacs, но у упорядоченных людей имеется небольшая иерархия файлов, вроде programming.el, python.el, common.el, которые подгружаются в .emacs c помощью load-file) добавляем строки:
(when (load "flymake" t)
(defun flymake-pylint-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "epylint" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pylint-init)))
(add-hook 'python-mode-hook 'flymake-mode)
Последняя ��трочка необязательна — она включает режим flymake по умолчанию для всех новых буферов, использующих python-mode. Если ее не написать, для включения flymake нужно будет выполнять
M-x flymake-mode в нужном буфере.Все, подсветка ошибок должна заработать.
Рефакторинг и completion Python-кода
Идем на SourceForge-хостинг проектов Rope и Ropemacs, качаем rope и ropemacs, устанавливаем —
sudo python setup.py install — оба пакета.После этого нужно добавить в .emacs-файл строки:
(require 'pymacs) (pymacs-load "ropemacs" "rope-")
Возможно, что вы заметили в процессе, что оба пакета rope и ropemacs — обычные python-модули. А расширение функционала Emacs с помощью ropemacs происходит через pymacs — который связывает EmacsLISP и Python.
Смотрим результат (обратите внимание на меню — там появился пункт «Rope», через который доступны большинство функций ropemacs):
Completion (срабатывает по нажатию M-/):

Рефакторинг (на примере Rename):

На самом деле это не лучший completion, который можно получить в Emacs для Python, но давайте в следующий раз :) Обещаю рассказать про свои дальнейшие изыскания.
Для новичков в Emacs
Я привык к Emacs'у, его сочетаниям клавиш и общей парадигме — поэтому со всем тем, что у получилось в итоге, мне работать в удовольствие — пальцы летают по клавиатуре, о мыши совсем забыл, минибуфер рулит… Однако у меня есть серьезные опасения, что у тех, кто Emacs'ом пока не пользовался, но хотел бы, возникнут серьезные проблемы — это как после Windows пересесть на Linux, очень похожие ощущения. Кнопки странные, курсор двигать слишком мудрено, какие-то буферы, окна… Именно для таких читателей пишу — если правда хочется попробовать Emacs (не зря же о нем столько разговоров) — пройдите сначала Emacs tutorial, потом поиграйте с ним с недельку по вечерам и уже потом запускайте его в свой рабочий процесс — отвыкнуть будет сложно. Я сам скептически относился к этому «редактору» полгода назад — а сейчас он у меня работает от включения до выключения компьютера, заменяя с десяток программ (органайзер, дневник, IDE для разных языков, просто редактор, jabber и IRC-клиент, средства для написания и публикования документации в html и не только, файловый менеджер) — причем он не навязывается, он просто удобней их.
Всем спасибо за внимание, надеюсь, информация будет полезной для вас. И да — это моя первая публикация на хабре, если есть оплошности — пишите в комментариях, учту на будущее.
Источники и полезные ссылки (многие из EmacsWiki по Python-Mode)
EmacsWiki по Python-Mode
Выбор между python.el и python-mode.el
Bazaar-репозитарий проекта python-mode.el
Включение completion в python-mode
Использование C-c! для запуска ipython вместо python
Нажимаем F1 для проверки кода pylint'ом
Отличный code completion и рефакторинг python-кода
Отладка python-кода в Emacs: PdbNotes
Python completion с pycomplete
И еще про completion