Elpyを使ってPython用Emacsの設定を書いた

大学4年生になり研究でPythonを使う必要が出てきたので, EmacsPython用の設定を追加した. 普段なら他の人の設定をコピペするだけなのだが, 今回利用したパッケージを使った例が少なかったのでまとめることにした.

前提条件

Python2系が必要なときはvirtualenvを使うけど, 3系前提ならvenvだけで良さそう*1.

前提と同じPython3 + venvを入れるには以下の記事が参考になる.

pyenv + venvでPython3環境を構築する - $shibayu36->blog;

利用したパッケージ

elpyはEmacsPythonIDE化するパッケージ.

書いた設定

(el-get-bundle! python-mode)
(setq auto-mode-alist (cons '("\\.py\\'" . python-mode) auto-mode-alist))

(el-get-bundle! elpy
  (elpy-enable)
  (setq elpy-rpc-backend "jedi")
  (add-hook 'elpy-mode-hook
    '(lambda ()
       (auto-complete-mode -1)
       (define-key company-active-map (kbd "C-n") 'company-select-next)
       (define-key company-active-map (kbd "C-p") 'company-select-previous)
       (define-key company-active-map (kbd "<tab>") 'company-complete))))

使い方

  • プロジェクト環境に依存パッケージをインストール.
$ source bin/activate
$ pip install jedi もしくは rope
$ pip install flake8 importmagic autopep8 yapf
  • Emacsでプロジェクトディレクトリを開いて M-x pyvenv-activate をする. どの仮想環境を利用するか選択するので, プロジェクトディレクトリを指定して選択.
    • プロジェクトの環境が有効になり補完やLintが効くようになる.
  • 完了
    • 何かおかしかったら M-x elpy-config で設定を確認できるのでそれを見ながら修正する.

補完のバックエンドをjediropeで選択できる. どっちを選べばいいかはelpyの公式のWikiに書いてある.

雑感

よくあるブログエントリだとjediを入れて補完が出来るようにするのが多いけど, Python仮想環境のことを考えていなかったりvirtualenvを使っていたりで千差万別なので, 今回自分用でまとめてみた.

Pythonは書き始めたばかりなので, IDEの機能や周辺のLint・リファクタリングツールを全然使いこなせていない. 手持ち無沙汰感は否めないけどよしとする.

設定に関してだと el-get-bundle! の辺りは各自の使っているパッケージ管理ツールに適宜読み換えればいいと思う.

elpy-mode-hook にくっついている設定はAuto-Completeを無効にし, Company-Modeのキーバインドを最低限設定するもの. 普段からCompany-Modeを使っている人必要なさそうだけど, 自分は普段Auto-Completeを使っているのでPythonを書くときだけCompany-Mode を有効にするという形を取った.

Auto-Completeを使う方法もあるのかもしれないけどそこまで調べていないのでひとまずは現状でいいかという気持ち.

より詳しく, 正確にEmacsPythonの設定をするならEmacsWikiを見ると良さそう.

EmacsWiki: Python Programming In Emacs

参考記事

*1:むしろvenvのみの方が余計なものを考えなくて良いと思う. 止むに止まれぬ事情があるときはvirtualenvを入れよう