Umi Uyuraのブログ

プログラミング関連の作業ログ

MacとEmacsのPython開発環境について調べてみた

Python使えると年収が高くなるかもしれないので、触っておくことにしました。

プログラマー年収ランキング2016!言語別、第1位はPythonの651万円 | みんなのスタンバイ

というわけで、まずはMac上に開発環境を整えることに。

Pythonバージョン管理

Macは標準でPythonがインストールされているものの、そのバージョンは2.7系。(El Capitanでは2.7.11が入っていました)

メジャーバージョンは今の時点で3.5まで上がっているものの、どうやら2.7系もまだまだ現役なようなので、用途に応じて切り替えられるように、バージョン管理ツールを導入しておくことに。

NodeやRubyなどのバージョン管理にanyenvを使っているので、その流れでpyenvを使います。

$ anyenv install pyenv
$ exec $SHELL -l
$ pyenv install 3.5.1

これで3.x系も触ってみたいときに切り替えられます。

$ pyenv global 3.5.1
$ python --version
Python 3.5.1

$ pyenv global system
$ python --version
Python 2.7.11

Python界隈では、異なるバージョンのPythonを扱うときにvirtualenvなる仕組みなどもあるみたいなので、いちおうインストールしておく。

$ pip install virtualenv

Pythonパッケージ管理

Node.jsで言うところのnpmのようなパッケージ管理ツールとしては、 pipデファクトな模様。

以前は別途インストールが必要だったようですが、El Capitan上のPyhtonにはpipもプリインストールされていたので、そのまま利用できます。

あとで使いそうな機能として、Brewfileなどのように必要なパッケージのリストを用意しておいて、そこから一括してインストールする機能があるみたい。

$ pip freeze > Pyfile
$ pip install -r Pyfile

これを使えば、自分の環境構築リポジトリ に簡単に含められるかなと思ったのですが、ちょっと試してみたところ、Homebrewなどで入れてしまっているPython系のツールなども含まれてしまっているので、そのままだと二重管理のような状態になりそう。

当面は pip install を羅列したシェルスクリプトで管理しておいて、Python活用するなら改めて検討することに。

Emacs用開発環境

自分のメインエディタであるEmacsでの開発環境について。

メジャーモード

Python用のメジャーモードとしては、どうやら2種類あるもよう。

いずれpython.el側にpython-modeの機能を取り込んでいくような計画があるようですが、そういった意味でpython-modeの方が活発に開発されているようなので、こちらを採用することにしました。

MELPAで公開されていたので list-packagespython-modeを選択してインストール。

そのままでは標準添付のpython.elが優先されてしまうようだったので、以下の設定を追加。

(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))

なんか色々できるみたいだけど、ひとまずインストールしておいて、使い方は勉強しながらつかんで行く。

静的解析

Python用の静的解析ツールを探すに当たり、Flycheckが対応していないか確認してみました。

Supported Languages — Flycheck 26-cvs documentation

FlycheckがサポートしているPython用の静的解析ツールとしては、flake8、Pylint、Pythonコンパイラを使うpycompileなどがあるみたい。

とりあえず守備範囲が広そうな印象のPylintを使うことにしました。

さっそく pip でインストール。

$ pip install pylint

設定ファイルは以下の方法で初期テンプレートを生成できるもよう。

$ pylint --generate-rcfile > ~/.pylintrc

とりあえず何が重要なのかわからないので、まずはデフォルトで運用してみて、適宜いじっていくことに。

軽く書いただけでやたらと出てきた C0111 だけ disable に追加。

オートコンプリート

オートコンプリート系としては、Jedi というEmacs用のオートコンプリートツールが便利なようなので導入。

まずはMELPAからjediをインストール後、init.elに設定を追加。

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

その後、Emacs上で M+x jedi:install-server を実行します。

このとき、内部的にvirtualenvでJedi用の環境が作られるのですが、自分の場合 ~/.emacs.d/.python-environments/default という場所に作られてしまいました。

そこで、init.elに jedi:environment-root を追加して、環境が作られる先を設定しました。

(setq jedi:environment-root "~/.emacs.d/var/jedi/env")

勉強

日本語のドキュメントとしては Python 2.7.x ドキュメント が良いらしい。

この中の Python チュートリアル あたりが一通り押さえられるらしいほか、 オンライン ドキュメント からはPDFでのダウンロードできるサイトもあったので、とてもありがたい。

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版