$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

Emacsでvirtualenvに入れたライブラリも考慮したPythonの補完環境を作る

 新言語を使うときは、その言語の補完ができるかどうかで学習効率が変わってくるので、ひとまずPythonの補完環境を作った。基本Pythonではvirtualenvを使うのが一般的なようなので、環境ごとに入れたライブラリも考慮して補完できるようにした。

 色々調べたところ、次の三つを使うのが良さそうだった。

  • python-mode
  • jedi
  • auto-virtualenvwrapper

今回の設定で以下のように補完が出来るようになった。

f:id:shiba_yu36:20170402145819g:plain

python-mode

 とりあえず編集モードを入れる。M-x package-install RET python-mode RETしたあと、以下の設定を入れる。

(require 'python-mode)
(setq auto-mode-alist (cons '("\\.py\\'" . python-mode) auto-mode-alist))

jedi

 Pythonの補完なら、Jedi というのが良さそうに見えた。Emacsでの入れ方は http://tkf.github.io/emacs-jedi/latest/ に書かれていたので、このページに従ってインストールした。

 まずvirtualenvを自分がメインで使っているPython環境に入れる。

$ pip install virtualenv

 Emacsにjedi.elを入れる。

M-x package-install RET jedi RET

 以下の設定を追加する。

(require 'jedi)
(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:complete-on-dot t)

 最後にM-x jedi:install-serverして完了。

auto-virtualenvwrapper

 以上でPythonの補完が出来るようになった。しかし今のままだとグローバルなPython環境のみ見て補完してくれるだけだった。Pythonではプロジェクト単位でvirtualenvを用いるのが一般的なようなので、virtualenvの環境にインストールしたライブラリも見て補完できるようにしておきたい。

 それを実現するには virtualenvwrapper.el というのを使えば良いみたい。さらに auto-virtualenvwrapper.el というのを使うと、プロジェクトのファイルを開いた時に自動でvirtualenvの環境を切り替えてくれるようだった。

 まずはvirtualenvwrapper.elとauto-virtualenvwrapper.elをインストール。

M-x package-install RET virtualenvwrapper RET
M-x package-install RET auto-virtualenvwrapper RET

 以下の設定を追加すると、自動でvirtualenvの環境を切り替えてくれるようになる。

(require 'virtualenvwrapper)
(require 'auto-virtualenvwrapper)
(add-hook 'python-mode-hook #'auto-virtualenvwrapper-activate)

まとめ

 今回の設定で、virtualenvにいれたライブラリも考慮したPythonの補完環境を作れた。ここにたどり着くまでに結構時間がかかってしまったけど、補完がうまくいくようになって良かった。