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というものを使う。
pythonでもphpのcomposerやrubyのbundlerのようなことができることがわかったと思う。 pyenvとvirtualenvを使って機械学習用のDockerfileを作ってみた。$ 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
(Dockerですでに環境分離出来ているからvirtualenvはなくても大丈夫だけど一応使ってみた)