Wie erstelle ich eine robuste Python-IDE mit Emacs (als Texteditor)

56

Emacs ist ein hervorragender Editor - allerdings heißt es, "um zu programmieren, brauchen Sie zuerst eine IDE ". Wie würden Sie eine IDE in dem umfassend anpassbaren Emacs für PYTHON mit allen Funktionen der modernen IDE erstellen? Ich möchte in der Lage sein, Code effektiv zu debuggen, auszuführen, zu kompilieren und zu verwalten. Bisher habe ich über das Thema gelesen, dass ich das Elpy-Paket installiert habe, bin mir aber nicht sicher, was ich sonst noch wissen und tun muss, um dies zu ermöglichen.

Serienaustauscher
quelle
4
Könnten Sie bitte genauer sein? "IDE" ist zu einem Modewort geworden und bietet alle Arten von Funktionen.
Wasamasa
Ich vermute, Sie sind neu in Emacs und möchten sich vielleicht meinen Leitfaden für Helm und Helmprojektile ansehen .
Tu Do
2
Eine Google-Suche nach "emacs python ide" liefert eine ganze Reihe von Treffern. Können Sie klären, was Sie bereits ausprobiert haben und was noch nicht zufriedenstellend ist?
Dan
1
Ich stimme dafür, diese Frage als nicht thematisch zu behandeln, weil sie zu weit gefasst ist.
Drew
4
IDEs mögen nützlich sein, aber "um zu programmieren, brauchst du zuerst eine IDE" ist einfach albern. Es wurde viel guter Code geschrieben, bevor es IDEs gab.
offby1

Antworten:

57

Der Standard-Python-Modus in Emacs verfügt über eine Reihe von Funktionen, einschließlich der Codevervollständigung basierend auf der minderwertigen Python-Shell, sodass er als Basis-IDE ohne hinzugefügte Pakete verwendet werden kann. Sie können auch andere Emacs-Kernfunktionen mit Python verwenden. Zum Beispiel kann M-x compile/ M-x recompilezum Ausführen von Tests verwendet werden. M-x pdbkann den Python-Debugger ausführen und lässt sich in die Gud-Umgebung von Emacs integrieren , sodass Sie tatsächlich Inline-Haltepunkte erhalten.

Um das zu erweitern, gibt es drei Hauptpakete für Emacs, die versuchen, eine leistungsfähigere Python-IDE (in alphabetischer Reihenfolge) zu implementieren:

Sie bieten alle ungefähr die gleichen Funktionen:

  • Code-Vervollständigung im Auto-Vervollständigungs- oder Firmenmodus
  • Code-Navigation, dh zur Definition / Verwendung
  • Funktionssignaturanzeige mit ElDoc
  • Dokumentation Introspektion auf dem Symbol am Punkt
  • Syntaxprüfungen mit Flymake oder Flycheck
  • Und einige von ihnen (zumindest Elpy) haben grundlegende Refactoring-Unterstützung

Darüber hinaus kann Ihnen Emacs auch bei vielen Workflows helfen, schreibt jedoch keine einzige vor. Die nächsten Schritte hängen also stark davon ab, wie Sie Python verwenden. Der beste Ansatz wäre, einen guten Python-Workflow zu finden und dann nach Emacs-Paketen zu suchen, die Ihnen bei den einzelnen Schritten Ihres Workflows helfen.

Zum Beispiel gibt es mehrere Pakete für die Arbeit mit virtualenvs (Elpy, von dem Sie sprechen, dass es mit pyvenv geliefert wird), die Sie wahrscheinlich verwenden sollten. Emacs-Jedi hat einen begleitenden Modus zum Durchsuchen von Code, der nützlich sein kann. Wenn Sie häufig IPython verwenden, gibt es ein IPython-Notizbuch für Emacs. Es gibt spezielle Support-Modi für die Django-Entwicklung usw. - Sie können http://melpa.org/ aufrufen und nach Python suchen, um einige Ideen zu erhalten.

Außerhalb von Python profitieren Sie möglicherweise von einigen zusätzlichen Emacs-Paketen, die bei der Entwicklung im Allgemeinen helfen. Projectile ist ein generisches Paket für das Projektmanagement, das Ihnen eine Reihe interessanter Funktionen bietet, z. B. die Suche in einem Projekt oder den Wechsel zwischen Tests und Implementierungen. Wenn es noch nicht als Abhängigkeit vom IDE-Paket Ihrer Wahl installiert wurde, können Sie auch YASnippet verwenden , das intelligente Snippets für die Codegenerierung bereitstellt. Die Standard-Snippet-Sammlung enthält auch eine große Anzahl von Snippets für Python.

Mit den oben genannten IDE-Hauptpaketen erhalten Sie eine gesunde Umgebung. Die nächsten Schritte hängen stark von Ihren spezifischen Arbeitsabläufen ab.

(Vollständige Offenlegung: Ich bin der Autor von Elpy. Berücksichtigen Sie dies beim Lesen der obigen Informationen.)

Jorgen Schäfer
quelle
1
Vielen Dank für diese umfassende Antwort. Sie hat sich in einer Weise als äußerst nützlich erwiesen, wie es unzählige Artikel nicht getan haben.
Serial Exchangist
2
Danke @Jorgen. Ich benutze elpytäglich und habe eine kurze Frage zu Ihrer Antwort, wenn Sie sagen, dass " M-x pdbPython-Debugger ausführen kann" , wie ist das genau? Ich habe einen Python-Puffer, und wenn ich dies tue M-x pdb, wird im Minipuffer eine Eingabeaufforderung angezeigt, in der steht "Run pdb (like this): pdb my_file.py". Wenn ich drücke RETich „Import: Kein Modul pdb.pdb genannt:‚pdb kein Paket“erhalten , ist diese mit der neuesten Python 3.4 nach nur pdb mit pip Upgrade, das gibt mir:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina
1
Pdb kommt mit Python. Ich habe keine Ahnung, warum es nicht gefunden werden würde, fürchte ich. :-(
Jorgen Schäfer
@ JorgenSchäfer Wenn pdbnicht gefunden, aber pythonlokal gefunden wird, können Sie pdb mit M-x pdb"Run pdb (like this)" ausführen: python -m pdb my_file.py
ChrisFreeman
Ich finde auch das Paket sphinx-doc nützlich, um Docstrings zu schreiben.
25.
17

Ich würde böse Emacs-Benutzer dazu ermutigen , Spacemacs auszuprobieren .

Es hat eine brillante Python-Ebene, siehe die Details hier: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

Ab sofort beinhaltet es:

  • Automatische Vervollständigung im Anaconda-Modus
  • Code-Navigation im Anaconda-Modus
  • Dokumentationssuche mit Anaconda-Modus und Pylookup
  • Testläufer mit Nase.el oder Pytest
  • Virtuelle Umgebung mit pyvenv
  • Der semantische Modus ist aktiviert
  • Django-Unterstützung im Pony-Modus

Die Installation ist lächerlich einfach, fügen Sie einfach die folgende Zeile hinzu ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))
Die unfun Katze
quelle
aus neugier wo genau in .spacemacs soll ich das hinzufügen? ist das top ok vor (defun dotspacemacs / levels () ...?
user391339
Es gibt eine Liste mit dem Namen dotspacemacs-configuration-layers. Fügen Sie es dort hinzu :)
The Unfun Cat
4

Ich benutze den Zweckmodus . Auf diese Weise können Sie eine ziemlich robuste Umgebung definieren.

Unter Verwendung elpy, pydocund neotreeich habe eine ziemlich robuste Umgebung (in dem Sinne , dass Fenster nicht tun seltsame Dinge bei Fehlern). Dies kann auch gud-pdbfür das Debuggen ziemlich gut funktionieren .

Emacs-Setup für Python mit Neotree, Python-Modus, Pydoc und minderwertigem Python (über Elpy)

Nidish Narayanaa
quelle
4

Hier finden Sie eine umfassende Anleitung: http://wikemacs.org/wiki/Python Hier finden Sie eine Liste gebrauchsfertiger Lösungen (das Prelude- Starter-Kit , Spacemacs, Lösungen für Data Science usw.) sowie nützliche Pakete (Elpy) Wie jedes Paket müssen Sie Ihre Umgebung verbessern. Hier ist eine Übersicht .

Refactoring

Dies ist die "IDE-spezifischste" Funktion. Emacs als einige Möglichkeiten dabei dank der Rope-Python-Bibliothek. Es stellt sich heraus, dass die Installation und Verwendung des emacs-traad- Pakets in MELPA am einfachsten ist. Es bietet unter anderem:

  • Ändern einer Methodensignatur: Hinzufügen / Entfernen eines Arguments mit projektübergreifendem Refactoring (natürlich)
  • benennen sie alles um,
  • Definitionen finden,…

Seil ist auch in Elpy enthalten.

Einfachere Code-Manipulation

Wir haben einfachere Tools, die beim Refactoring oder bei der Codemanipulation helfen: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Zum Beispiel ist Projectile großartig (siehe andere Antworten), wir haben auch ein Tool zum Hinzufügen von Dekoratoren , Hinzufügen / Entfernen / Bearbeiten von Argumenten , Umbenennen / Kopieren / Kommentieren / Beenden einer Methode, ein Tool zur Codegenerierung, ...

Code-Navigation

Wir können als IDE mit Tags und cscope navigieren: Finden Sie die Funktionen, die diese aufrufen, finden Sie Vorkommen usw.

Emacs hat auch großartige Pakete wie imenu (helm-imenu), helm-swoop (interaktives grep in einem Puffer), emacs-helm-ag (interaktiver Silver Searcher in einem Projekt) usw.

Tests ausführen

Es ist Elpy, das gute Unterstützung bietet, um Tests durchzuführen (mit dem Django-Läufer, Elpy oder einem anderen). Wir können sogar nur den Unit-Test durchführen, in dem wir uns gerade befinden: sehr praktisch! Es gibt also eine Hydra, die dabei hilft (zwischen den Fehlern wechseln Sie zur Python-Eingabeaufforderung…).

Unterstützung leisten

Dies ist ein Emacs-Paket, das nicht für Python spezifisch ist. Ich möchte jedoch in der Lage sein, ein make-Ziel von einer beliebigen Stelle im Projekt aus auszuführen und den make-Befehl mit Vervollständigung auszuwählen . Verknüpfung

Umgang mit dem Einzug

Es gibt ein kleines Paket, indent-Tools , dass Befehle direkt mit einem eingekerbten Block zu arbeiten gibt: Umzug in den nächst previous-Eltern-Kind-Block des Eindrucks, indent / deindent / Kommentar / Kopie / kill / fold den aktuellen Block , etc. Perfekt für Yam, und auch für Python. Doc und GIF Demo

Django-Unterstützung

siehe Django . Elpy unterstützt den Django-Läufer. Siehe elpy django doc . Der Django-Modus (in melpa) enthält Vorlagen zum Hervorheben, Schnellbefehle, Vervollständigen von Verwaltungsbefehlen , ...

Ebenfalls wichtig: großartige Git-, Github- und Gitlab-Unterstützung

magithub kann Github-PRs erstellen, wir können Probleme abrufen und deren Referenz in Commit-Nachrichten einfügen , magit ist großartig, ... siehe http://wikemacs.org/wiki/Git

Ehvince
quelle
Gerade bei größeren und / oder überfüllten Projekten ist es super wichtig, beim Refactoring nichts kaputt zu machen. Weiß jemand, wie man Emacs-Traad mit Spacemacs einrichtet?
Thinwybk
1

Die Antworten hier haben die meisten wichtigen Funktionen bereitgestellt, die Spacemacs bieten, aber es gab immer eine Funktion, die ich nicht finden konnte - DEBUGGING (Ich habe bis vor kurzem keine anständigen Debugging-Tools gefunden, die mit Spacemacs gut funktionieren).

Wie habe ich einen Debug-Workflow für meine Spacemacs eingerichtet?

Derzeit wird ein Feature-Zweig entwickelt, der mit dem Paket realgud.el eine IDE-ähnliche Debug-Erfahrung in Spacemacs bietet: https://github.com/CeleritasCelery/spacemacs Sie müssen diesen Zweig nur in Ihre .emacs ziehen. d Verzeichnis und nehmen Sie einige Änderungen in Ihrer Datei ~ / .emacs.d / layers / + lang / python / packages.el vor

Detaillierte Schritte zum Einrichten von Spacemacs für das Debugging (Atmen Sie tief durch)

  1. Geben Sie die folgenden Befehle nacheinander in Ihr Terminal ein. Dadurch werden die Spacemacs-Änderungen von CeleritaCelery in einem separaten Zweig namens "Debug-Layer" hinzugefügt. Das heißt, wenn irgendetwas durcheinander kommt, können Sie immer den Master-Zweig und voila auschecken! Ihr ursprünglicher Spacemac ist zurück!

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

  1. Öffnen Sie nun die Datei ~ / .emacs.d / levels / + lang / python / packages.el und fügen Sie die folgende Funktion am Ende der Datei hinzu. ;; 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"))) Diese Funktion verwendet den trepan3k-Debugger als Python-Debugger. Sie können den Wert in "pdb" oder "ipdb" oder in einen beliebigen Debugger ändern. Wenn Sie trepan3k verwenden möchten, stellen Sie sicher, dass Sie es mit pip installieren, sudo pip install trepan3kda es nicht mit Ihrer Python-Distribution vorinstalliert wird.

  2. Öffnen Sie nun Ihre .spacemacs-Datei und "debuggen" Sie die Ebene in Dotspacemacs-Konfigurationsebenen wie dieser dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Starten Sie dann spacemacs neu und öffnen Sie eine beliebige Python-Datei. Sie können mit dem Debuggen beginnen, indem Sie Mx realgud: trepan3k eingeben

Dadurch wird die Debugsitzung gestartet, und Sie können Haltepunkte mithilfe der hier erläuterten Realgud-Tastenkombinationen hinzufügen und löschen: https://github.com/realgud/realgud#source-window-commands

Sie sind fertig!

clyton dantis
quelle
Die Antwort von Clyton oben lautet: github.com/CeleritasCelery/debug-layer . Die PR hierfür ist derzeit unter github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke
(Ich kann wegen mangelnder Reputation keinen Kommentar abgeben.) Das oben Gesagte wurde in den Entwicklungszweig der Spacemacs integriert, sodass Schritt 1 ignoriert werden kann.
Oddbodbloke