virtualenvwrapperでPythonの仮想環境をたててみる
過去の記事でPythonをpyenvでバージョン別に管理する方法を紹介しました。
今回は、Pythonで立てるプロジェクトごとにライブラリ等をまっさらな状態で管理したり、Pythonバージョンも別々にしてみたいと思い、「virtualenvwrapper」を導入する方法を紹介したいと思います。
virtualenvwrapperとは?
仮想環境の作成・削除を行ったり、開発ワークフローを管理するラッパーを提供してくれるツール。
開発環境の依存環境による競合を起こさず、同時に複数のプロジェクトを管理しやすくします。
出典: virtualenvwrapperの公式ドキュメント
※今回の手順はこのドキュメントを参考にさせていただきます。
導入のメリット
- 仮想環境を管理(作成、削除、コピー)できる
- 1つのコマンドで仮想環境を切り替える
- 仮想環境を切り替えたタイミングで特定の処理を走らせる仕掛け(フック)ができる
- コマンドの引数から仮想環境をタブ補完できる
- その他、virtualenvwrapperの拡張ができる
等のメリットがあります。
それでは、実際にインストールして使ってみましょう。
インストール
pipによるライブラリインストール
$ pip install virtualenvwrapper
でインストールします。
パスを通す
次に、作業領域の保存場所をパスに渡します。
- ~/.bash_aliases
# virtualenvwrapper.shのフルパスを判定し、このファイルが存在していれば
# if内のコマンドを実行する
# WORKON_HOME = "仮想環境の置き場"
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
. /usr/local/bin/virtualenvwrapper.sh
fi
パスを有効化します。
source ~/.bash_aliases
そして以下のコマンド
$ workon
が認識されていれば成功です。
(追記)
この「source ~/.bash_aliases」で以下のエラー
Error while finding module specification for 'virtualenvwrapper.hook_loader' (ModuleNotFoundError: No module named 'virtualenvwrapper')
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.
が出ることがありますが
「virtualenvwrapperをインストールしたpipに対応しているpythonインタプリタ」
を環境変数に追加してあげると解消されました。
筆者の場合
「pyenv global (version number)でセットしたpython」のpip
でvirtualenvwrapperを入れていたので、$(which python)の結果を環境変数にセットすることで対応しました。
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=$(which python)
. /usr/local/bin/virtualenvwrapper.sh
fi
実際に仮想環境を作ってみる
それでは実際に仮想環境を作って行こうと思います。
プロジェクト用のディレクトリを掘り、その中で作業するときに仮想環境に切り替えて作業してみます。
プロジェクトを掘って移動する
$ mkdir 任意のプロジェクト名
$ cd 任意のプロジェクト名
仮想環境の作成
//以下のコマンドで$WORKON_HOMEに新しい環境を作成します
//virtualenvwrapperはvirtualenvの拡張機能であり同様のオプションが使えるため、
//--pythonオプションで、pyenv管理下のPythonを指定することもできます
$ mkvirtualenv 仮想環境名 --python 使用したいPythonインタプリタの指定(パス込みで入力)
※pyenv由来のPythonのインタプリタは、Ubuntu18.04環境にPythonをインストールして動かしてみるでインストールしていれば、
/.pyenv/versions/バージョン番号/bin/python
にあたります。
これで仮想環境ができました。
※Pythonの指定をしないと、デフォルトのPythonが使用されます(お使いの環境に依ります)。
試しに
$ pip freeze
で仮想環境内にインストール済みのpipライブラリを見てもまっさらな状態なので、
ライブラリの集まりが隔離された環境のもと、ライブラリを入れてプログラムを動かすことができます。
仮想環境のpipでライブラリを入れてみる
試しに、ライブラリ「django」を入れてみましょう。
(仮想環境名)$ pip install django
Downloading/unpacking django
Downloading Django-1.1.1.tar.gz (5.6Mb): 5.6Mb downloaded
Running setup.py egg_info for package django
Installing collected packages: django
Running setup.py install for django
changing mode of build/scripts-2.6/django-admin.py from 644 to 755
changing mode of /Users/dhellmann/Envs/env1/bin/django-admin.py to 755
Successfully installed django
この表示になると、インストール成功です。
管理中の環境を確認する
ちなみに、仮想環境は名前を変えれば複数作成でき、現在作成されている環境は
$ workon
で確認できます。
管理中の他の環境に切り替えたいとき
$ workon 別の環境名
でスイッチできます。
環境を抜け出したいとき
$ deactivate
で脱出できます。
仮想環境のコピー
仮想環境を複製したい場合は
$ cpvirtualenv 新規で作りたい仮想環境名 コピー元仮想環境名
とすれば、名前を変えて複製できます。
※コピー元の環境を残したまま、ライブラリを追加した新たな環境を用意したい場合などに便利です。
仮想環境の削除
仮想環境がいらなくなり、削除したい場合は
$ rmvirtualenv 仮想環境名
とすれば、削除できます。
コマンドのタブ補完
仮想環境「web1」が作成されている前提で、試しに以下の入力
$ workon w
から、Tabキーを押してみます。すると
$ workon web1
コマンドを予測して補完してくれました!
以上でWebアプリ作成用環境、データ処理用環境など、用途に応じて
- Pythonのバージョン
- ライブラリの集まり
を個別に切り替えることができるようになりました。
ひとつの環境で全部入れにすると、どれが必要で不要かが把握しにくくなったりいろいろ面倒なので、この仕組みはありがたいです。
今回はここまでにいたします。
では、また会いましょう!