Python環境構築ベストプラクティス2019
Published at: 2019-02-18 / Updated at: 2019-05-14Web上には新旧さまざまなPython環境の構築の方法が乱れており, 正しい情報にたどり着けない人がいて不憫なので2019年2月現在のベストプラクティスをPythonを使いたい人の属性ごとに紹介したいと思います.
自分がどのような環境を作ればいいかわかったなら公式ドキュメントというほぼ絶対的な1次資料を元に最高の環境を作っていきましょう.
For Beginners
とりあえずPythonを勉強してみたい, 手軽に手元にあるデータを解析してみたいという人はこちらです.
プログラムをガリガリ書いていくのではない場合, 自分のPCに環境構築する必要はありません.
Googleが提供しているColaboratoryを使いましょう.
苦労することなくPythonを始めることができます.
流行りの機械学習, とりわけ深層学習をやってみたいという場合, 無料でGPU, TPUを使えるのも最高です.
For Windows Users
茨の道です. WSLを導入してUbuntuその他Linux環境を整えましょう.
WSLが使えるようになったら次のセクションに進んでください.
また, ちょっと試してみたいけどColaboratoryでは物足りない, でもWSLは難しいという場合はMinicondaを使うといいです.
For Most People (Unix Users)
大多数の人がここに当てはまります. Pythonでプログラミングをしたい学生, 社会人, 手元のデータを解析したい研究者, 機械学習をやりたい人, アプリケーションを作りたい人などとにかくほとんどの人です.
世の中には脳死でpyenv
, virtualenv
を入れようだとか機械学習ならAnaconda
を使おうだとか言ってる人(さすがに最近は死滅したか?)がいますがこれらのツールは必要ありません.
LinuxでもMacでも構いませんがPython3.6以上をシステムにインストールしてください. 3.5以下はレガシーです. これらを使っている人は考古学者であることを自覚してください.
Ubuntuなら$ sudo apt install python
, macなら$ brew install python
のコマンドで入るやつです.
自分のmacにHomebrewが入っていなければ入れておきましょう.
ちなみにHomebrewはLinux環境にも対応したので, 社内, ラボ内の共有サーバー上で環境構築したい, でもsudo権限がなくてPythonの化石しか使えないというときに利用してみてもいいと思います.
ターミナルに$ python -V
と打ってPython 3.7.x
と出ればOKです.
次にライブラリの管理です.
人々はPython標準ライブラリに飽き足らずnumpy
やscipy
, matplotlib
, requests
, flask
, django
といった外部ライブラリを使いたくなるでしょう.
これらの管理にはpipenvを使います.
公式のインストール方法に従えば良いのですが, 該当者が多いと思われる方法を記しておきます.
macなら$ brew install pipenv
でインストールしましょう.
その他の環境であれば$ pip install pipenv
のコマンドでインストールできると思います. 適宜sudoをつけて実行してください.
これ以降二度とpip
は使いません.
他サイトの$ pip install foo
は全て$ pipenv install foo
に置き換えましょう.
pipenv
はプロジェクト固有のライブラリ空間を構成してくれます.
例えばProjectAでは機械学習を使ってなんかやりたい, ProjectBではウェブアプリを作りたいみたいな場合, プロジェクトごとにディレクトリを分けそれぞれのルートディレクトリでpipenv
を実行します.
$ cd projectA
$ pipenv install numpy pandas ...
$ cd projectB
$ pipenv install django ...
このときPipfile.lock
というファイルができますが, これを用いることで他のPC上で全く同じライブラリ空間を再構成することができます. (Pipfile
, Pipfile.lock
がある状態で$ pipenv sync
)
つまり他人が自分の書いたコードを使いたいとき, 同じ環境を完全に再現することができるようになります.
自分の実装を公開した際, 他人による追試が簡単になりますね.
なお, このPipfile.lock
は絶対に自分で編集しないでください.
pipenv
でインストールしたライブラリを使いたい場合,
$ pipenv shell
$ python
もしくは$ pipenv run python
として起動してください.
長くなったので要点をまとめます.
- システムのPythonを使う
pipenv
でライブラリの管理を行う
これで最高のPython環境が整います.
For Library Maintainers
ライブラリを作成するなど複数バージョンのPythonを切り替えなければいけない人はpyenvで必要なPythonのバージョンを入れた上でpipenv
を導入しましょう.
For Cheminformaticists…
RDKitを使わなくて済む人は幸せです. For Most Peopleを参考にしてください.
使わなければいけない人, 残念ながらMinicondaを入れてください. 修羅の道です.
RDKitに限らない任意のpip (pipenv)
でインストールできないライブラリに依存する場合, Miniconda
を受け入れてください.
For Docker Lovers
お好きに使ってください.
GPUを使って深層学習やりたい人はnvidia dockerを使うと便利です.
CPU上ではpipenv
のみを用いて環境構築, GPU用にDockerで実行環境だけ整えるといった運用が自分の好みです.
まとめ
pipenv
を信じ, 使いこなしましょう.
Appendix 1
Pythonにはコーディング規約があり, これに従わないコードは煩雑で見にくいものとなります.
コードが規約に従っているかチェックするライブラリにはいくつか種類がありますが, flake8
を入れておけば他には必要ありません.
慣れてきたらflake8-isort
, hacking
などの拡張を入れてもいいですね.
しかしこれらを手動で修正していくのは退屈で時間の無駄なのでformatterというのにやらせましょう.
Pythonのformatterにはyapf
やblack
というものがあります.
基本的に好きなものを使うと良いと思いますが, 私はyapf
を好んで使っています.
VSCode等のエディタの設定でファイルを保存する際にコードを綺麗にしてくれるようになるのでおすすめです.
こういった自分が書いたコードが使わないライブラリ群はpipenv install --dev foo
としてインストールできます.
Appendix 2
最後にPipfileの参考例を掲載しておきます.
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
flake8 = "*"
yapf = "*"
[packages]
numpy = "*"
scipy = "*"
pandas = "*"
sklearn = "*"
seaborn = "*"
[requires]
python_version = "3.7"