Pythonの開発環境 on Emacs

前提

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

補間のメモ

  • flycheck(flymake)はLintツールをオンザフライで実行しているだけでLintツール自体は別に必要。flake8とかpylintがそれにあたる。

設定

  • まず各種インストール
# 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))

FLAKE8の特定の警告を無視する

  • PEP8の警告は良いけど、一行80文字制限は逆に見難くなるので警告を止めたい。
  • そんな場合に、~/.flake8ファイルに下記の様に書くと特定の警告を無視したり、一行の最大文字数などを設定できる。
[flake8]
ignore = E226,E302,E41
max-line-length = 160
exclude = tests/*
max-complexity = 10

最低限の使い方

# 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-. : 別ウィンドウ開いて定義にジャンプ