Comment créer un IDE Python robuste avec Emacs (en tant qu'éditeur de texte)

56

Emacs est un excellent éditeur - cependant, il est dit " pour programmer vous avez d'abord besoin d'un IDE " - alors, comment construire un IDE dans Emacs pour PYTHON, entièrement personnalisable, avec toutes les fonctionnalités de l'IDE moderne. Je veux pouvoir déboguer, exécuter, compiler et gérer efficacement du code. Jusqu'ici, j'ai lu sur le sujet que j'ai installé le paquet Elpy mais je ne suis pas sûr de ce qu'il faut savoir et faire pour rendre cela possible.

Échangiste en série
la source
4
Pourriez-vous s'il vous plaît être plus précis? "IDE" est devenu un mot à la mode et un sac à main pour toutes sortes de fonctionnalités.
Wasamasa
Je suppose que vous êtes nouveau dans Emacs et que vous voudrez peut-être consulter mon guide Helm and Helm Projectile .
Tu Do
2
Une recherche sur Google pour "emacs python ide" donne un bon nombre de résultats. Pourriez-vous préciser ce que vous avez déjà essayé et ce qui n’est pas encore satisfaisant?
Dan
1
Je vote pour clore cette question hors sujet car elle est trop large.
Drew
4
Les IDE peuvent être utiles, mais "programmer vous avez d’abord besoin d’un IDE", c’est idiot. Beaucoup de bons codes ont été écrits avant les IDE.
offby1

Réponses:

57

Le mode Python par défaut dans Emacs comporte un certain nombre de fonctionnalités, dont l'achèvement de code basé sur le shell Python inférieur, de sorte qu'il peut être utilisé en tant qu'EDI de base sans ajout de paquet. Vous pouvez également utiliser d’autres fonctions de base d’Emacs avec Python. Par exemple, M-x compile/ M-x recompilepeut être utilisé pour exécuter des tests. M-x pdbpeut exécuter le débogueur Python, qui s’intègre à l’environnement gud d’ Emacs afin d’obtenir des points d’arrêt en ligne.

Pour développer cela, il existe trois packages principaux pour Emacs qui tentent d'implémenter un environnement de développement intégré (IDE) Python plus fonctionnel (dans l'ordre alphabétique):

Ils offrent tous à peu près les mêmes caractéristiques:

  • Complétion du code en mode de saisie semi-automatique ou en mode société
  • Navigation dans le code, c'est aller à la définition / aux usages
  • Affichage de signature de fonction avec ElDoc
  • Introspection de la documentation sur le symbole en un point
  • Vérifications de syntaxe à l'aide de flymake ou flycheck
  • Et certains d'entre eux (au moins Elpy) ont un support de refactoring de base

Au-delà, Emacs peut également vous aider avec de nombreux flux de travail, mais il ne vous en prescrit aucun. Les prochaines étapes dépendent donc beaucoup de votre utilisation de Python. La meilleure approche ici serait de trouver un bon flux de travail Python, puis d'essayer de trouver des paquets Emacs qui vous aideront spécifiquement à suivre les étapes de votre flux de travail.

Par exemple, il existe plusieurs packages pour travailler avec virtualenvs (Elpy, que vous avez mentionné, livré avec pyvenv), que vous devriez probablement utiliser. Emacs-Jedi a un mode d' accompagnement pour la navigation dans le code qui peut être utile. Si vous utilisez beaucoup IPython, il existe un IPython Notebook for Emacs. Il existe des modes de support spéciaux pour le développement de Django, etc. - vous pouvez aller sur http://melpa.org/ et rechercher Python pour obtenir des idées.

En dehors de Python, vous pourriez bénéficier de paquets Emacs supplémentaires qui aident au développement en général. Projectile est un package générique de gestion de projet qui vous offre un certain nombre de fonctionnalités intéressantes, telles que la recherche dans un projet ou le passage d’un test à l’autre. S'il n'a pas encore été installé en tant que dépendance du paquet IDE de votre choix, vous pouvez également utiliser YASnippet, qui fournit des extraits intelligents pour la génération de code. La collection d'extraits de code par défaut contient également un grand nombre d'extraits de code pour Python.

Mais là encore, les principaux packages IDE ci-dessus vous procureront un environnement sain: les étapes suivantes dépendent en grande partie de vos flux de travail spécifiques.

(Divulgation complète: je suis l'auteur d'Elpy, tenez-en compte lors de la lecture de ce qui précède.)

Jorgen Schäfer
la source
1
Merci beaucoup pour cette réponse si complète, elle s’est révélée extrêmement utile, contrairement à d’innombrables articles.
Échange en série
2
Merci @ Jorgen. J'utilise elpyquotidiennement et ai une petite question sur votre réponse, quand vous dites que " M-x pdbpeut exécuter le débogueur Python" , comment est-ce exactement? J'ai un tampon Python, et quand je le fais M-x pdbje reçois une invite dans le mini- tampon qui dit "Run pdb (like this): pdb my_file.py". Quand j'appuie sur, RETj'obtiens "ImportError: Aucun module nommé pdb.pdb:" pdb n'est pas un paquet "Ceci est avec le dernier PYthon 3.4 après la mise à niveau de pdb avec pip, ce qui me donne:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina
1
Pdb est livré avec Python. Je n'ai aucune idée pourquoi il ne serait pas trouvé, j'ai peur. :-(
Jorgen Schäfer
@ JorgenSchäfer si pdbn'est pas trouvé, mais pythonest trouvé localement, alors vous pouvez exécuter pdb en utilisant M-x pdbensuite "Exécuter pdb (comme ceci): python -m pdb mon_fichier.py`
ChrisFreeman
Je trouve également le paquet sphinx-doc utile pour écrire des docstrings.
aadcg
17

J'encourage les utilisateurs d'Emacs-méchants à essayer les spacemacs .

Il a une couche brillante de python, voyez les détails ici: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

A partir de maintenant, il comprend:

  • Complétion automatique en mode anaconda
  • Navigation de code en mode anaconda
  • Consultation de documentation en mode anaconda et pylookup
  • Test Runner en utilisant nose.el ou pytest
  • Environnement virtuel utilisant pyvenv
  • Le mode sémantique est activé
  • Support Django via le mode poney

L'installation est ridiculement facile, ajoutez simplement la ligne suivante à votre ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))
Le chat
la source
par curiosité, où exactement dans .spacemacs devrais-je ajouter ceci? le top est-il ok? before (defun dotspacemacs / layers () ...?
user391339
Il y a une liste appelée dotspacemacs-configuration-layers. Ajoutez-le ici :)
The Unfun Cat
4

J'utilise le mode but . Cela vous permet de définir un environnement assez robuste.

En utilisant elpy, pydocet neotreej’ai un environnement assez robuste (dans le sens où les fenêtres ne font pas des choses étranges par erreur). Cela peut aussi très bien fonctionner gud-pdbpour le débogage.

Configuration emacs-purpose pour python avec neotree, python-mode, pydoc et python inférieur (via elpy)

Nidish Narayanaa
la source
4

Voici un guide complet: http://wikemacs.org/wiki/Python Il répertorie les solutions prêtes à l'emploi (le kit de démarrage Prelude , Spacemacs, les solutions pour l' informatique ,…), les gros packages utiles (Elpy), ainsi que comme chaque paquet dont vous avez besoin pour améliorer votre environnement. Voici un aperçu .

Refactoring

C'est la fonctionnalité la plus "spécifique à l'IDE". Emacs a quelques possibilités grâce à la bibliothèque Rope python. Il s’avère que le moyen le plus simple d’installer et d’utiliser le paquet emacs-traad , dans MELPA. Il comporte, entre autres:

  • changer une signature de méthode: ajouter / supprimer un argument, avec refactoring entre projets (bien sûr),
  • renommer n'importe quoi,
  • trouver des définitions,…

La corde est également incluse dans Elpy.

Manipulation simplifiée du code

Nous avons des outils plus simples pour aider à refactoriser ou à manipuler du code: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Par exemple, Projectile est génial (voir autres réponses), nous avons également un outil pour ajouter des décorateurs , ajouter / supprimer / modifier des arguments , renommer / copier / commenter / tuer une méthode, un outil pour la génération de code,…

Code de navigation

Nous pouvons naviguer comme un IDE avec des balises et cscope: trouver les fonctions qui appellent celle-ci, trouver des occurrences, etc.

Emacs propose également d’excellents forfaits comme imenu (helm-imenu), helm-swoop (grep interactif dans un tampon), emacs-helm-ag (chercheur d’argent interactif dans un projet), etc.

Lancer des tests

C'est Elpy qui fournit un bon support pour exécuter des tests (avec le coureur django, elpy ou un autre). Nous pouvons même exécuter uniquement le test unitaire dans lequel nous sommes actuellement: très pratique! Il y a donc une Hydra pour vous aider (cicle entre les erreurs, basculez vers l'invite python…).

Faire un soutien

Ceci est un paquet Emacs non spécifique à Python. Mais j'aime bien pouvoir exécuter une cible make à partir de n'importe où dans le projet et choisir la commande make avec achèvement . lien

Traiter avec l'indentation

Il y a un petit paquetage, indent-tools , qui donne aux commandes de travailler directement avec un bloc indenté: déplacez vers le bloc d'indentation parent-enfant précédent précédent, indent / deindent / comment / copy / kill / fold du bloc current , etc. Parfait pour yaml et aussi pour Python. Doc et gif demo

Support de Django

voir Django . Elpy soutient le coureur de Django. Voir elpy django doc . Django-mode (dans melpa) contient des modèles en surbrillance, des commandes rapides, l' achèvement des commandes de gestion ,…

Egalement important: le support de Git, Github et Gitlab

magithub peut créer des relations publiques github, nous pouvons récupérer des problèmes et insérer leur référence dans des messages commit, magit is great,… see http://wikemacs.org/wiki/Git

Ehvince
la source
Surtout dans les projets plus importants et / ou sabotés, le refactoring est extrêmement important pour ne pas casser quelque chose. Est-ce que quelqu'un sait comment configurer emacs-traad avec Spacemacs?
thinwybk
1

Les réponses ici ont fourni la plupart des fonctionnalités importantes fournies par spacemacs mais il y avait toujours une fonctionnalité que je ne pouvais pas trouver: le débogage (je n'ai trouvé aucun outil de débogage décent qui fonctionne bien avec spacemacs jusqu'à une date récente)

Alors, comment ai-je mis en place un workflow de débogage pour mes spacemacs?

Il existe une branche en cours de développement qui utilise le paquet realgud.el pour fournir une expérience de débogage semblable à celle de IDE dans spacemacs: https://github.com/CeleritasCelery/spacemacs Tout ce que vous avez à faire est de tirer cette branche vers votre .emac. d et faites quelques changements dans votre fichier ~ / .emacs.d / layers / + lang / python / packages.el

Étapes détaillées pour configurer les spacemacs pour le débogage (respirez à fond)

  1. Tapez les commandes ci-dessous dans votre terminal une par une. Ceci ajoutera les modifications de spacemacs de CeleritaCelery dans une branche distincte nommée 'couche de débogage'. Cela signifie que si quelque chose ne va pas, vous pouvez toujours accéder à la branche principale et le tour est joué! votre spacemacs d'origine est de retour!

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

  1. Ouvrez maintenant le fichier ~ / .emacs.d / layers / + lang / python / packages.el et ajoutez la fonction ci-dessous à la fin du fichier. ;; 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"))) Cette fonction utilise le débogueur trepan3k comme débogueur Python. Vous pouvez modifier la valeur en pdb ou ipdb ou selon le débogueur que vous préférez. Si vous envisagez d’utiliser trepan3k, assurez-vous de l’installer avec pip sudo pip install trepan3kcar il n’est pas livré avec votre distribution Python pré-installée.

  2. Ouvrez maintenant votre fichier .spacemacs et votre couche 'debug' dans les couches de configuration de dotspacemacs comme ceci dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Redémarrez ensuite spacemacs et ouvrez n’importe quel fichier python. Vous pouvez lancer le débogage en tapant Mx realgud: trepan3k

Cela va démarrer la session de débogage et vous pouvez ajouter, supprimer des points d'arrêt à l'aide de realgud keybindings expliquée ici: https://github.com/realgud/realgud#source-window-commands

Vous avez terminé!

Clyton Dantis
la source
La réponse de clyton ci-dessus, le dépôt git devrait être github.com/CeleritasCelery/debug-layer . Le PR correspondant est actuellement ouvert à l' adresse github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke
(Je ne peux pas faire de commentaire en raison d'un manque de réputation) Ce qui précède a été intégré à la branche de développement de spacemacs. Par conséquent, la première étape peut être ignorée.
Oddbodbloke