Emacs是出色的编辑器-但是据说“ 要先编写程序就需要一个IDE ”-因此,您将如何在具有现代IDE的所有功能的PYTHON的可广泛定制的Emacs中构建IDE。我希望能够有效地调试,运行和编译以及管理代码。到目前为止,我已经阅读了有关安装Elpy软件包的主题,但是不确定是否需要做些什么才能使之成为可能。
Emacs是出色的编辑器-但是据说“ 要先编写程序就需要一个IDE ”-因此,您将如何在具有现代IDE的所有功能的PYTHON的可广泛定制的Emacs中构建IDE。我希望能够有效地调试,运行和编译以及管理代码。到目前为止,我已经阅读了有关安装Elpy软件包的主题,但是不确定是否需要做些什么才能使之成为可能。
Answers:
Emacs中的默认Python模式具有许多功能,包括基于劣等Python shell的代码完成功能,因此可以用作基本IDE,而无需添加任何软件包。您也可以在Python中使用其他Emacs核心功能。例如,M-x compile
/ M-x recompile
可用于运行测试。M-x pdb
可以运行Python调试器,并且它与Emacs的gud环境集成在一起,因此您实际上可以获得内联断点。
为了对此进行扩展,提供了三个主要的Emacs软件包,它们尝试实现功能更强大的Python IDE(按字母顺序):
它们都提供大致相同的功能:
除了这些之外,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的作者,因此在阅读以上内容时请考虑在内。)
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
pdb
未找到,但python
在本地找到,则可以使用“ M-x pdb
然后运行pdb(如下所示)来运行pdb:python -m pdb my_file.py”
我鼓励邪恶的emacs用户尝试spacemacs。
它具有出色的python层,请在此处查看详细信息:https : //github.com/syl20bnr/spacemacs/tree/master/layers/! lang/python
截至目前,它包括:
安装非常简单,只需将以下行添加到您的~/.spacemacs
:
(setq-default dotspacemacs-configuration-layers '(python))
dotspacemacs-configuration-layers
。在那里添加它:)
我使用目的模式。这使您可以定义一个非常强大的环境。
使用elpy
,pydoc
和,neotree
我有一个相当健壮的环境(在某种意义上,Windows不会在出错时做奇怪的事情)。这也可以很好地gud-pdb
用于调试。
这里是一个全面的指南: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。Elpy支持django赛跑者。参见elpy django doc。django-mode(在melpa中)具有突出显示的模板,快速命令,管理命令完成,…
magithub可以创建github PR,我们可以获取问题并将其引用插入提交消息中,magit很棒,…请参见http://wikemacs.org/wiki/Git
答案提供了spacemacs提供的大多数重要功能,但始终找不到一个功能-DEBUGGING(直到最近我才发现可以与spacemacs配合使用的任何不错的调试工具)
那么,如何为spacemacs设置调试工作流程?
有一个正在开发的功能分支,使用realgud.el软件包在spacemacs中提供接近IDE的调试体验:https : //github.com/CeleritasCelery/spacemacs 您所要做的就是将该分支放入.emacs中。 d目录,并在〜/ .emacs.d / layers / + lang / python / packages.el文件中进行一些更改
设置spacemacs进行调试的详细步骤(深呼吸)
remote add debug-layer https://github.com/CeleritasCelery/spacemacs
fetch debug-layer
checkout --track debug-layer/debug-layer
branch -a
现在打开〜/ .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发行版中并未预安装它。
现在像这样打开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
)
这将启动调试会话,您可以使用此处解释的realgud键绑定添加,删除断点:https : //github.com/realgud/realgud#source-window-commands
你完成了!