0utputab1e

virtualenvwrapperでPythonの仮想環境をたててみる

 2020-07-05
 

過去の記事で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のバージョン
  • ライブラリの集まり

 
を個別に切り替えることができるようになりました。

ひとつの環境で全部入れにすると、どれが必要で不要かが把握しにくくなったりいろいろ面倒なので、この仕組みはありがたいです。

今回はここまでにいたします。

では、また会いましょう!

 

あわせて読みたい記事

>> Homeに戻る