Come si crea un robusto IDE Python con Emacs (come l'editor di testo)


56

Emacs è un eccellente editor - tuttavia si dice " per programmare è necessario prima un IDE " - quindi come si costruirà un IDE in Emacs ampiamente personalizzabile per PYTHON con tutte le funzionalità dell'IDE moderno. Voglio essere in grado di eseguire correttamente il debug, eseguire, compilare e gestire il codice. Finora ho letto sull'argomento che ho installato il pacchetto Elpy ma non sono sicuro di cos'altro bisogna sapere e fare per renderlo possibile.


4
Potresti per favore essere più specifico? "IDE" è diventato una parola d'ordine e una borsa per tutti i tipi di funzionalità.
Wasamasa,

Immagino che tu sia nuovo di Emacs e potresti voler dare un'occhiata alla mia guida Helile and Helm Projectile .
Tu Do

2
Una ricerca su Google per "emacs python ide" fornisce un discreto numero di hit. Potresti chiarire cosa hai già provato e cosa non è ancora soddisfacente?
Dan

1
Sto votando per chiudere questa domanda come fuori tema perché è troppo ampia.
Estratto il

4
Gli IDE possono essere utili, ma "per programmare è necessario prima un IDE" è semplicemente stupido. Un sacco di buon codice è stato scritto prima che ci fossero IDE.
offby1

Risposte:


57

La modalità Python predefinita in Emacs ha una serie di funzioni, incluso il completamento del codice basato sulla shell Python inferiore, in modo che possa essere usato come IDE di base senza alcun pacchetto aggiunto. Puoi usare anche altre funzioni Emacs di base con Python. Ad esempio, M-x compile/ M-x recompilepuò essere utilizzato per eseguire test. M-x pdbpuò eseguire il debugger di Python e si integra con l'ambiente gud di Emacs in modo da ottenere effettivamente punti di interruzione in linea.

Per approfondire, ci sono tre pacchetti principali per Emacs che provano a implementare un IDE Python più caratteristico (in ordine alfabetico):

Tutti forniscono all'incirca le stesse caratteristiche:

  • Completamento del codice utilizzando il completamento automatico o la modalità azienda
  • Navigazione del codice, ovvero vai a definizione / usi
  • Visualizzazione della firma della funzione tramite ElDoc
  • Documentazione introspezione sul simbolo al punto
  • Verifica della sintassi tramite flymake o flycheck
  • E alcuni di loro (almeno Elpy) hanno un supporto di refactoring di base

Oltre a questi, Emacs può anche aiutarti con molti flussi di lavoro, ma non prescrive nessuno. Quindi i prossimi passi dipendono molto da come stai usando Python. L'approccio migliore qui sarebbe quello di capire un buon flusso di lavoro Python e quindi provare a trovare i pacchetti Emacs che ti aiutano in modo specifico con i passaggi sul tuo flusso di lavoro.

Ad esempio, ci sono più pacchetti per lavorare con virtualenvs (Elpy, di cui parli, viene fornito con pyvenv) che probabilmente dovresti usare. Emacs-Jedi ha una modalità di accompagnamento per la navigazione del codice che può essere utile. Se usi molto IPython, c'è un Notebook IPython per Emacs. Esistono speciali modalità di supporto per lo sviluppo di Django ecc. Puoi andare su http://melpa.org/ e cercare Python per avere alcune idee.

Al di fuori di Python, potresti beneficiare di alcuni pacchetti Emacs extra che aiutano lo sviluppo in generale. Projectile è un pacchetto generico per la gestione dei progetti che offre una serie di funzionalità interessanti, come la ricerca in un progetto o lo spostamento tra test e implementazioni. Se non è stato ancora installato come dipendenza dal pacchetto IDE di tua scelta, puoi anche usare YASnippet che fornisce frammenti intelligenti per la generazione di codice. La raccolta di snippet predefinita ha un gran numero di snippet anche per Python.

Ma ancora una volta, i principali pacchetti IDE sopra ti daranno un ambiente sano - i prossimi passi dipenderanno notevolmente dai tuoi flussi di lavoro specifici.

(Informativa completa: sono l'autore di Elpy, quindi tienilo a mente quando leggi quanto sopra.)


1
Grazie mille per una risposta così esaustiva, si è rivelata estremamente utile in molti modi diversi da innumerevoli articoli.
Serial Exchangist

2
Grazie @Jorgen. Uso elpyquotidianamente e ho una domanda veloce sulla tua risposta, quando dici che " M-x pdbpuò eseguire il debugger Python" , come va esattamente? Ho un buffer Python e quando lo faccio M-x pdbricevo un prompt nel minibuffer che dice "Run pdb (like this): pdb my_file.py". Quando premo RETottengo "ImportError: nessun modulo chiamato pdb.pdb: 'pdb non è un pacchetto" Questo è con l'ultimo PYthon 3.4 dopo aver appena aggiornato pdb con pip, che mi dà:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina

1
Pdb viene fornito con Python. Non ho idea del perché non venga trovato, temo. :-(
Jorgen Schäfer

@ JorgenSchäfer se pdbnon viene trovato, ma pythonsi trova localmente, è possibile eseguire pdb utilizzando M-x pdbquindi "Esegui pdb (in questo modo): python -m pdb my_file.py`
ChrisFreeman

Trovo anche utile il pacchetto sphinx-doc per scrivere docstrings.
aprile

17

Vorrei incoraggiare gli utenti di evil-emacs a provare i spacemacs .

Ha un brillante strato di pitone, vedi i dettagli qui: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

A partire da ora, include:

  • Completamento automatico utilizzando la modalità anaconda
  • Navigazione del codice usando la modalità anaconda
  • Documentation Lookup utilizzando anaconda-mode e pylookup
  • Prova Runner usando nose.el o pytest
  • Ambiente virtuale usando pyvenv
  • La modalità semantica è abilitata
  • Supporto per Django tramite modalità pony

L'installazione è incredibilmente semplice, basta aggiungere la seguente riga al tuo ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))

per curiosità dove dovrei aggiungere esattamente questo .spacemacs? va benissimo? prima (defun dotspacemacs / layers () ...?
user391339

C'è un elenco chiamato dotspacemacs-configuration-layers. Aggiungilo lì :)
The Unfun Cat

4

Uso la modalità scopo . Ciò consente di definire un ambiente piuttosto robusto.

Utilizzando elpy, pydoce neotreeho un ambiente abbastanza robusto (nel senso che Windows non fa cose strane in caso di errori). Questo può anche funzionare abbastanza bene con il gud-pdbdebug.

configurazione di emacs-purpose per Python con Neotree, Python-Mode, Pydoc e Python inferiore (tramite elpy)


4

Ecco una guida completa: http://wikemacs.org/wiki/Python Elenca le soluzioni pronte per l'uso (lo starter kit Prelude , Spacemacs, soluzioni per la scienza dei dati , ...), anche pacchetti utili (Elpy) come ogni pacchetto necessario per migliorare il tuo ambiente. Ecco una panoramica .

refactoring

Questa è la funzione più "specifica per IDE". Emacs offre alcune possibilità grazie alla libreria Rope Python. Si scopre che il modo più semplice per installare e utilizzare è il pacchetto emacs-traad , in MELPA. Presenta, tra gli altri:

  • cambia la firma di un metodo: aggiungi / rimuovi un argomento, con refactoring tra progetti (ovviamente),
  • rinominare qualsiasi cosa,
  • trova definizioni, ...

La corda è inclusa anche in Elpy.

Manipolazione del codice più semplice

Abbiamo strumenti più semplici per aiutare il refactoring o nella manipolazione del codice: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Ad esempio, Projectile è fantastico (vedi altre risposte), abbiamo anche uno strumento per aggiungere decoratori , aggiungere / rimuovere / modificare argomenti , rinominare / copiare / commentare / uccidere un metodo, uno strumento per la generazione di codice, ...

Navigazione codice

Possiamo navigare come IDE con tag e cscope: trova le funzioni che lo chiamano, trova occorrenze, ecc.

Emacs ha anche fantastici pacchetti come imenu (helm-imenu), helm -swoop (grep interattivo in un buffer), emacs-helm-ag (ricercatore interattivo di argento in un progetto), ecc.

Esecuzione di test

È Elpy che fornisce un buon supporto per eseguire i test (con il django runner, elpy o un altro). Possiamo anche eseguire solo il test unitario in cui ci troviamo attualmente: molto utile! Quindi c'è un Hydra per aiutarlo (passare da un errore all'altro, passare al prompt di Python ...).

Fai supporto

Questo è un pacchetto Emacs non specifico per Python. Ma mi piace poter eseguire un obiettivo make da qualsiasi parte del progetto e scegliere il comando make con completamento . collegamento

Gestire il rientro

C'è un piccolo pacchetto, indent-tools , che fornisce comandi per lavorare direttamente con un blocco rientrato: passa al blocco di rientro successivo-precedente-parent-parent, indent / deindent / comment / copy / kill / fold the current-block , ecc. Perfetto per yaml, e anche per Python. Demo di doc e gif

Supporto Django

vedi Django . Elpy supporta il corridore django. Vedi elpy django doc . La modalità django (in melpa) ha modelli in evidenza, comandi rapidi, completamento dei comandi di gestione , ...

Anche importante: ottimo supporto per Git, Github e Gitlab

magithub può creare PR di github, possiamo recuperare problemi e inserire i loro riferimenti nei messaggi di commit, magit è fantastico,… vedi http://wikemacs.org/wiki/Git


Soprattutto in progetti di grandi dimensioni e / o disordinati il ​​refactoring è estremamente importante per non rompere qualcosa. Qualcuno sa come configurare emacs-traad con Spacemacs?
thinwybk,

1

Le risposte qui hanno fornito la maggior parte delle funzionalità importanti fornite da spacemacs, ma c'era sempre una caratteristica che non riuscivo a trovare - DEBUGGING (non ho trovato alcun decente strumento di debug che vada bene con spacemacs fino a poco tempo fa)

Quindi, come ho impostato un flusso di lavoro di debug per i miei spacemacs?

È in fase di sviluppo un ramo di funzionalità che utilizza il pacchetto realgud.el per fornire un'esperienza simile a IDE come il debug in spacemacs: https://github.com/CeleritasCelery/spacemacs Tutto ciò che devi fare è inserire questo ramo nel tuo .emacs. d directory e apportare alcune modifiche al file ~ / .emacs.d / layers / + lang / python / pacchetti.el

Passaggi dettagliati per configurare i spacemac per il debug (Fai un respiro profondo)

  1. Digita i seguenti comandi nel tuo terminale uno per uno. Ciò aggiungerà le modifiche dei spacemacs di CeleritaCelery in un ramo separato chiamato 'debug-layer'. Ciò significa che se qualcosa viene incasinato puoi sempre controllare il ramo principale e voilà! il tuo spacemac originale è tornato!

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

  1. Ora apri ~ / .emacs.d / layers / + lang / python / pacchetti.el e aggiungi la seguente funzione alla fine del file. ;; 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"))) Questa funzione usa il debugger trepan3k come debugger di python. È possibile modificare il valore in pdb o ipdb o in qualsiasi debugger desiderato. Se prevedi di utilizzare trepan3k assicurati di installarlo con pip sudo pip install trepan3kin quanto non viene preinstallato con la tua distribuzione Python.

  2. Ora apri il tuo file .spacemacs e il livello 'debug' all'interno di livelli di puntipacemacs come questo dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Quindi riavvia spacemacs e apri qualsiasi file Python Puoi iniziare il debug digitando Mx realgud: trepan3k

Questo avvierà la sessione di debug ed è possibile aggiungere, eliminare i punti di interruzione utilizzando le associazioni di tasti realgud spiegate qui: https://github.com/realgud/realgud#source-window-commands

Hai finito!


La risposta di clyton sopra, il repository git dovrebbe essere github.com/CeleritasCelery/debug-layer . Il PR per questo è attualmente aperto su github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke

(Non posso commentare a causa della mancanza di reputazione) Quanto sopra è stato unito al ramo di sviluppo dei veicoli spaziali, quindi il primo passo può essere ignorato.
Oddbodbloke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.