[:ja]※2016/12/29 更新
pyenvを使って python ローカル開発環境 を構築する方法を簡単にまとめた。
pythonでもpyenvとvirtualenvを使えばRubyのbundlerやGemfileと似たことができる。
pythonでもバージョンやライブラリの管理が簡単にできるため、
これを期にpythonを試してみるのもあり。
環境
- OS
- Linux version 3.2.0-64-generic (buildd@kissel) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #97-Ubuntu SMP Wed Jun 4 22:04:21 UTC 2014
- pyenv
- 1.0.6-1-g0256ff0
- virtualenv
- 15.1.0
pyenvのインストールと設定
これは非常に簡単にできる。
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv $ vim ~/.bashrc export PYENV_ROOT=$HOME/.pyenv export PATH=$PYENV_ROOT/bin:$PATH eval "$(pyenv init -)" $ source ~/.bashrc $ pyenv install 3.5.2 Downloading Python-3.5.2.tar.xz... -> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz Installing Python-3.5.2... patching file Lib/venv/scripts/posix/activate.fish Installed Python-3.5.2 to /home/ml/.pyenv/versions/3.5.2 # shimのリフレッシュ $ pyenv rehash # 使用するバージョン指定 $ pyenv global 3.5.2 $ which python $HOME/.pyenv/shims/python # アンインストール方法 $ pyenv uninstall 3.5.2
ライブラリの管理
pipコマンドを使ってライブラリのインストールができる。
Gemfileに相当するのはrequirements.txtだ(実際には名前はなんでも良い)。
また、pythonのライブラリは基本的には実行できるスクリプトもインストールされることが
ほとんどのようで、bundle execのようなものは必要ないらしい。
pip installをすると同じpyenvで同じバージョンのpythonを使う環境すべてに影響を与えてしまう。
それを防ぐためにはvirtualenvというものを使う。
$ which pip
$HOME/.pyenv/shims/pip
# pipのバージョンが低かったりするので上げておく
$ pip install --upgrade pip
# virtualenvのインストール
pip install virtualenv
# virtualenvで名前の通り仮想環境を作成する
# pオプションで指定するのはpythonの実行ファイルパス
# (pyenvなら以下のようにpython${VERSION}で大丈夫)
# オプションなしの引数は仮想環境に入るためのスクリプトなどの設置パス
$ virtualenv -p python3.5 $HOME/.venv35_ml
# 仮想環境に入る
# プロンプトが"$"から"(.venv35_ml) $"に変わります
$ source $HOME/.venv35_ml/activate
# 基本的なライブラリのインストール方法
$ pip install numpy
Collecting numpy
Downloading numpy-1.9.2.tar.gz (4.0MB)
100% |████████████████████████████████| 4.0MB 91kB/s
Installing collected packages: numpy
Running setup.py install for numpy
Successfully installed numpy-1.9.2
# requirements.txtを利用した場合
$ vim requirements.txt
django<1.3
urllib3
nose==1.1.2
$ pip install -r requirements.txt
Collecting django<1.3 (from -r requirements.txt (line 1))
Downloading Django-1.2.7.tar.gz (6.4MB)
100% |████████████████████████████████| 6.4MB 50kB/s
Collecting urllib3 (from -r requirements.txt (line 2))
Downloading urllib3-1.10.2.tar.gz (132kB)
100% |████████████████████████████████| 135kB 989kB/s
Collecting nose==1.1.2 (from -r requirements.txt (line 3))
Downloading nose-1.1.2.tar.gz (729kB)
100% |████████████████████████████████| 733kB 416kB/s
Installing collected packages: django, urllib3, nose
Running setup.py install for django
Running setup.py install for urllib3
Running setup.py install for nose
Successfully installed django-1.2.7 nose-1.1.2 urllib3-1.10.2
# インストールされているライブラリの確認
$ pip freeze
Django==1.2.7
nose==1.1.2
numpy==1.9.2
urllib3==1.10.2
# gemratのようなこと
$ pip freeze > requirements_new.txt
# 仮想環境から退出
# 仮想環境外では先程インストールしたライブラリは使えない
$ deactivate
pythonでもphpのcomposerやrubyのbundlerのようなことができることがわかったと思う。
pyenvとvirtualenvを使って機械学習用のDockerfileを作ってみた。
(Dockerですでに環境分離出来ているからvirtualenvはなくても大丈夫だけど一応使ってみた)