本文是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的熱情!