如何使用Emacs创建强大的Python IDE(作为文本编辑器)


56

Emacs是出色的编辑器-但是据说“ 要先编写程序就需要一个IDE ”-因此,您将如何在具有现代IDE的所有功能的PYTHON的可广泛定制的Emacs中构建IDE。我希望能够有效地调试,运行和编译以及管理代码。到目前为止,我已经阅读了有关安装Elpy软件包的主题,但是不确定是否需要做些什么才能使之成为可能。


4
您能更具体一点吗?“ IDE”已成为各种功能的流行词和抢手包。
wasamasa

我想您是Emacs的新手,您可能需要阅读我的《Helm and Helm Projectile》指南
Tu Do

2
一个谷歌搜索“的Emacs的Python IDE”给出了一个公平的命中数。您能说明一下您已经尝试过什么,哪些还不能令人满意?

1
我投票结束这个题为离题,因为它太广泛了。
德鲁

4
IDE可能有用,但是“要先编程就需要IDE”是很愚蠢的。在出现IDE之前,已经编写了很多好的代码。
offby1 2015年

Answers:


57

Emacs中的默认Python模式具有许多功能,包括基于劣等Python shell的代码完成功能,因此可以用作基本IDE,而无需添加任何软件包。您也可以在Python中使用其他Emacs核心功能。例如,M-x compile/ M-x recompile可用于运行测试。M-x pdb可以运行Python调试器,并且它与Emacs的gud环境集成在一起,因此您实际上可以获得内联断点。

为了对此进行扩展,提供了三个主要的Emacs软件包,它们尝试实现功能更强大的Python IDE(按字母顺序):

它们都提供大致相同的功能:

  • 使用自动完成或公司模式完成代码
  • 代码导航,即转到定义/用法
  • 使用ElDoc显示功能签名
  • 点上符号的文档自省
  • 使用flymake或flycheck进行语法检查
  • 其中一些(至少是Elpy)具有基本的重构支持

除了这些之外,Emacs还可以为您提供许多工作流,但是它并没有规定任何单个工作流。因此,接下来的步骤很大程度上取决于您如何使用Python。最好的方法是找出一个良好的Python工作流程,然后尝试找到可以帮助您具体完成工作流程步骤的Emacs软件包。

例如,您可能应该使用多个与virtualenvs一起使用的软件包(您提到的Elpy,pyvenv随附)。Emacs-Jedi附带了一种用于代码浏览的模式,这可能会很有用。如果您经常使用IPython,则有一个适用于Emacs 的IPython Notebook。Django开发等有特殊的支持模式。–您可以访问http://melpa.org/并搜索Python以获得一些想法。

在Python之外,您可能会从一些额外的Emacs软件包中受益,这些软件包通常有助于开发。Projectile是用于项目管理的通用软件包,它为您提供许多有趣的功能,例如在项目中搜索或在测试和实现之间移动。如果尚未从您选择的IDE软件包中将其作为依赖项安装,则还可以使用YASnippet,它提供智能片段以生成代码。默认的代码段集合也有大量的Python代码段。

但是同样,上面的主要IDE软件包将为您提供一个理智的环境-下一步很大程度上取决于您的特定工作流程。

(完全公开:我是Elpy的作者,因此在阅读以上内容时请考虑在内。)


1
非常感谢您做出如此全面的答复,事实证明,它以无数篇文章所没有的方式广泛地发挥了作用。
串行交换者2015年

2
谢谢@Jorgen。我elpy每天都用一个关于您答案的快速问题,当您说M-x pdb可以运行Python调试器”时,这到底是怎么回事?我有一个Python缓冲区,当我这样做时,M-x pdb我会在迷你缓冲区中看到提示"Run pdb (like this): pdb my_file.py"。当我RET按时,出现“导入错误:没有名为pdb.pdb的模块:'pdb不是软件包”这是最新的PYthon 3.4,只是用pip升级了pdb,这给了我:$ pip freeze | grep pdb => pdb==0.1
Amelio Vazquez-Reina

1
Pdb随附Python。恐怕我不知道为什么找不到它。:-(
JorgenSchäfer2015年

@JorgenSchäfer如果pdb未找到,但python在本地找到,则可以使用“ M-x pdb然后运行pdb(如下所示)来运行pdb:python -m pdb my_file.py”
ChrisFreeman

我还发现sphinx-doc软件包对编写docstrings有用。
aadcg

17

我鼓励邪恶的emacs用户尝试spacemacs

它具有出色的python层,请在此处查看详细信息:https : //github.com/syl20bnr/spacemacs/tree/master/layers/! lang/python

截至目前,它包括:

  • 使用anaconda模式自动完成
  • 使用anaconda模式的代码导航
  • 使用anaconda-mode和pylookup进行文档查找
  • 使用nas.el或pytest测试亚军
  • 使用pyvenv的虚拟环境
  • 启用了语义模式
  • 通过小马模式的Django支持

安装非常简单,只需将以下行添加到您的~/.spacemacs

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

出于好奇,我应该在.spacemacs的确切位置添加此内容?最高可以吗?之前(defun dotspacemacs / layers()... ...
user391339,2008年

有一个名为的列表dotspacemacs-configuration-layers。在那里添加它:)
Unfun Cat'17

4

我使用目的模式。这使您可以定义一个非常强大的环境。

使用elpypydoc和,neotree我有一个相当健壮的环境(在某种意义上,Windows不会在出错时做奇怪的事情)。这也可以很好地gud-pdb用于调试。

带有neotree,python-mode,pydoc和劣等python的python的emacs专用设置(通过elpy)


4

这里是一个全面的指南:http : //wikemacs.org/wiki/Python 它列出了现成的解决方案(Prelude 入门工具包,Spacemacs,数据科学解决方案,…),有用的大软件包(Elpy),以及作为改善环境所需的每个软件包。这是概述

重构

这是最“特定于IDE”的功能。借助Rope python库,Emacs有了一些可能。事实证明,最简单的安装和使用方法是MELPA中emacs-traad软件包。它具有以下特点:

  • 更改方法签名:添加/删除参数,并进行跨项目重构(当然),
  • 重命名任何东西,
  • 查找定义,…

绳索也包含在Elpy中。

更简单的代码操作

我们提供了更简单的工具来帮助重构或进行代码操纵:http : //wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

例如,Projectile很棒(请参阅其他答案),我们还有一个工具来添加装饰器添加/删除/编辑参数,重命名/复制/注释/杀死方法,用于代码生成的工具……

代码导航

我们可以使用带有标签和cscope的IDE进行导航:找到调用该函数的函数,查找出现的事件等。

Emacs还具有出色的软件包,例如imenu(helm-imenu),helm-swoop(缓冲区中的交互式grep),emacs-helm-ag(项目中的交互式Silver Searcher)等。

运行测试

是Elpy为运行测试提供了良好的支持(使用djangoRunner,elpy或其他工具)。我们甚至可以只运行当前正在进行的单元测试:非常方便!因此,有一个Hydra可以帮助您解决(错误之间的提示,请切换至python提示符……)。

给予支持

这是一个Emacs软件包,不特定于Python。但我希望能够在项目中的任何位置运行make目标,并选择具有完成功能的make命令链接

处理压痕

有一个小包,indent-tools,它提供直接使用缩进块的命令:移到下一个上一个缩进的父子缩进块,indent / deindent / comment / copy / kill / folding当前块,等。非常适合yaml,也适合Python。Doc和gif演示

Django支持

参见DjangoElpy支持django赛跑者。参见elpy django docdjango-mode(在melpa中)具有突出显示的模板,快速命令,管理命令完成,…

同样重要:出色的Git,Github和Gitlab支持

magithub可以创建github PR,我们可以获取问题并将其引用插入提交消息中,magit很棒,…请参见http://wikemacs.org/wiki/Git


特别是在较大和/或分散的项目中,重构对于不破坏某些东西非常重要。有人知道如何使用Spacemacs设置emacs-traad吗?
thinwybk

1

答案提供了spacemacs提供的大多数重要功能,但始终找不到一个功能-DEBUGGING(直到最近我才发现可以与spacemacs配合使用的任何不错的调试工具)

那么,如何为spacemacs设置调试工作流程?

有一个正在开发的功能分支,使用realgud.el软件包在spacemacs中提供接近IDE的调试体验:https : //github.com/CeleritasCelery/spacemacs 您所要做的就是将该分支放入.emacs中。 d目录,并在〜/ .emacs.d / layers / + lang / python / packages.el文件中进行一些更改

设置spacemacs进行调试的详细步骤(深呼吸)

  1. 在终端中一一键入以下命令。这会将CeleritaCelery的spacemacs更改添加到名为“ debug-layer”的单独分支中。这意味着,如果有任何麻烦,您可以随时检出master分支并瞧瞧!您原来的spacemacs又回来了!

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

  1. 现在打开〜/ .emacs.d / layers / + lang / python / packages.el并将以下函数添加到文件末尾。 ;; 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"))) 该函数使用trepan3k调试器作为python调试器。您可以将值更改为pdb或ipdb或任何您喜欢的调试器。如果您打算使用trepan3k,请确保使用pip进行安装, sudo pip install trepan3k因为python发行版中并未预安装它。

  2. 现在像这样打开dotspacemacs-configuration-layers内的.spacemacs文件和“调试”层 dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. 然后重新启动spacemacs并打开任何python文件。您可以通过键入Mx realgud:trepan3k开始调试。

这将启动调试会话,您可以使用此处解释的realgud键绑定添加,删除断点:https : //github.com/realgud/realgud#source-window-commands

你完成了!


克莱顿(Clyton)的回答是,git repo应该是github.com/CeleritasCelery/debug-layer。目前,此PR的公开网址
Oddbodbloke

(由于缺乏声誉,我无法评论)以上内容已合并到spacemacs的开发分支中,因此可以忽略第一步。
奥德博布洛克(Oddbodbloke)'18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.