Jak stworzyć solidne IDE w Pythonie za pomocą Emacsa (jako edytora tekstu)

56

Emacs to doskonały edytor - mówi się jednak, że „ aby programować, potrzebujesz najpierw IDE ” - więc jak zbudować IDE w Emacsie z wieloma możliwościami dostosowania, ze wszystkimi funkcjami nowoczesnego IDE. Chcę mieć możliwość skutecznego debugowania, uruchamiania i kompilowania kodu oraz zarządzania nim. Do tej pory przeczytałem na ten temat, że zainstalowałem pakiet Elpy, ale nie jestem pewien, co jeszcze trzeba wiedzieć i robić, aby to umożliwić.

Seryjny Exchangist
źródło
4
Czy mógłbyś być bardziej szczegółowy? „IDE” stało się modnym hasłem i „chwyć torbę” dla wszystkich funkcji.
wasamasa
Wydaje mi się, że jesteś nowy w Emacsie i możesz zajrzeć do mojego przewodnika Hełm i pocisk steru .
Tu Do
2
Wyszukiwania google dla „emacs IDE Pythona” daje sporą liczbę trafień. Czy możesz wyjaśnić, co już próbowałeś, a co nie jest jeszcze satysfakcjonujące?
Dan
1
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ jest ono zbyt ogólne.
Drew
4
IDE mogą być przydatne, ale „aby programować najpierw potrzebujesz IDE” jest po prostu głupie. Napisano mnóstwo dobrego kodu, zanim pojawiły się IDE.
offby1

Odpowiedzi:

57

Domyślny tryb Pythona w Emacsie ma wiele funkcji, w tym uzupełnianie kodu w oparciu o gorszą powłokę Pythona, dzięki czemu można go używać jako podstawowego IDE bez żadnych dodanych pakietów. W Pythonie możesz także używać innych podstawowych funkcji Emacsa. Na przykład M-x compile/ M-x recompilemoże być użyte do uruchomienia testów. M-x pdbmoże uruchomić debuger Pythona i integruje się ze środowiskiem GUD Emacsa, dzięki czemu można uzyskać wbudowane punkty przerwania.

Aby to rozwinąć, istnieją trzy główne pakiety dla Emacsa, które próbują zaimplementować bardziej funkcjonalne IDE Pythona (w kolejności alfabetycznej):

Wszystkie zapewniają w przybliżeniu te same funkcje:

  • Uzupełnianie kodu przy użyciu autouzupełniania lub w trybie firmowym
  • Nawigacja kodowa, to znaczy przejdź do definicji / zastosowań
  • Wyświetlanie sygnatury funkcji za pomocą ElDoc
  • Dokumentacja introspekcji na symbolu w punkcie
  • Sprawdza składnię za pomocą Flymake lub Flycheck
  • I niektóre z nich (przynajmniej Elpy) mają podstawowe wsparcie refaktoryzacji

Poza tym Emacs może również pomóc ci w wielu przepływach pracy, ale nie przepisuje żadnego. Kolejne kroki zależą więc bardzo od tego, jak korzystasz z Pythona. Najlepszym rozwiązaniem byłoby tutaj wymyślenie dobrego przepływu pracy w Pythonie, a następnie próba znalezienia pakietów Emacsa, które pomogą ci konkretnie w krokach w twoim przepływie pracy.

Na przykład istnieje wiele pakietów do pracy z virtualenvs (Elpy, o których wspominasz, zawiera pyvenv), których prawdopodobnie powinieneś użyć. Emacs-Jedi ma tryb towarzyszący do przeglądania kodu, który może być przydatny. Jeśli często korzystasz z IPython, istnieje IPython Notebook dla Emacsa. Istnieją specjalne tryby wsparcia dla rozwoju Django itp. - możesz przejść do http://melpa.org/ i poszukać Pythona, aby uzyskać pomysły.

Poza Pythonem możesz skorzystać z dodatkowych pakietów Emacsa, które ogólnie pomagają w programowaniu. Projectile to ogólny pakiet do zarządzania projektami, który oferuje szereg interesujących funkcji, takich jak wyszukiwanie w projekcie lub przechodzenie między testami a implementacjami. Jeśli nie został jeszcze zainstalowany jako zależność od wybranego pakietu IDE, możesz także użyć YASnippet, który zapewnia inteligentne fragmenty kodu do generowania kodu. Domyślna kolekcja fragmentów zawiera także wiele fragmentów dla Pythona.

Ale znowu, główne pakiety IDE powyżej zapewnią ci rozsądne środowisko - kolejne kroki w dużym stopniu zależą od twoich konkretnych przepływów pracy.

(Pełne ujawnienie: jestem autorem Elpy, więc weź to pod uwagę, czytając powyższe.)

Jorgen Schäfer
źródło
1
Dziękuję bardzo za tak kompleksową odpowiedź, która okazała się niezwykle przydatna w sposób, w jaki niezliczone artykuły tego nie zrobiły.
Serial Exchangist
2
Dzięki @Jorgen. Używam elpycodziennie i mam krótkie pytanie o twoją odpowiedź, kiedy mówisz, że M-x pdbmożna uruchomić debugger Pythona” , jak to dokładnie jest? Mam bufor w języku Python, a gdy to zrobię M-x pdb, w minibuforze pojawia się monit "Run pdb (like this): pdb my_file.py". Kiedy naciskam, RETpojawia się komunikat „ImportError: Żaden moduł o nazwie pdb.pdb:„ pdb nie jest pakietem ”. Jest to najnowszy PYthon 3.4 po uaktualnieniu pdb za pomocą pip, co daje mi:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina
1
Pdb pochodzi z Pythona. Obawiam się, że nie mam pojęcia, dlaczego go nie znaleziono. :-(
Jorgen Schäfer
@ JorgenSchäfer, jeśli pdbnie zostanie znaleziony, ale pythonzostanie znaleziony lokalnie, możesz uruchomić pdb, używając M-x pdb„Uruchom pdb (jak to): python -m pdb my_file.py`
ChrisFreeman
Uważam też, że pakiet sphinx-doc jest przydatny do pisania dokumentów.
aadcg
17

Zachęcałbym użytkowników emacia zła do wypróbowania kosmicznych znaków .

Ma świetną warstwę pytona, zobacz szczegóły tutaj: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

Obecnie obejmuje:

  • Automatyczne uzupełnianie za pomocą trybu anakondy
  • Nawigacja za pomocą kodu w trybie anakondy
  • Wyszukiwanie dokumentacji przy użyciu trybu anakonda i pylookup
  • Testuj Runnera używając nose.el lub pytest
  • Środowisko wirtualne za pomocą pyvenv
  • Tryb semantyczny jest włączony
  • Obsługa Django za pośrednictwem trybu kucyka

Instalacja jest niezwykle łatwa, wystarczy dodać następujący wiersz do ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))
The Unfun Cat
źródło
z ciekawości, gdzie dokładnie w .spacemacs powinienem to dodać? czy na górze jest ok? before (defun dotspacemacs / layer () ...?
user391339
Istnieje lista o nazwie dotspacemacs-configuration-layers. Dodaj to :)
The Unfun Cat
4

Używam trybu celu . Pozwala to zdefiniować dość solidne środowisko.

Korzystanie elpy, pydoci neotreemam dość solidne środowisko (w tym sensie, że okna nie robią dziwne rzeczy na błędy). Może to również działać całkiem dobrze przy gud-pdbdebugowaniu.

konfiguracja emacsa dla Pythona z neotree, trybem python, pydoc i gorszym pythonem (przez elpy)

Nidish Narayanaa
źródło
4

Oto obszerny przewodnik: http://wikemacs.org/wiki/Python Zawiera listę gotowych do użycia rozwiązań ( zestaw startowy Prelude , Spacemacs, rozwiązania dla nauki danych ,…), a także duże przydatne pakiety (Elpy) jak każdy pakiet, którego potrzebujesz, aby poprawić swoje środowisko. Oto przegląd .

Refaktoryzacja

Jest to najbardziej „specyficzna dla IDE” funkcja. Emacs jako pewne możliwości dzięki bibliotece Python Rope. Okazuje się, że najłatwiejszym sposobem instalacji i użytkowania jest pakiet emacs-traad w MELPA. Posiada między innymi:

  • zmień podpis metody: dodaj / usuń argument, z refaktoryzacją między projektami (oczywiście),
  • zmień nazwę czegokolwiek,
  • znajdź definicje…

Lina jest również zawarta w Elpy.

Prostsza manipulacja kodem

Mamy prostsze narzędzia do refaktoryzacji lub manipulacji kodem: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Na przykład Pocisk jest świetny (zobacz inne odpowiedzi), mamy również narzędzie do dodawania dekoratorów , dodawania / usuwania / edycji argumentów , zmiany nazwy / kopiowania / komentarza / zabicia metody, narzędzie do generowania kodu,…

Nawigacja po kodzie

Możemy nawigować jako IDE z tagami i cscope: znaleźć funkcje wywołujące tę funkcję, znaleźć zdarzenia itp.

Emacs ma również świetne pakiety, takie jak imenu (helm-imenu), helm-swoop (interaktywny grep w buforze), emacs-helm-ag (interaktywna wyszukiwarka srebra w projekcie) itp.

Uruchamianie testów

To Elpy zapewnia dobre wsparcie do uruchamiania testów (z django runner, elpy lub innym). Możemy nawet przeprowadzić tylko test jednostkowy, w którym się obecnie znajdujemy: bardzo przydatny! Jest więc Hydra, która może w tym pomóc (cicle między błędami, przejdź do pytania w python…).

Zrób wsparcie

Jest to pakiet Emacsa, który nie jest specyficzny dla Pythona. Ale lubię być w stanie uruchomić make make z dowolnego miejsca w projekcie i wybrać polecenie make z ukończeniem . połączyć

Radzenie sobie z wcięciem

Istnieje mały pakiet, narzędzia wcięcia , które dają polecenia do pracy bezpośrednio z wciętym blokiem: przejdź do następnego-poprzedniego-potomnego-rodzica bloku wcięcia, wcięcia / deindent / komentarz / kopiuj / zabij / złóż bieżący blok , itp. Idealny dla yaml, a także dla Pythona. Wersja demonstracyjna dokumentów i gifów

Wsparcie Django

patrz Django . Elpy obsługuje biegacza django. Zobacz elpy django doc . Tryb django (w melpa) ma podświetlanie szablonów, szybkie polecenia, uzupełnianie poleceń zarządzania ,…

Ważne jest także: świetne wsparcie dla Git, Github i Gitlab

magithub może tworzyć PR github, możemy pobierać problemy i wstawiać ich referencje w komunikatach zatwierdzania, magit jest świetny,… zobacz http://wikemacs.org/wiki/Git

Ehvince
źródło
Zwłaszcza w większych i / lub rozproszonych projektach refaktoryzacja jest bardzo ważna, aby niczego nie złamać. Czy ktoś wie, jak skonfigurować emacs-traad za pomocą Spacemacs?
thinwybk
1

Odpowiedzi tutaj dostarczyły większość ważnych funkcji, które zapewnia spacemacs, ale zawsze była jedna cecha, której nie mogłem znaleźć - DEBUGGING (do niedawna nie znalazłem żadnych przyzwoitych narzędzi do debugowania, które działałyby dobrze w przypadku spacemacs)

Jak więc skonfigurować przepływ pracy debugowania dla moich spacemacs?

W przygotowaniu jest gałąź funkcji, która wykorzystuje pakiet realgud.el, aby zapewnić zbliżone do IDE doświadczenie debugowania w spacemacs: https://github.com/CeleritasCelery/spacemacs Wszystko, co musisz zrobić, to przeciągnąć tę gałąź do pliku .emacs. d katalogu i wprowadź zmiany w pliku ~ / .emacs.d / layer / + lang / python / packages.el

Szczegółowe kroki, aby skonfigurować spacje do debugowania (Weź głęboki oddech)

  1. Wpisz kolejno następujące polecenia w swoim terminalu. Spowoduje to dodanie zmian znaków kosmicznych CeleritaCelery w osobnej gałęzi o nazwie „warstwa debugowania”. Oznacza to, że jeśli coś się popsuje, zawsze możesz sprawdzić gałąź master i voila! Twoje oryginalne spacemacs powróciły!

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

  1. Teraz otwórz ~ / .emacs.d / layer / + lang / python / packages.el i dodaj poniższą funkcję na końcu pliku. ;; 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"))) Ta funkcja używa debuggera trepan3k jako debuggera python. Możesz zmienić wartość na pdb lub ipdb lub dowolny inny debugger. Jeśli planujesz używać trepan3k, upewnij się, że instalujesz go z pipem, sudo pip install trepan3kponieważ nie jest on wstępnie instalowany z dystrybucją Pythona.

  2. Teraz otwórz plik .spacemacs i warstwę „debugowania” w warstwach konfiguracyjnych dotspacemacs w ten sposób dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Następnie uruchom ponownie spacemacs i otwórz dowolny plik Pythona. Możesz rozpocząć debugowanie, wpisując Mx realgud: trepan3k

Spowoduje to rozpoczęcie sesji debugowania i możesz dodawać, usuwać punkty przerwania za pomocą skrótów klawiszowych realgud wyjaśnionych tutaj: https://github.com/realgud/realgud#source-window-commands

Jesteś skończony!

Clyton Dantis
źródło
powyższa odpowiedź clyton, repozytorium git powinno być github.com/CeleritasCelery/debug-layer . PR dla tego jest obecnie otwarty na github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke
(Nie mogę komentować z powodu braku reputacji) Powyższe zostało scalone z gałęzią rozwijania kosmicznych znaków, więc krok pierwszy można zignorować.
Oddbodbloke