LinuxでPython使うならVirtualenvをつかえ

掲題の通りです。

機械学習ブームが完全に到来し、Pythonを覚えてみようかなと思う人もたくさん増えたと思います。そこで、pipやらeasy_installやらを使って必要なライブラリをインストールしているとうまくいかないことが往々にしてあります。

Pythonというのは非常に便利な言語なので、大体のLinuxはパッケージ管理システム等々のOS機能としてもPythonをバリバリ使っています。

Pythonを始めると分かりますが、まっさらな状態から構築した環境ならまだしも、パッケージ管理システムなどでPython関連ライブラリが入っていると依存性の解決がとても面倒になります。あるライブラリAがあり、これから使いたいライブラリBはライブラリAのバージョン2.0以上を要求しますが、パッケージ管理システムが提供するのはバージョン1.0まで…ということはとてもよくあります。

これを、pipなどを使って最新のパッケージをダウンロード・インストールして/usr/lib/python2.7/dist-packagesを書き換えるとよろしくないことが起こる可能性があります。よろしくないことが起こる前に、pipだと「/usr/lib/python2.7/dist-packagesはOSが管理してるから書き換えないよ」的なメッセージ(たとえば下記例)

$ pip install --upgrade six
Downloading/unpacking six from https://pypi.python.org/packages/3.3/s/six/six-1.9.0-py2.py3-none-any.whl#md5=9ac7e129a80f72d6fc1f0216f6e9627b
  Downloading six-1.9.0-py2.py3-none-any.whl
Installing collected packages: six
  Found existing installation: six 1.5.2
    Not uninstalling six at /usr/lib/python2.7/dist-packages, owned by OS
Successfully installed six
Cleaning up...

が出てきます。関係ねぇよ、ガンガン行こうぜってノリで無理やり書き換えるとPython関連プログラムが動かなくて痛い目に遭うのでご注意ください(体験済み)。

んじゃあどうすればいいのか。プログラマやってると本当良く思うんですけど、こういうので試行錯誤してる時間って何も生み出してない割にストレスばっか溜まるので本当勘弁してほしいんですよね。よっしゃ、俺がシンギュラリティに一番乗りしてやるぜ!!ってやる気になってる人の何パーセントかは絶対こういうところで夢半ばに朽ちていってるんすよ…。よくないよねー。

まあそれはおいといて、Pythonの場合はこういう事になる前にvirtualenvというものを使ってPython実行環境を本体とは切り離しましょうってことです。

インストール(Ubuntu)

ほかのディストリは知らん。

$ sudo apt-get install python-pip python-dev python-virtualenv
$ mkdir tensorflow(←任意)
$ virtualenv --system-site-packages tensorflow
$ source tensorflow/bin/activate (←bashの場合)

Tensorflow pip-installation

ここまでやるとコンソールが(tensorflow)という仮想環境になります。

virtualenvで綺麗な環境を作っておき、そこからpipで必要なパッケージを入れると大体うまく行きます。

面倒くさがらずにvirtualenvを構築してからやった方が良さそうです。