- 環境
- インストール
- pyenv のアップデート
- python のインストール
- pyenv-virtualenv を利用
- pyenv-virtualenv 環境で pip を利用
- pyenv-virtualenv で環境を変更
- 一時的に他の環境を利用
- virtualenv と pyenv-virtualenv
環境
# cat /etc/centos-release CentOS Linux release 7.3.1611 (Core) # ansible --version ansible 2.2.1.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides
インストール
インストールに必要なパッケージ
# yum install make gcc patch readline-devel zlib-devel openssl-devel bzip2-devel sqlite-devel git -y
ユーザ環境にインストール
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile $ source ~/.bash_profile $ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv $ git clone git://github.com/yyuu/pyenv-update.git ~/.pyenv/plugins/pyenv-update $ pyenv rehash
ここでは、pyenv-virtualenv
とpyenv-update
プラグインをインストールしています。
pyenv のアップデート
$ pyenv update
pyenv
で利用できるpythonのバージョン等を更新できます。
pyenv-update
が必要です。
python のインストール
# インストール可能なバージョン一覧 $ pyenv install -l # python 3.6.0 をインストール $ pyenv install 3.6.0 # pyenv で管理している python のバージョン一覧 $ pyenv versions * system (set by /home/foobar/.pyenv/version) 3.6.0 # 3.6.0 を規定の python として設定 $ pyenv global 3.6.0 $ pyenv versions system * 3.6.0 (set by /home/foobar/.pyenv/version)
global
ではなくlocal
とすると、カレントディレクトリに対してpythonのバージョンが設定されます。
pyenv-virtualenv を利用
pyenv-virtualenv
を利用すると、pyenv
環境に仮想環境を構築できます。
# python 3.6.0 を利用して apps1 の環境を作成 $ pyenv virtualenv 3.6.0 apps1 # python 3.6.0 を利用して apps2 の環境を作成 $ pyenv virtualenv 3.6.0 apps2 $ pyenv versions system * 3.6.0 (set by /home/foobar/.pyenv/version) 3.6.0/envs/apps1 3.6.0/envs/apps2 apps1 apps2 # apps1 を規定の環境として設定 $ pyenv global apps1 $ pyenv versions system 3.6.0 3.6.0/envs/apps1 3.6.0/envs/apps2 * apps1 (set by /home/foobar/.pyenv/version) apps2
pyenv-virtualenv
が必要です。
pyenv-virtualenv 環境で pip を利用
$ pip install requests $ pip freeze -l requests==2.13.0
pyenv-virtualenv で環境を変更
$ pyenv global apps2 $ pyenv versions system 3.6.0 3.6.0/envs/apps1 3.6.0/envs/apps2 apps1 * apps2 (set by /home/foobar/.pyenv/version) $ pip freeze -l
一時的に他の環境を利用
$ pyenv shell apps1 $ pyenv versions system 3.6.0 3.6.0/envs/apps1 3.6.0/envs/apps2 * apps1 (set by PYENV_VERSION environment variable) apps2 $ pip freeze -l requests==2.13.0 # 環境変数 $ echo ${PYENV_VERSION} apps1 # 環境変数を削除 $ unset PYENV_VERSION $ pyenv versions system 3.6.0 3.6.0/envs/apps1 3.6.0/envs/apps2 apps1 * apps2 (set by /home/foobar/.pyenv/version)
virtualenv と pyenv-virtualenv
pyenv-virtualenv
とは別にvirtualenv
という仮想環境を構築する仕組みが存在します。
以降は、pyenv-virtualenv
でvirtualenv
を利用した場合についての検証です。
$ pyenv global apps1 # virtualenv をインストール $ pip install virtualenv # virtualenv の環境 "apps1test" を作成 $ mdir test $ cd test $ virtualenv apps1test $ source appstest/bin/activate (apps1test) $ pyenv versions system 3.6.0 3.6.0/envs/apps1 3.6.0/envs/apps2 * apps1 (set by /home/foobar/.pyenv/version) apps2 (apps1test) $ pip freeze -l appdirs==1.4.1 packaging==16.8 pyparsing==2.1.10 six==1.10.0 (apps1test) $ pip install tqdm (apps1test) $ pip freeze -l appdirs==1.4.1 packaging==16.8 pyparsing==2.1.10 six==1.10.0 tqdm==4.11.2 (apps1test) $ deactive $ pip freeze -l requests==2.13.0 virtualenv==15.1.0
上記の通り、python-virtualenv
の環境においても、virtualenv
の環境を作成すると、pyenv-virtualenv
の影響を受けないことが確認できます。
ただし、pythonのバージョンはpyenv
のバージョンです。