Pythonの開発環境 on Emacs

前提

  • 最低限として文法チェック、補完、REPLが使えれば良い。
  • ipython notebook(Jupyter)は使わない。 (notebookはやっぱり慣れないのと、別にmarkdownは別ファイルに書けば良いし、図もEmacs内に埋め込み表示しなくてREPLでやれば良いように思う。)
  • virtualenvを考慮してLintして欲しいのでelpyを使う。注意はpython3用にしておくこと、elpy自体だけで補完、lintする訳じゃないようなのでそれは結局入れる。

設定

  • まず各種インストール
# aptで入れるもの
$ sudo apt-get python3-pip ipython3 python3-tk
$ sudo ln -s /usr/bin/ipython3 /usr/bin/ipython

# Caskで入れるもの(Cask自体も)
$ curl -fsSkL https://raw.github.com/cask/cask/master/go | python
$ cd .emacs.d
$ cask init
$ export PATH=/home/nobunaga/.cask/bin:$PATH # add it in .bashrc
$ vim Cask # elpy, company, campany-jedi, flycheck
$ cask install
$ pip3 install rope jedi autopep8 flake8
  • 次に、init.elに下記を追加。
;; init.el
(elpy-enable)
(elpy-use-ipython)
(setq elpy-rpc-python-command "python3")
(setq elpy-rpc-backend "jedi")
(when (require 'flycheck nil t)
  (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
  (add-hook 'elpy-mode-hook 'flycheck-mode))

最低限の使い方

# MISC
M-x elpy-config : 設定の確認

# REPL
C-c C-z : REPLバッファに移動
C-c C-c : バッファをREPLに送信
C-M-x   : 現在のトップレベルのクラスまたは関数を送信
C-ENTER : カレントラインをREPLに送信

;移動
M-. : 定義にジャンプ
M-* : ジャンプ元に戻る
M-, : M-*のジャンプ前に戻る
C-x 4 M-. : 別ウィンドウ開いて定義にジャンプ