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
コメント