# 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使ってみたいなぁ
Your blogs are great.Are you also searching for nursing research papers examples Check on our site. whatsapp us:+1-(951)-468-9855
返信削除