Как создать надежную Python IDE с Emacs (в качестве текстового редактора)

56

Emacs - отличный редактор - однако говорят, что « для программирования вам сначала нужна IDE », - как бы вы встроили IDE в широко настраиваемый Emacs для PYTHON со всеми функциями современной IDE. Я хочу иметь возможность эффективно отлаживать, запускать, компилировать и управлять кодом. До сих пор я читал тему, по которой установил пакет Elpy, но не уверен, что еще нужно знать и делать, чтобы это стало возможным.

Серийный Обменник
источник
4
Не могли бы вы быть более конкретным? «IDE» стал модным словом и сумкой для всех видов функций.
Васамаса
Я предполагаю , что вы новичок в Emacs , и вы можете посмотреть на мой шлем и шлем Projectile руководства .
Tu Do
2
Поиск Google для «EMACS питона язя» дает достаточное количество попаданий. Не могли бы вы уточнить, что вы уже пробовали, а что еще не является удовлетворительным?
Дан
1
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он слишком широк.
Дрю
4
IDE могут быть полезны, но «для программирования сначала нужна IDE» просто глупо. Много хорошего кода было написано до появления IDE.
offby1

Ответы:

57

Режим Python по умолчанию в Emacs имеет ряд функций, включая завершение кода на основе нижней оболочки Python, поэтому его можно использовать в качестве базовой IDE без каких-либо добавленных пакетов. Вы также можете использовать другие основные функции Emacs с Python. Например, M-x compile/ M-x recompileможно использовать для запуска тестов. M-x pdbможет запускать отладчик Python, и он интегрируется с окружением Emacs, так что вы фактически получаете встроенные точки останова.

Чтобы расширить это, есть три основных пакета для Emacs, которые пытаются реализовать более функциональную среду Python IDE (в алфавитном порядке):

Все они предоставляют примерно одинаковые функции:

  • Завершение кода с использованием автозаполнения или корпоративного режима
  • Код навигации, то есть перейти к определению
  • Отображение подписи функции с помощью ElDoc
  • Самоанализ документации по символу в точке
  • Проверка синтаксиса с помощью flymake или flycheck
  • И некоторые из них (по крайней мере, Elpy) имеют базовую поддержку рефакторинга

Помимо этого, Emacs также может помочь вам с множеством рабочих процессов, но он не предписывает ни одного. Поэтому следующие шаги во многом зависят от того, как вы используете Python. Наилучшим подходом здесь было бы выяснить хороший рабочий процесс Python, а затем попытаться найти пакеты Emacs, которые конкретно помогут вам с шагами в вашем рабочем процессе.

Например, есть несколько пакетов для работы с virtualenvs (Elpy, о котором вы упоминаете, поставляется с pyvenv), который вы, вероятно, должны использовать. Emacs-Jedi имеет сопутствующий режим для просмотра кода, который может быть полезен. Если вы часто используете IPython, для Emacs есть Notebook для IPython . Существуют специальные режимы поддержки для разработки Django и т. Д. - вы можете зайти на http://melpa.org/ и поискать Python, чтобы получить некоторые идеи.

За пределами Python вы можете воспользоваться некоторыми дополнительными пакетами Emacs, которые помогают в разработке в целом. Projectile - это универсальный пакет для управления проектами, который предоставляет ряд интересных функций, таких как поиск в проекте или переход между тестами и реализациями. Если он еще не был установлен как зависимость от выбранного вами пакета IDE, вы также можете использовать YASnippet, который предоставляет интеллектуальные фрагменты для генерации кода. Коллекция фрагментов по умолчанию также содержит большое количество фрагментов для Python.

Но опять же, основные пакеты IDE, приведенные выше, обеспечат вам нормальную среду - следующие шаги в значительной степени зависят от ваших конкретных рабочих процессов.

(Полное раскрытие: я автор Elpy, поэтому примите это во внимание при прочтении выше.)

Йорген Шефер
источник
1
Большое спасибо за такой исчерпывающий ответ, он оказался чрезвычайно полезным способами, которых нет в бесчисленных статьях.
Серийный обменный пункт
2
Спасибо @ Йорген. Я использую elpyежедневно и у меня есть быстрый вопрос о вашем ответе, когда вы говорите, что « M-x pdbможете запустить отладчик Python» , как это точно? У меня есть буфер Python, и когда я делаю, M-x pdbя получаю подсказку в минибуфере с надписью "Run pdb (like this): pdb my_file.py". Когда я RETнажимаю, я получаю «ImportError: Ни один модуль с именем pdb.pdb:« pdb не является пакетом ». Это с последней версией PYthon 3.4 после простого обновления pdb с помощью pip, что дает мне:$ pip freeze | grep pdb => pdb==0.1
Амелио Васкес-Рейна
1
Pdb поставляется с Python. Я понятия не имею, почему это не будет найдено, я боюсь. :-(
Йорген Шефер
@ JorgenSchäfer, если pdbне найден, но pythonнайден локально, то вы можете запустить pdb, используя M-x pdbзатем «Запустить pdb (например, так): python -m pdb my_file.py`
ChrisFreeman
Я также считаю, что пакет sphinx-doc полезен для написания строк документации.
aadcg
17

Я бы посоветовал злым пользователям emacs попробовать spacemacs .

Он имеет блестящий слой Python, подробности смотрите здесь: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

На данный момент, это включает в себя:

  • Автозаполнение с использованием анаконды
  • Навигация по коду с использованием режима анаконды
  • Поиск документации с использованием anaconda-mode и pylookup
  • Тестовый бегун с помощью nose.el или pytest
  • Виртуальная среда с использованием pyvenv
  • Семантический режим включен
  • Поддержка Django через режим пони

Установка до смешного проста, просто добавьте следующую строку в ваш ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))
Несчастный кот
источник
из любопытства, где именно в .spacemacs я должен добавить это? это самый верх ок? before (defun dotspacemacs / Layers () ...?
user391339
Есть список с названием dotspacemacs-configuration-layers. Добавьте это туда :)
The Unfun Cat
4

Я использую режим цели . Это позволяет определить довольно устойчивую среду.

Использование elpy, pydocи neotreeу меня довольно надежная среда (в том смысле, что окна не делают странных вещей при ошибках). Это также может очень хорошо работать gud-pdbдля отладки.

Настройка emacs для python с neotree, python-mode, pydoc и подчиненным питоном (через elpy)

Нидиш Нараянаа
источник
4

Вот исчерпывающее руководство: http://wikemacs.org/wiki/Python В нем перечислены готовые решения ( стартовый набор Prelude , Spacemacs, решения для науки о данных …), а также большие полезные пакеты (Elpy), а также Как и каждый пакет, вам нужно улучшить свою среду. Вот обзор .

Рефакторинг

Это самая «специфичная для IDE» функция. Emacs как некоторые возможности у него благодаря библиотеке Python Rope. Оказывается, самый простой способ установки и использования - это пакет emacs-traad в MELPA. Он включает в себя, среди прочего:

  • изменить сигнатуру метода: добавить / удалить аргумент, с кросс-проектным рефакторингом (конечно),
  • переименовать что-нибудь,
  • найти определения, ...

Веревка также входит в Elpy.

Упрощенная манипуляция с кодом

У нас есть более простые инструменты для рефакторинга или манипулирования кодом: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Например, Projectile великолепен (см. Другие ответы), у нас также есть инструмент для добавления декораторов , добавления / удаления / редактирования аргументов , переименования / копирования / комментирования / уничтожения метода, инструмента для генерации кода,…

Кодовая навигация

Мы можем перемещаться как IDE с тегами и cscope: найти функции, вызывающие эту функцию, найти события и т. Д.

В Emacs также есть отличные пакеты, такие как imenu (helm-imenu), helm-swoop (интерактивный grep в буфере), emacs-helm-ag (интерактивный поисковик серебра в проекте) и т. Д.

Запуск тестов

Именно Elpy обеспечивает хорошую поддержку для запуска тестов (с бегуном django, elpy или другим). Мы даже можем запустить только тот модульный тест, в котором мы сейчас находимся: очень удобно! Таким образом, есть Hydra, чтобы помочь с этим (переход между ошибками, переключение на приглашение Python ...).

Сделать поддержку

Это пакет Emacs, не относящийся к Python. Но мне нравится, когда я могу запустить цель make из любой точки проекта и выбрать команду make с завершением . ссылка

Имея дело с отступом

Есть небольшой пакет, indent-tools , который дает команды для работы непосредственно с блоком с отступом: перейти к блоку отступа next-previous-child-parent, indent / deindent / comment / copy / kill / fold текущего блока , и т.д. Идеально подходит для yaml, а также для Python. Doc и GIF демо

Поддержка Django

увидеть Джанго . Элпи поддерживает Джанго . Смотри elpy django doc . django-mode (в melpa) имеет подсветку шаблонов, быстрые команды, завершение команд управления ,…

Также важно: отличная поддержка Git, Github и Gitlab

magithub может создавать PR на github, мы можем извлекать проблемы и вставлять их ссылки в сообщения о коммитах , magit отлично,… смотрите http://wikemacs.org/wiki/Git

Ehvince
источник
Особенно в больших и / или разрозненных проектах рефакторинг очень важен, чтобы не сломать что-либо. Кто-нибудь знает, как настроить emacs-traad с помощью Spacemacs?
thinwybk
1

Ответы здесь предоставили большинство важных функций, которые предоставляет spacemacs, но всегда была одна особенность, о которой я не мог найти - отладка (я не нашел каких-либо приличных инструментов отладки, которые бы хорошо работали с spacemacs до недавнего времени)

Итак, как я настроил рабочий процесс отладки для своих spacemacs?

Существует разрабатываемая ветвь функций, которая использует пакет realgud.el для предоставления возможности, близкого к IDE, например, отладки в spacemacs: https://github.com/CeleritasCelery/spacemacs Все, что вам нужно сделать, это вставить эту ветку в ваш .emacs. d и внесите некоторые изменения в ваш файл ~ / .emacs.d / Layers / + lang / python / packages.el

Подробные шаги по настройке spacemacs для отладки (сделайте глубокий вдох)

  1. Введите следующие команды в вашем терминале одну за другой. Это добавит изменения в spacemacs CeleritaCelery в отдельную ветку с именем 'debug-layer'. Это означает, что если что-то испортилось, вы всегда можете проверить мастер ветку и вуаля! ваш оригинальный космический мач вернулся!

remote add debug-layer https://github.com/CeleritasCelery/spacemacs fetch debug-layer checkout --track debug-layer/debug-layer branch -a

  1. Теперь откройте ~ / .emacs.d / layer / + lang / python / packages.el и добавьте указанную ниже функцию в конец файла. ;; configure trepan3k as the python debugger to be used with realgud (defun python/pre-init-realgud() (dolist (mode '(anaconda-mode)) ;; bind trepan3k with anaconda mode (spacemacs|add-realgud-debugger mode "trepan3k"))) Эта функция использует отладчик trepan3k в качестве отладчика python. Вы можете изменить значение на pdb или ipdb или любой другой отладчик, который вам нравится. Если вы планируете использовать trepan3k, убедитесь, что вы установили его с pip, так sudo pip install trepan3kкак он не поставляется предварительно установленным с вашим дистрибутивом python.

  2. Теперь откройте ваш файл .spacemacs и слой «debug» внутри слоев dotspacemacs-configuration-layer следующим образом dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Затем перезапустите spacemacs и откройте любой файл python. Вы можете начать отладку, набрав Mx realgud: trepan3k

Это запустит сеанс отладки, и вы можете добавлять, удалять точки останова, используя привязки клавиш realgud, описанные здесь: https://github.com/realgud/realgud#source-window-commands

Вы сделали!

клитон дантис
источник
Ответ Clyton выше, git-репо должен быть github.com/CeleritasCelery/debug-layer . ПР для этого в настоящее время открыт на github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke
(Я не могу комментировать из-за отсутствия репутации) Вышесказанное было объединено с ветвью разработки spacemacs, поэтому первый шаг можно игнорировать.
Oddbodbloke