¿Cómo se crea un IDE Python robusto con Emacs (como editor de texto)

56

Emacs es un excelente editor; sin embargo, se dice que " para programar primero necesita un IDE ", entonces, ¿cómo crearía un IDE en el Emacs para PYTHON ampliamente personalizable con todas las características del IDE moderno? Quiero poder depurar, ejecutar y compilar de manera efectiva y administrar el código. Hasta ahora he leído sobre el tema en el que he instalado el paquete Elpy, pero no estoy seguro de qué más necesita saber y hacer para que esto sea posible.

Intercambiador en serie
fuente
44
¿Podría por favor ser más específico? "IDE" se ha convertido en una palabra de moda y una bolsa de mano para todo tipo de características.
wasamasa
Supongo que eres nuevo en Emacs y es posible que quieras consultar mi guía Helm and Helm Projectile .
Tu Do
2
Una búsqueda en Google de "emacs python ide" da un buen número de resultados. ¿Podría aclarar lo que ya ha probado y lo que aún no es satisfactorio?
Dan
1
Estoy votando para cerrar esta pregunta como fuera de tema porque es demasiado amplia.
Drew
44
Los IDE pueden ser útiles, pero "para programar primero necesita un IDE" es una tontería. Se escribieron muchos códigos buenos antes de que existieran IDEs.
offby1

Respuestas:

57

El modo predeterminado de Python en Emacs tiene una serie de características, incluida la finalización del código basada en el shell inferior de Python, por lo que puede usarse como un IDE básico sin ningún paquete agregado. También puede usar otras funciones centrales de Emacs con Python. Por ejemplo, M-x compile/ M-x recompilese puede usar para ejecutar pruebas. M-x pdbpuede ejecutar el depurador de Python, y se integra con el entorno gud de Emacs para que realmente obtenga puntos de interrupción en línea.

Para ampliar eso, hay tres paquetes principales para Emacs que intentan implementar un IDE de Python más funcional (en orden alfabético):

Todos proporcionan aproximadamente las mismas características:

  • Finalización de código utilizando el modo de autocompletado o de empresa
  • Código de navegación, es decir, ir a definición / usos
  • Visualización de firma de función utilizando ElDoc
  • Introspección de documentación sobre el símbolo en el punto
  • Comprobaciones de sintaxis con flymake o flycheck
  • Y algunos de ellos (al menos Elpy) tienen soporte básico de refactorización

Más allá de estos, Emacs también puede ayudarlo con muchos flujos de trabajo, pero no prescribe ninguno. Entonces, los siguientes pasos dependen mucho de cómo esté usando Python. El mejor enfoque aquí sería encontrar un buen flujo de trabajo de Python y luego tratar de encontrar paquetes de Emacs que lo ayuden específicamente con los pasos de su flujo de trabajo.

Por ejemplo, hay múltiples paquetes para trabajar con virtualenvs (Elpy, que usted menciona, viene con pyvenv) que probablemente debería usar. Emacs-Jedi tiene un modo de navegación de código que puede ser útil. Si usa mucho IPython, hay un cuaderno de IPython para Emacs. Existen modos de soporte especiales para el desarrollo de Django, etc. - puede ir a http://melpa.org/ y buscar Python para obtener algunas ideas.

Fuera de Python, puede beneficiarse de algunos paquetes adicionales de Emacs que ayudan con el desarrollo en general. Projectile es un paquete genérico para la gestión de proyectos que le brinda una serie de características interesantes, como buscar en un proyecto o moverse entre pruebas e implementaciones. Si aún no se ha instalado como una dependencia del paquete IDE de su elección, también puede usar YASnippet, que proporciona fragmentos inteligentes para la generación de código. La colección de fragmentos predeterminada también tiene una gran cantidad de fragmentos para Python.

Pero, una vez más, los principales paquetes IDE anteriores le brindarán un entorno sano: los próximos pasos dependen en gran medida de sus flujos de trabajo específicos.

(Divulgación completa: soy el autor de Elpy, así que tenlo en cuenta al leer lo anterior).

Jorgen Schäfer
fuente
1
Muchas gracias por una respuesta tan completa, ha demostrado ser muy útil en formas que innumerables artículos no lo han hecho.
Intercambiador de serie el
2
Gracias @Jorgen. Lo uso a elpydiario y tengo una pregunta rápida sobre su respuesta, cuando dice que " M-x pdbpuede ejecutar el depurador de Python" , ¿cómo es esto exactamente? Tengo un búfer de Python, y cuando lo hago M-x pdb, aparece un mensaje en el minibúfer que dice "Run pdb (like this): pdb my_file.py". Cuando RETpresiono me sale "ImportError: ningún módulo llamado pdb.pdb: 'pdb no es un paquete" Esto es con el último PYthon 3.4 después de actualizar pdb con pip, lo que me da:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina
1
Pdb viene con Python. No tengo idea de por qué no se encuentra, me temo. :-(
Jorgen Schäfer
@ JorgenSchäfer si pdbno se encuentra, pero pythonse encuentra localmente, puede ejecutar pdb usando M-x pdb"Ejecutar pdb (así): python -m pdb my_file.py`
ChrisFreeman
También encuentro útil el paquete sphinx-doc para escribir cadenas de documentos.
Aadcg
17

Animaría a los usuarios de evil-emacs a probar spacemacs .

Tiene una capa de pitón brillante, vea los detalles aquí: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

A partir de ahora, incluye:

  • Autocompletar usando el modo anaconda
  • Navegación de código usando el modo anaconda
  • Búsqueda de documentación usando anaconda-mode y pylookup
  • Test Runner usando nose.el o pytest
  • Entorno virtual usando pyvenv
  • El modo semántico está habilitado
  • Soporte de Django a través del modo pony

La instalación es ridículamente fácil, solo agregue la siguiente línea a su ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))
El gato no divertido
fuente
por curiosidad, ¿dónde exactamente en .spacemacs debo agregar esto? ¿está bien la parte superior? antes (defun dotspacemacs / layers () ...?
user391339
Hay una lista llamada dotspacemacs-configuration-layers.
Agrégalo
4

Yo uso el modo de propósito . Esto le permite definir un entorno bastante robusto.

Utilizando elpy, pydocy neotreetengo un entorno bastante robusto (en el sentido de que las ventanas no hacen cosas extrañas en caso de error). Esto también puede funcionar bastante bien gud-pdbpara la depuración.

Configuración de propósito de emacs para python con neotree, python-mode, pydoc y python inferior (a través de elpy)

Nidish Narayanaa
fuente
4

Aquí hay una guía completa: http://wikemacs.org/wiki/Python Enumera soluciones listas para usar (el kit de inicio Prelude , Spacemacs, soluciones para ciencia de datos , ...), grandes paquetes útiles (Elpy), también como cada paquete que necesita para mejorar su entorno. Aquí hay una descripción general .

Refactorización

Esta es la característica más "específica de IDE". Emacs como algunas posibilidades gracias a la biblioteca Rope python. Resulta que la forma más fácil de instalar y usar es el paquete emacs-traad , en MELPA. Cuenta, entre otros:

  • cambiar la firma de un método: agregar / eliminar un argumento, con refactorización entre proyectos (por supuesto),
  • renombrar cualquier cosa,
  • encontrar definiciones, ...

La cuerda también está incluida en Elpy.

Manipulación de código más simple

Tenemos herramientas más simples para ayudar a refactorizar o manipular código: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Por ejemplo, Projectile es genial (ver otras respuestas), también tenemos una herramienta para agregar decoradores , agregar / eliminar / editar argumentos , renombrar / copiar / comentar / eliminar un método, una herramienta para la generación de código, ...

Código de navegación

Podemos navegar como un IDE con etiquetas y cscope: encontrar las funciones que llaman a esta, buscar ocurrencias, etc.

Emacs también tiene excelentes paquetes como imenu (helm-imenu), helm-swoop (grep interactivo en un búfer), emacs-helm-ag (buscador de plata interactivo en un proyecto), etc.

Ejecutando pruebas

Es Elpy que proporciona un buen soporte para ejecutar pruebas (con el django runner, elpy u otro). Incluso podemos ejecutar solo la prueba de unidad en la que nos encontramos actualmente: ¡muy útil! Entonces, hay una Hydra para ayudar con eso (ciclo entre los errores, cambie al indicador de Python ...).

Hacer apoyo

Este es un paquete de Emacs no específico para Python. Pero me gusta poder ejecutar un objetivo de creación desde cualquier parte del proyecto y elegir el comando de creación con finalización . enlazar

Tratando con la sangría

Hay un pequeño paquete, indent-tools , que proporciona comandos para trabajar directamente con un bloque sangrado: pasar al siguiente bloque de sangría padre-hijo anterior, sangrar / deindent / comment / copy / kill / fold el bloque actual , Perfecto para yaml, y también para Python. Doc y gif de demostración

Soporte Django

Ver Django . Elpy es compatible con el corredor django. Ver elpy django doc . django-mode (en melpa) tiene resaltado de plantillas, comandos rápidos, finalización de comandos de administración , ...

También importante: excelente soporte para Git, Github y Gitlab

magithub puede crear relaciones públicas de github, podemos buscar problemas e insertar su referencia en los mensajes de confirmación, magit es genial, ... ver http://wikemacs.org/wiki/Git

Ehvince
fuente
Especialmente en proyectos más grandes y / o recortados, la refactorización es súper importante para no romper algo. ¿Alguien sabe cómo configurar emacs-traad con Spacemacs?
thinwybk
1

Las respuestas aquí han proporcionado la mayoría de las características importantes que proporciona spacemacs, pero siempre hubo una característica que no pude encontrar: DEPURACIÓN (No encontré ninguna herramienta de depuración decente que funcione bien con los spacemacs hasta hace muy poco)

Entonces, ¿cómo configuré un flujo de trabajo de depuración para mis spacemacs?

Hay una rama de características en desarrollo que utiliza el paquete realgud.el para proporcionar una experiencia de depuración similar a IDE en spacemacs: https://github.com/CeleritasCelery/spacemacs Todo lo que tiene que hacer es colocar esta rama en sus .emacs. d directorio y realice algunos cambios en su archivo ~ / .emacs.d / layers / + lang / python / packages.el

Pasos detallados para configurar los spacemacs para la depuración (Respire profundamente)

  1. Escriba los siguientes comandos en su terminal uno por uno. Esto agregará los cambios de los spacemacs de CeleritaCelery en una rama separada llamada 'debug-layer'. Esto significa que si algo se arruina, ¡siempre puedes pagar la rama maestra y listo! ¡Vuelven sus SpaceMac originales!

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

  1. Ahora abra ~ / .emacs.d / layers / + lang / python / packages.el y agregue la siguiente función al final del archivo ;; 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"))) Esta función utiliza el depurador trepan3k como depurador de python. Puede cambiar el valor a pdb o ipdb o al depurador que desee. Si planea usar trepan3k, asegúrese de instalarlo con pip, sudo pip install trepan3kya que no viene preinstalado con su distribución de python.

  2. Ahora abra su archivo .spacemacs y la capa 'debug' dentro de dotspacemacs-configuration-layers como esta dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Luego reinicie los spacemacs y abra cualquier archivo de Python. Puede comenzar la depuración escribiendo Mx realgud: trepan3k

Esto iniciará la sesión de depuración y puede agregar, eliminar puntos de interrupción utilizando las combinaciones de teclas de realgud explicadas aquí: https://github.com/realgud/realgud#source-window-commands

Ya terminaste!

Clyton Dantis
fuente
La respuesta de Clyton anterior, el repositorio de git debe ser github.com/CeleritasCelery/debug-layer . El RP para esto está actualmente abierto en github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke
(No puedo comentar debido a la falta de reputación) Lo anterior se ha fusionado con la rama de desarrollo de los spacemacs, por lo que se puede ignorar el primer paso.
Oddbodbloke