2016年12月5日月曜日

pyenvの始め方と使い方

# pyenvの始め方と使い方 田胡・柴田研究室アドベントカレンダー2016 5日目 昨年度にRobi jr.を解体した学部4年のbriongloidです。 Pythonの環境構築をするとき、そこまで必要ではないのですが便利なのでpyenvを使っています。 ここではpyenvの始め方と使い方について書いていきます。 OS: Ubuntu 16.04 LTS - 始め方 必要なパッケージを入れてく ``` apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget git curl llvm libncurses5-dev xz-utils # for numpy, scipy and matplotlib apt-get install -y libfreetype6-dev libblas-dev liblapack-dev gfortran tk-dev ``` したのを実行するとOKのはず ``` PYENV_URL="git://github.com/yyuu" # PYENV_URL="https://github.com/yyuu" # home PYENV_ROOT="${HOME}/.pyenv" PYENV_SH="${HOME}/.bashrc" # local # PYENV_ROOT="/usr/local/pyenv" # PYENV_SH="/etc/profile.d/pyenv.sh" git clone $PYENV_URL/pyenv.git $PYENV_ROOT mkdir -p $PYENV_ROOT/shims mkdir -p $PYENV_ROOT/versions git clone $PYENV_URL/pyenv-virtualenv.git $PYENV_ROOT/plugins/pyenv-virtualenv # 「pyenv virtualenv」を使えるようにする git clone $PYENV_URL/pyenv-pip-rehash.git $PYENV_ROOT/plugins/pyenv-pip-rehash # 「pyenv rehash」を省略できる git clone $PYENV_URL/pyenv-update.git $PYENV_ROOT/plugins/pyenv-update # 「pyenv update」でpyenv及びプラグインをアップデートできるようにする echo "export PYENV_ROOT=\"${PYENV_ROOT}\"" | tee -a ${PYENV_SH} echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | tee -a ${PYENV_SH} echo 'eval "$(pyenv init -)"' | tee -a ${PYENV_SH} echo 'eval "$(pyenv virtualenv-init -)"' | tee -a ${PYENV_SH} ``` 共有のパソコンで全体に反映したいなら#homeの代わりに#localにする。 sudoで利用できるようにvisudoで以下のように編集(homeなら不要) ``` #Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin Defaults env_keep += "PATH" Defaults env_keep += "PYENV_ROOT" ``` 終わったらターミナルを再起動 ``` exec $SHELL -l ``` 適当なコマンドで確認 ``` free-python@freepython-VirtualBox:~$ pyenv version system (set by /home/free-python/.pyenv/version) ``` - コマンド |コマンド|説明| |:--|:--| |pyenv version | 使用してるPythonを表示する| |pyenv versions | 利用できるバージョンの一覧| |pyenv install | Pythonのバージョンを指定してインストールする| |pyenv uninstall | バージョンのアンインストール、仮想環境の削除| |pyenv global | 使用するPythonのバージョンの変更| |pyenv local | 使用するPythonのバージョンの変更、globalより優先される| |pyenv shell | 使用するPythonのバージョンの変更、global・localより優先される| |pyenv rehash | 設定を変更後に反映するために実行する、pyenv-pip-rehashを入れてれば不要| |pyenv which | パスを調べるとき使う| |pyenv prefix | Pythonのディレクトリのパス| |pyenv virtualenv |仮想環境の作成、pyenv-virtualenvのプラグインで使えるようになる| - 使い方 インストールできるバージョンの一覧 ``` pyenv install --list ``` 実行するといろいろ出てくるけど最初の方にある、数字から始まるのが通常のPython Pythonの2.7.12と3.5.2をインストール ``` pyenv install 2.7.12 pyenv install 3.5.2 ``` ダイナミックリンク用のshared objectが必要な外部ライブラリ(Theanoとか)を使用する場合 ``` env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.12 env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.2 ``` 入ってるバージョン確認 ``` pyenv versions ``` 実行結果はこのようになる ``` free-python@freepython-VirtualBox:~$ pyenv versions * system (set by /home/free-python/.pyenv/version) 2.7.12 3.5.2 ``` systemはpyenvではなくUbuntuに入っているPythonを指す。 使用するバージョンを変更するにはglobal,local,shellのいずれかを使う pyenvでは使用するPythonのバージョンを以下のように確認する。 1. 環境変数PYENV_VERSIONに定義されてるバージョンを使う pyenv shellで設定できる 2. 現在のディレクトリの.python-versionファイルに定義してあるバージョンを使う pyenv localで設定できる 3. 親ディレクトリに.python-versionファイルがないか探す。ルートまで1つずつ確認する。 4. グローバルな~/.pyenv/versionファイルを探す。 pyenv globalで設定できる 5. 上記が全てなかった場合はsystemを使う localはプロジェクトに対してとか、共有パソコンならホームディレクトリに使っておくと事故を避けれる。 shellはrootで作業するときとかかな、homeにいれたら使えないかもだけど。 バージョンの変更 ``` free-python@freepython-VirtualBox:~$ pyenv versions * system (set by /home/free-python/.pyenv/version) 2.7.12 3.5.2 free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) 3.5.2 free-python@freepython-VirtualBox:~$ pyenv local 3.5.2 free-python@freepython-VirtualBox:~$ pyenv versions system 2.7.12 * 3.5.2 (set by /home/free-python/.python-version) free-python@freepython-VirtualBox:~$ pyenv shell system free-python@freepython-VirtualBox:~$ pyenv versions * system (set by PYENV_VERSION environment variable) 2.7.12 3.5.2 ``` local、shellで設定した環境は--unsetで解除 ``` free-python@freepython-VirtualBox:~$ pyenv versions * system (set by PYENV_VERSION environment variable) 2.7.12 3.5.2 free-python@freepython-VirtualBox:~$ pyenv shell --unset free-python@freepython-VirtualBox:~$ pyenv versions system 2.7.12 * 3.5.2 (set by /home/free-python/.python-version) free-python@freepython-VirtualBox:~$ pyenv local --unset free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) 3.5.2 ``` Pythonの2系、3系それぞれを設定できる。 ``` free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 3.5.2 free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) * 3.5.2 (set by /home/free-python/.pyenv/version) ``` Pythonの場所を調べる時とか pyenv which python ``` free-python@freepython-VirtualBox:~$ pyenv which python2 /home/free-python/.pyenv/versions/2.7.12/bin/python2 free-python@freepython-VirtualBox:~$ pyenv which python3 /home/free-python/.pyenv/versions/3.5.2/bin/python3 ``` systemの時 ``` free-python@freepython-VirtualBox:~$ pyenv which python2 /usr/bin/python2 free-python@freepython-VirtualBox:~$ pyenv which python3 /usr/bin/python3 ``` パス指定の時に使うと思う pyenv prefix ``` free-python@freepython-VirtualBox:~$ pyenv global system free-python@freepython-VirtualBox:~$ pyenv prefix /usr free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 free-python@freepython-VirtualBox:~$ pyenv prefix /home/free-python/.pyenv/versions/2.7.12 ``` pyenvで仮想環境を使うときはpyenv virtualenvを使う。 2.7.12を使うとき ``` free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 free-python@freepython-VirtualBox:~$ pyenv virtualenv py2.7.12-free Collecting virtualenv Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB) 100% |████████████████████████████████| 1.8MB 713kB/s Installing collected packages: virtualenv Successfully installed virtualenv-15.1.0 You are using pip version 8.1.1, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. New python executable in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/bin/python2.7 Also creating executable in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/bin/python Installing setuptools, pip, wheel...done. Ignoring indexes: https://pypi.python.org/simple Requirement already satisfied (use --upgrade to upgrade): setuptools in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/lib/python2.7/site-packages Requirement already satisfied (use --upgrade to upgrade): pip in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/lib/python2.7/site-packages free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) 2.7.12/envs/py2.7.12-free 3.5.2 py2.7.12-free ``` 仮想環境を使うのはバージョン選択と同じ ``` free-python@freepython-VirtualBox:~$ pyenv global py2.7.12-free (py2.7.12-free) free-python@freepython-VirtualBox:~$ pyenv versions system 2.7.12 2.7.12/envs/py2.7.12-free 3.5.2 * py2.7.12-free (set by /home/free-python/.pyenv/version) ``` これでpyenvについては終わりにします。 環境構築は楽にやりたい反面「しっかりできるようにならないとな」と思ってたり思ってなかったり。 docker使ってみたいなぁ

1 件のコメント: