8
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

emacsにelpyを導入する

Posted at

Table of Contents

  1. はじめに
  2. emacsの嫌いなところ
  3. elpyとは
  4. elpyの導入
    1. melpaリポジトリの追加
    2. パッケージを読み込む
    3. パッケージをactivateする
    4. pipでインストールするパッケージを持ってくる
    5. 確認する
  5. 終わりに

はじめに

私は以前、elpyの導入に失敗しています。elpyはemacsをPythonの統合環境(IDE)化するパッケージです。

原因がよくわかりませんが、どう頑張っても動かなかったのです。3日くらい試行錯誤して断念しました。実力も無いのにemacsを使うのが悪いという話もありますが、指が慣れてしまっているので他の環境には移れないのです。

最近Pythonに再入門してから、普通のエディタとしてemacsを使ってPythonのコードを書いてきました。IDEの自動補完機能を使う同僚を横目で見て、いつもうらやましく思っていました。そこで、一念発起して、再度elpyの導入にチャレンジしました。

この記事はReal Pythonの導入記事丸写し 参考にしています。

この記事は私のブログ https://achiwa912.github.io/ にも載せました。

emacsの嫌いなところ

いきなりですが、emacsの嫌いなところです。emacs使いはいろいろな意味で上級者が多いです。初級者向けの導入記事はあまり無いか、あっても高度すぎて理解できないことがよくあります。

設定ファイルの.emacs.d/init.elを書き換える時はいつも緊張します。導入記事のアドバイスの通り書いているはずなのに、意味不明のエラーをたくさん吐いて、emacsが使い物にならなくなるのです。

emacs使いはきっと マゾ 辛いことが好きなんだと思います。

そんな訳で、emacsではいろいろな冒険ができないところが嫌いです。現状維持圧力を感じます。この10年でした冒険と言えば、org-modeを使い始めたことと、今回のelpy導入くらいです。

elpyとは

話を戻して、elpyについてです。elpyはEmacs Python Development Environmentのことで、次のようなPythonのIDE機能を提供します。

  • 自動インデント(これは標準のpython-modeにもある)
  • シンタックスハイライト
  • 自動補完
  • シンタックスチェック
  • Python REPL統合
  • 仮想環境サポート

更に、elpyと連動して動くパッケージを入れると、あなたのemacsがそのへんのIDEに負けない立派なIDEに変身します。

elpyの導入

melpaリポジトリの追加

早速ですが、例のinit.elを編集します。
elpyはmelpaとかいうemacsのパッケージリポジトリから持ってくるため、emacsがmelpaを見に行くようにしなくてはいけません。この部分の私の設定は次のようになっています。

(require 'package)
(setq package-archives
       '(("gnu" . "http://elpa.gnu.org/packages/")
	("melpa" . "http://melpa.org/packages/")
	("org" . "http://orgmode.org/elpa/")))
(package-initialize)
(when (not package-archive-contents)
  (package-refresh-contents))

大事なのはこの部分です。

("melpa" . "http://melpa.org/packages/")

パッケージを読み込む

次は、melpa他から必要なパッケージを持ってきます。
このやり方はReal Pythonからいただいてきたのですが、なかなか良いです。
まずmyPackagesとして必要なパッケージを定義しておいて、その後インストールされていなかったらインストールまで自動でやってくれます。

(defvar myPackages
  '(better-defaults
    elpy
    flycheck          ;; On the fly syntax checking
    py-autopep8       ;; Run autopep8 on save
    blacken           ;; Black formatting on save
    material-theme
    )
  )
(mapc #'(lambda (package)
	  (unless (package-installed-p package)
	    (package-install package)))
      myPackages)

elpyの他にいろいろなパッケージを読んでいますが、簡単に説明します。

  • better-defaults - emacsのデフォルト設定でいまいちなところを改善してくれるようです。今のところ、何が変わったのかわかりませんが、なんとなく入れておきます。
  • flycheck - オンザフライで文法チェックをしてくれます
  • py-autopep8 - セーブ時にpep8準拠チェックをして勝手に修正してくれます
  • blacken - セーブ時にBlackのフォーマットチェックをして勝手に修正してくれます
  • material-theme - このテーマはなかなかいい感じだったので、これまで使っていたものから乗り換えました

パッケージをactivateする

そして、パッケージを有効化します。
こちらもReal Pythonから念仏のように写経しただけですが、うまく動いてくれたようです。なお、ここでは一気に全て入れていますが、エラーが出るとどこが悪いのかわからなくなるので、少しずつ動かしながら足していくのがよいと思います。

(load-theme 'material t)

;; elpy
(elpy-enable)
(setq elpy-rpc-virtualenv-path 'current)

;; Flycheck
(when (require 'flycheck nil t)
  (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
  (add-hook 'elpy-mode-hook 'flycheck-mode))

;; autopep8
(require 'py-autopep8)
(add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)

1カ所注意があります。私は人気のvirtualenvではなくてvenvを使っているので、最初出ていたエラーメッセージに従って、次のようにしました。もし副作用があったらごめんなさい。

(setq elpy-rpc-virtualenv-path 'current)

そしてこれをしたことで、~/.local/binを環境変数PATHに入れるよう言われたので、~/.zshrc(macOSです)を修正しました。

export PATH="$HOME/.local/bin:$PYENV_ROOT/bin:$PATH"

pipでインストールするパッケージを持ってくる

melpaから持ってこられないパッケージをpipを使って持ってきます。

pip3 install jedi flake8 autopep8 yapf black

こんな感じだったと思います。実際は一つずつインストールしたので、historyを見て書きました。

確認する

pythonの.pyファイルを開いてM-x elpy-configと入れ、リターンキーを押します。
elpy-config.png

今回はうまくいきました。持ってきたパッケージは一通り認識されていました。

終わりに

上でも挙げたReal Pythonの導入記事はemacsの説明から始まるので、うっかり見落とすところでしたが、さんざん検索した中で一番役に立った記事でした。初級者向けのemacs記事は少ないのでありがたいです。Real Pythonさん、どうもありがとうございます。

8
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?