pyenv および virtualenv の使い方
[最終更新] (2019/06/03 00:31:52)
最近の投稿
注目の記事

概要

pyenvこちらで紹介した rbenv および こちらで紹介した plenv の python 版です。ただし pyenv には rbenv/plenv の bundler/carton が存在しません。代わりに pyenv には virtualenv が存在します。bundler/carton は、あるバージョンの ruby/perl に gem/cpanm でモジュールを直接インストールするのではなく、パッケージとして管理することによってプロジェクト毎に異なるバージョンのモジュールを使用できるようにします。このことを python の virtualenv では別の観点から実現しています。rbenv/plenv では同じバージョンの ruby/perl は一つしか存在できませんが pyenv では同じバージョンの python 環境を仮想的に複数存在させることで、プロジェクト間で同じバージョンの python を使用しつつモジュールは異なるバージョンを使用できるようにします。モジュールのインストール時には ruby/perl の gem/cpanm に相当する pip などを利用します。python モジュールのレポジトリは Python Package Index (PyPI) です。pip は PyPI から search, install 等を行います。発音は似ていますが Python 上の Python 実行環境 PyPy と区別します。

インストール

事前に必要なソフトウェアをインストールしておきます。例えば以下のようなものが必要になります。

sudo yum install gcc openssl-devel readline-devel bzip2-devel sqlite-devel patch
sudo apt install git build-essential libssl-dev libreadline-dev zlib1g-dev libbz2-dev libsqlite3-dev python-tk tk-dev

ホームディレクトリ以下にインストール

自分だけに有効な pyenv を用意したい場合、管理者権限がなくてもホームディレクトリ以下にインストールできます。

ダウンロード

pyenv および pyenv-virtualenv プラグインをダウンロードします。pyenv-virtualenv は pyenv でインストールした各バージョンの python に対して virtualenv を自動でインストールするためのプラグインです。

git clone https://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

設定ファイル

~/.bashrc

export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

設定の反映

exec $SHELL

システムインストール

システム全体にインストールすることで、個別にユーザそれぞれに対してインストールする手間が省けます。

ダウンロード

sudo git clone https://github.com/yyuu/pyenv.git /usr/local/pyenv
sudo git clone https://github.com/yyuu/pyenv-virtualenv.git /usr/local/pyenv/plugins/pyenv-virtualenv
sudo mkdir /usr/local/pyenv/shims
sudo mkdir /usr/local/pyenv/versions

設定ファイル

/etc/profile.d/pyenv.sh

export PYENV_ROOT=/usr/local/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

設定の反映

exec $SHELL

基本的なコマンド

python インストール

選択可能なバージョンを調査してインストールします。pyenv をシステムインストールした場合は root で作業します。新しいバージョンの python や pip によって実行可能なファイルをインストールした場合は rehash を実行する必要があります。

pyenv install -l
pyenv install 2.7.10
pyenv rehash

virtualenv 環境の作成

2.7.10 のバージョンの python 環境が新設されました。該当の python に対する初回実行時には pyenv-virtualenv プラグインによって virtualenv が自動でインストールされます。その際、該当バージョンの python にインストールされている pip が利用されます。事前に pip のバージョンを最新にしておきましょう。

pyenv shell 2.7.10
pyenv exec pip install --upgrade pip

virtualenv 環境の作成

$ pyenv virtualenv 2.7.10 my-virtualenv-2.7.10
$ ls $PYENV_ROOT/versions/
2.7.10  my-virtualenv-2.7.10

作成されたことを確認してみます。

$ pyenv virtualenvs
  my-virtualenv-2.7.10 (created from /home/vagrant/.pyenv/versions/2.7.10)

virtualenv 環境は該当バージョンの python の複製として同等の扱いを受けるため pyenv コマンドの versions でも確認できます。

$ pyenv versions
  system
* 2.7.10 (set by PYENV_VERSION environment variable)
  my-virtualenv-2.7.10

アンインストール (python / virtualenv 環境)

python バージョンまたは python バージョンの複製である virtualenv 環境は同じコマンドで削除できます。

pyenv uninstall my-virtualenv-2.7.10
pyenv uninstall 2.7.10

バージョンの切り替え

システム全体

pyenv global my-virtualenv-2.7.10

カレントディレクトリのみ

$ pyenv local my-virtualenv-2.7.10
$ cat .python-version
my-virtualenv-2.7.10

現在のシェルのみ

pyenv shell my-virtualenv-2.7.10

コマンドの実体の確認

(my-virtualenv-2.7.10)[vagrant@localhost ~]$ pyenv which pip
/home/vagrant/.pyenv/versions/my-virtualenv-2.7.10/bin/pip

Flask アプリケーションの例

Python Django と比較して小型の Web フレームワーク Flask を動かしてみます。

mkdir flask-app
cd flask-app
pyenv virtualenv 2.7.10 flask-app-2.7.10
pyenv local flask-app-2.7.10
pyenv exec pip install Flask

hello.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

動作検証

(flask-app-2.7.10)[vagrant@localhost flask-app]$ python hello.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

別ターミナル

$ curl http://localhost:5000/
Hello World!

virtualenv 環境を保存

この続きが気になる方は

pyenv および virtualenv の使い方

残り文字数は全体の約 22 %
tybot
100 円
関連ページ
    概要 WSGI (Web Server Gateway Interface) は PSGI に影響を与えた python の標準化された Web インターフェースです。 Apache + mod_wsgi uwsgi WSGI の実装としては上記二つの選択肢があります。前者は Apache に依存しており更新も活発ではないため、後者の uwsgi を利用します。
    概要 QT を Python から利用するためのライブラリには PyQt や PySide 等が存在します。PySide は元々 QT4 向けのライブラリでしたが、QT5 に対応するために新たに PySide2 が開発されました。PySide2 は Qt for Python ともよばれています。 Q: PySide? Qt for Python? what is the name?