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.
56
Antworten:
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 recompile
zum Ausführen von Tests verwendet werden.M-x pdb
kann 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:
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.)
quelle
elpy
täglich und habe eine kurze Frage zu Ihrer Antwort, wenn Sie sagen, dass "M-x pdb
Python-Debugger ausführen kann" , wie ist das genau? Ich habe einen Python-Puffer, und wenn ich dies tueM-x pdb
, wird im Minipuffer eine Eingabeaufforderung angezeigt, in der steht"Run pdb (like this): pdb my_file.py"
. Wenn ich drückeRET
ich „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
pdb
nicht gefunden, aberpython
lokal gefunden wird, können Sie pdb mitM-x pdb
"Run pdb (like this)" ausführen: python -m pdb my_file.pyIch 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:
Die Installation ist lächerlich einfach, fügen Sie einfach die folgende Zeile hinzu
~/.spacemacs
:quelle
dotspacemacs-configuration-layers
. Fügen Sie es dort hinzu :)Ich benutze den Zweckmodus . Auf diese Weise können Sie eine ziemlich robuste Umgebung definieren.
Unter Verwendung
elpy
,pydoc
undneotree
ich habe eine ziemlich robuste Umgebung (in dem Sinne , dass Fenster nicht tun seltsame Dinge bei Fehlern). Dies kann auchgud-pdb
für das Debuggen ziemlich gut funktionieren .quelle
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:
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
quelle
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)
remote add debug-layer https://github.com/CeleritasCelery/spacemacs fetch debug-layer checkout --track debug-layer/debug-layer branch -a
Ö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 trepan3k
da es nicht mit Ihrer Python-Distribution vorinstalliert wird.Ö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 )
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!
quelle