Emacsでデータサイエンス用環境構築(Python)

    はじめに {#はじめに}

    肥大化してデブになった emacs設定を一旦捨て去り、一から作り直すことにした。

    デブは自分のお腹だけで十分だ!(名言)

    Motivation {#motivation}

    以前は、こんな感じの設定ファイルを作っていたのだけれども、複雑になりすぎた。

    また、データサイエンスをやるにつれて、以下のようなことがあり、Emacsを使いたくなってきた。

    • 自宅サーバにsshで自習室からつないで作業することが多いので、Pycharm使えない。
    • Jupyter Notebookを使うことが多いが、Jupyter Notebookでは、スクリプトかけない。
    • 今まで素の Emacsでしのいできたのだけれども、辛くなってきた。
    • ターミナルかっこいい\(o)/

    目指す姿 {#目指す姿}

    • データサイエンス、もっと言えばPythonに特化した環境を作りたい
    • 軽い環境を作りたい
    • できるだけシンプルにしたい

    Environment {#environment}

    • Ubuntu 16.04
    • Python 3.6(Anaconda)
    • Emacs 25.x

    最新版Emacsを投入 {#最新版emacsを投入}

    まずは、Ubuntuに25系のversionをインストールする。

    sudo add-apt-repository ppa:kelleyk/emacs
    sudo apt-get update
    sudo apt-get install emacs25
    sudo update-alternatives --config emacs

    リポジトリ & 設定ファイルを作成 {#リポジトリ—設定ファイルを作成}

    .emacs.dを gitで世代管理して、githubにバックアップしたい。まずは、emacs用のリポジトリを作成。

    init.elも作成。ここを参考にして、カスタムディレクトリを起点に起動できるように記述。

    (when load-file-name
      (setq user-emacs-directory (file-name-directory load-file-name)))

    続いて、このリポジトリを利用して起動するためのスクリプトを作成して、パスの通ったところに置く。

    #!/bin/bash                                                                                                                                                                                                          
    emacs -nw -q -l /home/tsu-nera/dotemacs-for-data-science/init.el $1

    パッケージ管理をどうするか? {#パッケージ管理をどうするか?}

    以前はuse-packageを使っていた。しかし、今回はシンプルにしたいので、デフォルトで搭載されているパッケージ管理ツール package.elを使うことにする。以下の記事によると、25.1からはインストールされたパッケージが package-selected-package 変数に保持されるようになったらしい。

    以下の設定を inti.elに書くことで、custom.elに設定を吐き出すようにする。

    (setq custom-file (expand-file-name "custom.el" user-emacs-directory))
    (when (file-exists-p custom-file)
      (load custom-file))

    package-installでインストールできるパッケージを増やすために、リポジトリを追加する。

    (require 'package)
    (add-to-list 'package-archives '("melpa" . "https://melpa.milkbox.net/packages/"))
    (add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/"))
    (fset 'package-desc-vers 'package--ac-desc-version)
    (package-initialize)

    Python開発環境 {#python開発環境}

    ここからが本番! データサイエンスのために Python開発環境を整える。過去記事を参考に(古くてあまり参考にならないですが)、設定を書いていく。

    python-mode - メジャーモード {#python-mode---メジャーモード}

    メジャーモードはデフォルトの pythonパッケージではなく、python-modeをつかう。なんとなく。

    (require 'python-mode)
    (add-to-list 'auto-mode-alist '("\\\.py\\\'" . python-mode))
    (add-to-list 'interpreter-mode-alist '("python" . python-mode))

    flycheck, flake8 – 静的解析 {#flycheck-flake8---静的解析}

    Pythonの静的解析ツールとして flake8, それをつかうためのインタフェース flycheckを入れる。

    pip install flake8

    python-modeのときだけ有効。

    (defun tnoda/turn-on-flycheck-mode ()
      (flycheck-mode 1))
    (add-hook 'python-mode-hook 'tnoda/turn-on-flycheck-mode)

    jedi – 自動補完 {#jedi---自動補完}

    jedi は pythonのための 自動補完ツール。

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

    jedi は Emacsの補完ツール , auto-completeを使っているので、その設定もしておく。

    (require 'auto-complete-config)
    (ac-config-default)
    (global-auto-complete-mode t)

    yapf – 自動フォーマット {#yapf---自動フォーマット}

    自動でいい感じに整形してくれるツールを入れる。autopep8という古参なツールもあるけれども、新しい方を採用。

    pip install yapf
    
    
    ;; py-yapf - auto format                                                                                                                                                                                             
    (require 'py-yapf)
    (add-hook 'python-mode-hook 'py-yapf-enable-on-save)

    ひとまず完成した init.el