本文是realpython.com继《将Sublime Text 3打造为Python全栈开发环境及》和《Vim与Python真乃天做之合》,又一篇关于如何配置Python IDE的文章。这一次,主角变成了与Vim一样享有神器之称的Emacs编辑器。译者以前没有接触过Emacs,可是看完这篇文章以后,以为与Vim和Sublime Text 3相比,最出彩的一个地方就是能够和IPython与Jupyter Notebook进行集成。按照本文的介绍配置完以后,确实会让Emacs成为一个异常强大的Python IDE。html
译文连接:http://codingpy.com/article/emacs-the-best-python-editor/python
Emacs安装不是本文的重点,所以,这里推荐你们参考ErgoEmacs网站提供的安装指南,完成在Linux、Mac或Windows平台的基本安装。安装完成以后,打开应用,你就会看到默认设置下地Emacs界面。git
一样,本文也不会过多介绍Emacs使用的基础知识。学习Emacs最容易的方法,就是经过其自带的教程。本文介绍的内容并不要求你知道如何使用Emacs;相反,本文的每一部分讲述的都是你学习基础知识后可使用的。web
你可使用方向键将光标移动到标有“Emacs Tutorial”字样的地方,而后按回车键,就能够打开自带教程。而后,你将会看到下面这段话:vim
Emacs commands generally involve the CONTROL key (sometimes labeled CTRL or CTL) or the META key (sometimes labeled EDIT or ALT). Rather than write that in full each time, we'll use the following abbreviations: C-<chr> means hold the CONTROL key while typing the character <chr> Thus, C-f would be: hold the CONTROL key and type f. M-<chr> means hold the META or EDIT or ALT key down while typing <chr>. If there is no META, EDIT or ALT key, instead press and release the ESC key and then type <chr>. We write <ESC> for the ESC key.
接下来,本文还会继续出现相似C-x C-s
等按键命令。这些命令表示,要同时按下Control键和x键,而后再同时按下Control和s键。这正是使用Emacs编辑器的基本形式。了解更多基础知识,你能够学习自带教程或者GNU网站提供的这个教程Guided Tour of Emacs。bash
Emacs的好处之一,就是配置简单。Emacs配置的核心则是初始化文件(Initialization File)—— init.el
。服务器
在Unix环境下,这个文件应该放置在$HOME/.emacs.d/init.el
路径。markdown
$ touch ~/.emacs.d/init.el
同时,在Windows平台,若是没有设置HOME
环境变量,该文件应该放置在C:/.emacs.d/init.el
路径。网络
本文将会与你们分享许多配置示例。那么若是你想继续跟随本文进行配置的话,请先建立init文件。若是不想的话,能够在结语部分直接查看最终的完整init文件。less
插件包(packages)能够对Emacs进行自定义,须要从不一样的代码仓库获取。其中,最主要的Emacs插件包仓库是MELPA
仓库。本文中提到的全部插件包都将从该仓库获取并安装。
首先,下面是一个插件包安装示例代码,其中安装了一个主题插件。
;; init.el --- Emacs configuration ;; INSTALL PACKAGES ;; -------------------------------------- (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) (package-initialize) (when (not package-archive-contents) (package-refresh-contents)) (defvar myPackages '(better-defaults material-theme)) (mapc #'(lambda (package) (unless (package-installed-p package) (package-install package))) myPackages) ;; BASIC CUSTOMIZATION ;; -------------------------------------- (setq inhibit-startup-message t) ;; hide the startup message (load-theme 'material t) ;; load material theme (global-linum-mode t) ;; enable line numbers globally ;; init.el ends here
配置示例代码的第一部分是;; INSTALL PACKAGES
,安装了better-defaults
和material-theme
共两个插件包。better-defaults
插件集合了一系列对Emacs默认配置的修改,为咱们开始进一步自定义奠基了良好的基础。material-theme
插件则提供了一组自定义的样式。
主题插件中,我我的更喜欢的就是这个
material-theme
插件,因此本文中咱们将一直使用这个插件。
第二部分则是;; BASIC CUSTOMIZATION
(基本自定义)。
禁用启动消息(即显示全部教程信息的页面)。在你更熟悉Emacs以前,你能够不由用。
加载material
主题。
启用全局显示行号
全局启用意味着这个功能对于Emacs打开的全部缓冲区(buffers)都适用。因此,若是你打开了Python文件、markdown文件或者是纯文本文件,它们都将显示行号。你还能够根据不一样的模式(mode)启用不一样的功能,——例如,python模式、markdown模式和纯文本模式。稍后咱们将Emacs配置为Python IDE时还会讲到。
如今咱们已经有了一个完整的基础配置文件,能够重启Emacs,观察变化。若是你将init.el
文件放在了正确地路径中,Emacs将会自动加载该文件。
另外,你也能够在命令行输入emacs -q --load <path to init.el>
命令,启动Emacs。配置文件加载完成后,咱们以前见到的Emacs窗口会变得更好看:
下面这张图展现了一些Emacs自己自带的基础功能——包括简单的文件检索和Split Layouts。
我最喜欢的一个Emacs基础功能,就是能够进行快速的递归文本检索(recursive grep search)—— M-x rgrep
。举个例子,假如你想在某个文件夹下以.md
为扩展名的文件中,查找全部出现过python
一词的段落:
完成基础配置以后,咱们能够开始将Emacs配置为Python开发环境啦!
Emacs自带的python模式(python.el)支持缩进和语法高亮功能。。可是若是要与专门针对Python设计的IDE竞争的话,咱们确定还须要添加更多的功能。elpy
(Emacs Lisp Python Environment)插件能够说为咱们提供了Python开发环境所须要的几乎所有功能,包括:
自动缩进
语法高亮
自动补全
语法检查
REPL集成
虚拟环境支持,以及
更多其余功能
要想安装并启用elpy
插件,咱们须要进行一些配置,并使用你本身喜欢的方式(例如,pip
或conda
)安装flake8
和jedi
这两个Python工具包。
下面的配置能够安装elpy
插件包:
(defvar myPackages '(better-defaults elpy ;; add the elpy package material-theme))
如今咱们这样启用这个插件:
(elpy-enable)
完成上面的配置以后,咱们能够重启Emacs,并打开一个Python文件,就能够查看新的配置是否生效。
上面这幅图中显示了如下几种功能:
自动缩进
语法高亮
语法检查(第三行的错误提示)
自动补全(第九行显示的列表方法)
另外,假设咱们想要运行这个脚本。在Python自带的IDLE或Sublime Text中,你能够点击一个运行当前脚本的按钮。Emacs编辑器也是同样,不过咱们只须要Python缓冲区按下C-c C-c
便可。
一般,咱们会但愿运行一个虚拟环境,而后再使用虚拟环境中安装的工具包来执行代码。要想在Emacs中使用虚拟环境,咱们须要输入M-x pyvenv-activate
,而后根据提示操做。输入M-x pyvenv-deactivate
就能够关闭虚拟环境。Elpy插件还提供了调试虚拟环境、处理elpy插件可能出现的问题的接口。输入M-x elpy-config
,就会出现下面的信息,其中包含了有价值的调试信息。
到这里,咱们已经介绍完在Emacs中实现Python IDE基础功能的方法。接下来,咱们来进一步完善Emacs的配置。
除了上面介绍的基本IDE功能以外,Emacs还针对Python语言提供了一些额外的功能。在这一部分,咱们没法介绍所有的额外功能,可是确定会涉及PEP八、IPython/Jupyter集成。不过在此以前,咱们要快速梳理一下语法检查配置。
默认状况下,安装了Elpy插件的Emacs提供一个名叫Flymake
的语法检查插件。可是,咱们还能够选择另一个名叫Flycheck
的插件,后者支持实时语法检查。幸运地是,从Flymake
切换至Flycheck
很是简单:
(defvar myPackages '(better-defaults elpy flycheck ;; add the flycheck package material-theme))
以及
(when (require 'flycheck nil t) (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) (add-hook 'elpy-mode-hook 'flycheck-mode))
如今,咱们就能够在编辑Python代码的同时,得到实时代码检查反馈了:
无论你喜不喜欢,PEP8都不会消失。若是你想遵循PEP8标准的所有或部分规范,你大概但愿可以实现自动化合规。autopep8
插件就是解决之道。这个插件与Emacs无缝集成,所以当你保存文件时——C-x C-s
——autopep8插件就会自动格式化代码,并纠正全部不符合PEP8标准的错误(排除你不但愿检查的错误)。
首先,你须要经过你喜欢的方式安装autopep8
这个Python工具包,而后添加下面的Emacs配置代码:
(defvar myPackages '(better-defaults elpy flycheck material-theme py-autopep8)) ;; add the autopep8 package
以及
(require 'py-autopep8) (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)
如今咱们保存Python示例文件,Autopep8插件就会自动纠正出现的错误:
接下来这个功能尤为强大:将Emacs与IPython REPL和Jupyter Notebooks集成。首先,咱们将Emacs中标准的Python REPL集成替换为IPython版本:
(elpy-use-ipython)
如今若是咱们按下C-c C-c
再次运行Python代码,咱们使用的将是IPython REPL:
尽管作到目前这样已经很是有用了,可是真正的神奇之处还在Emacs与Jupyter notebook之间的集成。这里,咱们假设你已经知道如何启动Jupyter Notebook服务器。要实现前面提到的集成,咱们只须要再添加一些配置便可:
(defvar myPackages '(better-defaults ein ;; add the ein package (Emacs ipython notebook) elpy flycheck material-theme py-autopep8))
Jupyter提供的notebook网络接口很好,可是要求咱们离开Emacs编辑器才能使用:
不过,咱们能够经过在Emacs中直接链接notebook服务器,并与服务器进行直接交互的方式,就能够完成网络接口所提供的功能。
前面咱们已经介绍了全部Python IDE应具有的基础功能(以及一些很是棒的额外功能),可是还有一些功能也是IDE须要支持的。首先就是git集成。
Magit是MELPA仓库中很是受欢迎的一个插件包,几乎每个使用Git的Emacs用户都会安装这个插件。这个插件极其强大,功能也特别全面,超出了本文的范围。不过还好Mastering Emacs网站上有一篇介绍Magit的好文。下面这张图就摘自Mastering Emacs网站的那篇文章,展现了Emacs中git集成的效果:
与使用只针对Python的IDE相比,使用Emacs的一大好处就是它还可以支持除Python外的其余语言。工做的时候,我一般要使用Python、Golang、JavaScript、Markdown、JSON以及其余语言。所以,只使用Emacs编辑器而且完美支持全部这些语言将会大大提升工做效率。Emacs编辑器支持如下语言:
Python
Golang
Ruby
Puppet
Markdown
Dockerfile
YAML
Web (HTML/JS/CSS)
SASS
NginX Config
SQL
学会使用Emacs以后,你会但愿在其余地方也可以使用Emacs按键组合。只须要在bash提示符以后输入set -o emacs
便可实现。可是,Emacs的一个强大之处就是你能够在终端下以headless模式运行Emacs编辑器。这也是我本人的默认终端环境。要开启headless模式,只须要输入emacs -nw
便可。
正如你所见,Emacs明显是最好的编辑器。老实说,市面上还有其余很好的Python IDE可供选择,可是我会坚决果断地推荐你学习Vim或Emacs,由于基于这两个编辑器配置的开发环境无疑是功能最为多样化的。最后,为你们提供本文中完整的Emacs配置:
;; init.el --- Emacs configuration ;; INSTALL PACKAGES ;; -------------------------------------- (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) (package-initialize) (when (not package-archive-contents) (package-refresh-contents)) (defvar myPackages '(better-defaults ein elpy flycheck material-theme py-autopep8)) (mapc #'(lambda (package) (unless (package-installed-p package) (package-install package))) myPackages) ;; BASIC CUSTOMIZATION ;; -------------------------------------- (setq inhibit-startup-message t) ;; hide the startup message (load-theme 'material t) ;; load material theme (global-linum-mode t) ;; enable line numbers globally ;; PYTHON CONFIGURATION ;; -------------------------------------- (elpy-enable) (elpy-use-ipython) ;; use flycheck not flymake with elpy (when (require 'flycheck nil t) (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) (add-hook 'elpy-mode-hook 'flycheck-mode)) ;; enable autopep8 formatting on save (require 'py-autopep8) (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) ;; init.el ends here
但愿这些配置可以激起你学习并使用Emacs的热情!