Como você cria um IDE Python robusto com o Emacs (como editor de texto)

56

O Emacs é um excelente editor - no entanto, é dito " para programar você precisa primeiro de um IDE " - então como você criaria um IDE no Emacs extensivamente personalizável para PYTHON com todos os recursos do IDE moderno. Eu quero poder efetivamente depurar, executar, compilar e gerenciar código. Até agora, li o assunto em que instalei o pacote Elpy, mas não tenho certeza do que mais precisamos saber e fazer para tornar isso possível.

Trocador serial
fonte
4
Poderia ser mais específica? "IDE" tornou-se um chavão e uma sacola para todos os tipos de recursos.
Wasamasa 01/03
Eu acho que você é novo no Emacs e pode querer dar uma olhada no meu guia Helm and Helm Projectile .
Tu Do
2
Uma pesquisa no google por "emacs python ide" fornece um número razoável de ocorrências. Você poderia esclarecer o que já tentou e o que ainda não é satisfatório?
Dan
11
Estou votando para encerrar esta questão como fora de tópico, porque é muito ampla.
Tirou
4
Os IDEs podem ser úteis, mas "para programar primeiro você precisa de um IDE" é simplesmente bobo. Muitos códigos bons foram escritos antes que existissem IDEs.
offby1

Respostas:

57

O modo Python padrão no Emacs possui vários recursos, incluindo a conclusão de código com base no shell Python inferior, para que possa ser usado como um IDE básico sem nenhum pacote adicionado. Você também pode usar outras funções principais do Emacs com o Python. Por exemplo, M-x compile/ M-x recompilepode ser usado para executar testes. M-x pdbpode executar o depurador Python e se integra ao ambiente gud do Emacs para que você obtenha pontos de interrupção em linha.

Para expandir isso, existem três pacotes principais para o Emacs que tentam implementar um IDE Python com mais recursos (em ordem alfabética):

Todos eles fornecem aproximadamente os mesmos recursos:

  • Conclusão de código usando o preenchimento automático ou o modo empresa
  • Navegação de código, ou seja, vá para definição / usos
  • Função de exibição de assinatura usando ElDoc
  • Introspecção de documentação no símbolo no ponto
  • Verificações de sintaxe usando flymake ou flycheck
  • E alguns deles (pelo menos Elpy) têm suporte básico à refatoração

Além desses, o Emacs também pode ajudá-lo com muitos fluxos de trabalho, mas não prescreve nenhum. Portanto, os próximos passos dependem muito de como você está usando o Python. A melhor abordagem aqui seria descobrir um bom fluxo de trabalho Python e, em seguida, tentar encontrar pacotes Emacs que o ajudem especificamente com as etapas do seu fluxo de trabalho.

Por exemplo, existem vários pacotes para trabalhar com virtualenvs (Elpy, que você menciona, vem com pyvenv) que você provavelmente deve usar. O Emacs-Jedi possui um modo de acompanhamento para a navegação de código, que pode ser útil. Se você usa muito o IPython, há um Notebook IPython para Emacs. Existem modos de suporte especiais para o desenvolvimento do Django etc. - você pode ir para http://melpa.org/ e procurar por Python para obter algumas idéias.

Fora do Python, você pode se beneficiar de alguns pacotes extras do Emacs que ajudam no desenvolvimento em geral. Projétil é um pacote genérico para gerenciamento de projetos que oferece vários recursos interessantes, como pesquisar em um projeto ou alternar entre testes e implementações. Se ainda não foi instalado como uma dependência do pacote IDE de sua escolha, você também pode usar o YASnippet, que fornece trechos inteligentes para geração de código. A coleção de trechos padrão também possui um grande número de trechos para Python.

Mais uma vez, os principais pacotes IDE acima fornecerão um ambiente saudável - as próximas etapas dependem muito dos seus fluxos de trabalho específicos.

(Divulgação completa: sou o autor de Elpy, leve isso em consideração ao ler o texto acima.)

Jorgen Schäfer
fonte
11
Muito obrigado por uma resposta tão abrangente, que provou ser amplamente útil de maneiras que inúmeros artigos não têm.
Serial Exchangist
2
Obrigado @Jorgen. Eu uso elpydiariamente e tenho uma pergunta rápida sobre sua resposta, quando você diz que " M-x pdbpode executar o depurador Python" , como isso é exatamente? Eu tenho um buffer Python, e quando M-x pdbrecebo um prompt no minibuffer que diz "Run pdb (like this): pdb my_file.py". Quando pressiono RET, obtenho "ImportError: Nenhum módulo chamado pdb.pdb: 'pdb não é um pacote" Isso é com o PYthon 3.4 mais recente, depois de atualizar o pdb com o pip, o que me dá:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina
11
Pdb vem com Python. Não sei por que não foi encontrado, receio. :-(
Jorgen Schäfer
@ JorgenSchäfer se pdbnão for encontrado, mas pythoné encontrada localmente, então você pode executar APO usando M-x pdbentão "Run pdb (como este): python -m pdb my_file.py`
ChrisFreeman
Também acho o pacote sphinx-doc útil para escrever documentos.
aadcg 25/09
17

Eu encorajaria os usuários do evil-emacs a experimentar o spacemacs .

Possui uma brilhante camada python, veja os detalhes aqui: https://github.com/syl20bnr/spacemacs/tree/master/layers/!lang/python

A partir de agora, inclui:

  • Conclusão automática usando o modo anaconda
  • Navegação de código usando o modo anaconda
  • Pesquisa de documentação usando o modo anaconda e pylookup
  • Test Runner usando nose.el ou pytest
  • Ambiente virtual usando pyvenv
  • O modo semântico está ativado
  • Suporte ao Django via modo pônei

A instalação é ridiculamente fácil, basta adicionar a seguinte linha ao seu ~/.spacemacs:

(setq-default dotspacemacs-configuration-layers '(python))
The Unfun Cat
fonte
por curiosidade, onde exatamente em .spacemacs devo adicionar isso? é o top bem? antes (dotspacemacs defun / camadas () ...?
user391339
Existe uma lista chamada dotspacemacs-configuration-layers. Adicione-o lá :)
The Unfun Cat
4

Eu uso o modo de propósito . Isso permite definir um ambiente bastante robusto.

Usando elpy, pydoce neotreeeu tenho um ambiente bastante robusto (no sentido de que as janelas não fazer coisas estranhas a erros). Isso também pode funcionar muito bem gud-pdbpara depuração.

Configuração do emacs para python com neotree, modo python, pydoc e python inferior (através de elpy)

Nidish Narayanaa
fonte
4

Aqui está um guia completo: http://wikemacs.org/wiki/Python Ele lista soluções prontas para uso (o kit de iniciação Prelude , Spacemacs, soluções para ciência de dados , ...), grandes pacotes úteis (Elpy), bem como como todos os pacotes necessários para melhorar seu ambiente. Aqui está uma visão geral .

Refatoração

Esse é o recurso mais "específico do IDE". Emacs como algumas possibilidades graças à biblioteca python Rope. A maneira mais fácil de instalar e usar é o pacote emacs-traad , no MELPA. Possui, entre outros:

  • alterar uma assinatura de método: adicione / remova um argumento, com refatoração entre projetos (é claro),
  • renomeie qualquer coisa,
  • encontre definições,…

Corda também está incluída no Elpy.

Manipulação de código mais simples

Temos ferramentas mais simples para ajudar na refatoração ou na manipulação de código: http://wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

Por exemplo, o Projectile é ótimo (veja outras respostas), também temos uma ferramenta para adicionar decoradores , adicionar / remover / editar argumentos , renomear / copiar / comentar / matar um método, uma ferramenta para geração de código,…

Navegação de código

Podemos navegar como um IDE com tags e cscope: encontre as funções que chamam essa, encontre ocorrências etc.

O Emacs também possui ótimos pacotes como imenu (helm-imenu), helm-swoop (grep interativo em um buffer), emacs-helm-ag (pesquisador de prata interativo em um projeto), etc.

Executando testes

É a Elpy que fornece um bom suporte para executar testes (com o django runner, elpy ou outro). Podemos até executar apenas o teste de unidade em que estamos atualmente: muito útil! Portanto, existe uma Hydra para ajudar nisso (ciclo entre os erros, mude para o prompt do python…).

Faça suporte

Este é um pacote Emacs não específico para Python. Mas eu gosto de poder executar um destino make de qualquer lugar do projeto e escolher o comando make com a conclusão . ligação

Lidando com o recuo

Há um pequeno pacote, indent-tools , que fornece comandos para trabalhar diretamente com um bloco indentado: para o bloco de indentação do próximo pai-filho anterior, indent / deindent / comment / copy / kill / dobre o bloco atual , etc. Perfeito para yaml e também para Python. Doc e gif demo

Suporte do Django

veja Django . Elpy suporta o corredor django. Veja o documento elpy django . O modo django (em melpa) possui modelos destacando, comandos rápidos, conclusão de comandos de gerenciamento ,…

Também importante: excelente suporte ao Git, Github e Gitlab

O magithub pode criar PRs do github, podemos buscar problemas e inserir sua referência nas mensagens de confirmação, o magit é ótimo,… veja http://wikemacs.org/wiki/Git

Ehvince
fonte
Especialmente em projetos maiores e / ou dispersos, a refatoração é super importante para não quebrar nada. Alguém sabe como configurar o emacs-traad com o Spacemacs?
thinwybk 25/09
1

As respostas aqui forneceram a maioria dos recursos importantes que o spacemacs fornece, mas sempre houve um recurso que eu não consegui encontrar - DEBUGGING (eu não encontrei nenhuma ferramenta de depuração decente que funcionasse bem com o spacemacs até muito recentemente)

Então, como eu configurei um fluxo de trabalho de depuração para meus spacemacs?

Há um ramo de recursos em desenvolvimento que usa o pacote realgud.el para fornecer uma experiência de depuração semelhante ao IDE no spacemacs: https://github.com/CeleritasCelery/spacemacs Tudo o que você precisa fazer é colocar esse ramo no seu .emacs. d e faça algumas alterações no seu arquivo ~ / .emacs.d / layers / + lang / python / packages.el

Etapas detalhadas para configurar spacemacs para depuração (respire fundo)

  1. Digite os comandos abaixo no seu terminal, um por um. Isso adicionará as alterações no espaço do CeleritaCelery em uma ramificação separada chamada 'debug-layer'. Isso significa que, se alguma coisa ficar bagunçada, você sempre poderá fazer o checkout do ramo principal e pronto! o seu spacemacs original está de volta!

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

  1. Agora abra o arquivo ~ / .emacs.d / layers / + lang / python / packages.el e adicione a função abaixo ao final do arquivo ;; 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"))) Essa função usa o depurador trepan3k como depurador python. Você pode alterar o valor para pdb ou ipdb ou qualquer depurador que desejar. Se você planeja usar o trepan3k, certifique-se de instalá-lo com o pip, sudo pip install trepan3kpois ele não vem pré-instalado com sua distribuição python.

  2. Agora abra o arquivo .spacemacs e a camada 'debug' dentro dos dotspacemacs-configuration-layers como este dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. Em seguida, reinicie o spacemacs e abra qualquer arquivo python. Você pode iniciar a depuração digitando Mx realgud: trepan3k

Isso iniciará a sessão de depuração e você poderá adicionar e excluir pontos de interrupção usando as combinações de teclas realgud explicadas aqui: https://github.com/realgud/realgud#source-window-commands

Você Terminou!

clyton dantis
fonte
resposta da clyton acima, o repositório git deve ser github.com/CeleritasCelery/debug-layer . O PR para este está atualmente aberto no github.com/syl20bnr/spacemacs/pull/9246
Oddbodbloke
(Não posso comentar devido à falta de reputação) O item acima foi mesclado no ramo de desenvolvimento do spacemacs, portanto, o primeiro passo pode ser ignorado.
Oddbodbloke