pyenv + pyenv-virtualenv で Python仮想環境作成

Vagrant + CentOS7 + pyenv + Python3 環境構築

こちらで作成した Pythonの環境に、複数の隔離された仮想環境を作成していきます。

方法としては virtualenv か pyenv-virtualenv のどちらかを使うようです。どちらがいいのでしょうか。

そもそも仮想環境が必要な場合

開発環境で、複数の Pythonプロジェクトを開発しており、プロジェクト間では異なるパッケージを利用する場合です。

プロジェクトごとにインストールするパッケージを切り替えられると便利です。

pyenv, virtualenv, pyenv-virtualenvとは

以下、簡単な認識合わせを。

機械学習名古屋_第7回勉強会_Python環境構築方法.key

pyenv

1台の PC 内で異なるバージョンの Python を使う場合に使用します。

LinuxOSには Python が標準でインストールされており、そのバージョンは 2系の古いやつです。この標準インストールされている Python に影響与えず Python3系を使用するため、pyenvを使います。

pyenv local でディレクトリごとに使用する Pythonのバージョンを選択することができます。

ただし、pyenv local で選択するバージョンは、pyenv上で共通です。異なるディレクトリに対して pyenv local を設定してもパッケージの追加・更新などの影響を与えあってしまいます。pyenv だけでは同一バージョンで独立した環境を構築できません。

この問題を解決するには virtualenv か pyenv-virtualenv を使う必要があります。

virtualenv

同一バージョンの Python 環境で、複数の環境を使い分けたい場合に使います。

pyenv が出てくる前から使われているため、pyenv がなくても使えま。virtualenv はパッケージなため、pip からインストールできます。

pyenv-virtualenv

同一バージョンの Python 環境で、複数の環境を使い分けたい場合に使います。pyenv コマンドで実行できます。

例えば pyenv でインストールした 3.5.1 の環境を 2つ作りたいなどです。これは 3.5.1 の隔離された仮想環境を 2つ作って解決します。

実際に使ってみます。

pyenv + pyenv-virtualenv 使い方

本家サイトを参考にしていきます。

pyenv-virtualenvプラグインをインストールします。

# Macの場合
brew install pyenv-virtualenv

pyenv を github から インストールした場合は、 pulugin 配下に git clone して直接配置します。

# Linuxの場合
cd /usr/local/pyenv/plugins
sudo git clone https://github.com/yyuu/pyenv-virtualenv.git
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
exec "$SHELL"

現在の pyenv でインストールされている Pythonを確認してみると、Python の 3.5.1 のバージョンが使えます。

pyenv version

# 以下が表示
3.5.1 (set by /usr/local/pyenv/version)

この Python3.5.1 の仮想環境を作成してみます。

sudo pyenv virtualenv 3.5.1 uwsgi

uwsgi 仮想環境が作成されています。

pyenv versions

# 以下が表示
system
* 3.5.1 (set by /usr/local/pyenv/version)
3.5.1/envs/uwsgi
uwsgi

仮想環境一覧も確認してみます。

pyenv virtualenvs

# 以下が表示
3.5.1/envs/uwsgi (created from /usr/local/pyenv/versions/3.5.1)
uwsgi (created from /usr/local/pyenv/versions/3.5.1)

uwsgi 仮想環境を有効にします。

sudo pyenv local uwsgi

仮想環境が有効になっています。

pyenv versions

# 以下が表示
system
3.5.1
3.5.1/envs/uwsgi
* uwsgi (set by /home/vagrant/work/uwsgi/.python-version)

仮想環境から新しい仮想環境も作ることができるようです。
その場合、パッケージ等は引き継がれます。

結論

virtualenv と pyenv-virtualenv を使う目的は同じです。

pyenv-virtualenv も仮想環境として十分活用できそうです。pyenvコマンドで全て解決するためシンプルですね。

参考

機械学習名古屋_第7回勉強会_Python環境構築方法.key

[Python]pyenvとvirtualenvとpyenv-virtualenv

Pyenvとvirtualenv pluginによるPython環境を構築する

コメント

タイトルとURLをコピーしました