【Ubuntu】Pythonの仮想環境をvenvで作る方法

2019年7月7日

venvを使ってPythonの仮装環境を作るまでの流れを簡単に説明します。

前提知識

仮想環境とは

一つのマシンの中には普通一つの環境しかないはずです。
しかし仮想的に環境を作り上げれば、
一つのマシンに複数の環境を作り上げることが出来ます。

この説明だけだと分かりにくいと思うので、スマホを例にして説明してみます。

例え話

スマホが1台あります。
ブルーライトをカットしてくれるアプリがあり、
それはインストールされた直後にスマホの画面を暗くする効果を持ちます。

ここで本当のスマホの環境をAとして、
スマホの中に仮想環境Bを作り上げたとしましょう。

仮想環境Bの中に入った状態で、
ブルーライトカットアプリをインストールしてみると、
スマホの画面が暗くなります。

この状態で仮想環境を抜け、環境Aの方に移動してみると、
暗かった画面がアプリを入れる前の状態に戻りました。

再度、仮想環境Bに戻ってみると画面が暗くなります。

例え話は以上。

このように仮想環境の技術を使えば、
あるアプリケーションを入れた環境と入れていない環境、
もしくは設定が異なる二つの環境を一つのマシンの中に構築することが出来ます。

かなり便利な技術です。

venvとは

venvはPython用の仮想環境作成をサポートしてくれるモジュール。
venvを使えば、あるpython用ライブラリ(Numpyとか)が入った環境と入っていない環境の
二つを一つのマシンの中に構築することが出来る。

同じ機能を持ったものに”pyenv”があるけど、これはPython3.6から非推奨になっているのでvenvを使う方が良いです。
参考:venv — 仮想環境の作成

仮想環境作成手順

それではvenvを使って仮想環境を作成するまでの手順を説明します。

1. venvを使える状態にするためpython3-venvをインストール

$ sudo apt install python3-venv

2. venvを使って仮想環境を作成

$ python3 -m venv new_environment_name
  • new_environment_nameのところに作成する仮想環境につけたい名前を入力。
  • /home/iruka/python_envのようにパスも指定できます。
    指定しなければ現在いるディレクトリの直下に仮想環境が作成さます。
  • “-m”はそのあとに記載されたモジュール(今回で言うとvenv)を実行するというオプション

3. 作成した仮想環境の中に入る(仮想環境有効化)。

$ source new_environment_name/bin/activate

4. 仮想環境から出る。

$ deactivate
  • このコマンドは自分がどのディレクトリにいても効きます。

仮想環境作成手順は以上です。

ではこれから本当に仮想環境が作成されているか確認してみましょう。

仮想環境の確認

1. python関係のライブラリをインストールするためにはpipというモジュールが必要になるので、
下記のコマンドを入力してインストール。
(venvはpipでインストールされたものを管理する。
 pipはaptでインストールするからどの環境で下記コマンドを入力してもOK。)

$ sudo apt install python3-pip

2. 仮想環境に入らない状態で下記の”pip3 list”を入力

$ pip3 list
DEPRECATION: The default format will switch to columns in the future.
You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
apturl (0.5.2)
asn1crypto (0.24.0)
Brlapi (0.6.6)
certifi (2018.1.18)
chardet (3.0.4)
command-not-found (0.3)
cryptography (2.1.4)
cupshelpers (1.0)
defer (1.0.6)
distro-info (0.18ubuntu0.18.04.1)
httplib2 (0.9.2)
idna (2.6)
keyring (10.6.0)
keyrings.alt (3.0)
language-selector (0.1)
launchpadlib (1.10.6)
lazr.restfulclient (0.13.5)
lazr.uri (1.0.3)
louis (3.5.0)
macaroonbakery (1.1.3)
Mako (1.0.7)
MarkupSafe (1.0)
netifaces (0.10.4)
oauth (1.0.1)
olefile (0.45.1)
〜〜省略〜〜
xkit (0.0.0)
zope.interface (4.3.2)

何かたくさん入っています。

3. 仮想環境に入ってpip3 listを実行。
 (venvで作った仮想環境ならpipと打てばpip3を意味するので”pip list”でもOK)

$ pip list
DEPRECATION: The default format will switch to columns in the future.
You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
pkg-resources (0.0.0)
setuptools (39.0.1)

今度はかなり少ないです。インストールされているライブラリに違いがあることが分かります。

もう一箇所確認してみます。
仮想環境でライブラリをinstallしてみたら本体の環境はどうなるのか。

4. 仮想環境内で下記コマンドを実行してnumpyというライブラリをインストール

$ pip install numpy

5. 仮想環境内でpip listを実行し、numpyがインストールされていることを確認。

$ pip list
DEPRECATION: The default format will switch to columns in the future.
You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
numpy (1.16.4)
pip (9.0.1)
pkg-resources (0.0.0)
setuptools (39.0.1)

numpyが仮想環境にインストールされていることが分かる。

6. 仮想環境を抜けて(deactivate)、pip3 listを実行

$ pip3 list
DEPRECATION: The default format will switch to columns in the future.
You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
apturl (0.5.2)
asn1crypto (0.24.0)
Brlapi (0.6.6)
certifi (2018.1.18)
chardet (3.0.4)
command-not-found (0.3)
cryptography (2.1.4)
cupshelpers (1.0)
defer (1.0.6)
distro-info (0.18ubuntu0.18.04.1)
httplib2 (0.9.2)
idna (2.6)
keyring (10.6.0)
keyrings.alt (3.0)
language-selector (0.1)
launchpadlib (1.10.6)
lazr.restfulclient (0.13.5)
lazr.uri (1.0.3)
louis (3.5.0)
macaroonbakery (1.1.3)
Mako (1.0.7)
MarkupSafe (1.0)
netifaces (0.10.4)
oauth (1.0.1)
olefile (0.45.1)
pexpect (4.2.1)
Pillow (5.1.0)
pip (9.0.1)
protobuf (3.0.0)
pycairo (1.16.2)
pycrypto (2.6.1)
pycups (1.9.73)
pygobject (3.26.1)
pymacaroons (0.13.0)
PyNaCl (1.1.2)
pyRFC3339 (1.0)
python-apt (1.6.4)
python-dateutil (2.6.1)
python-debian (0.1.32)
pytz (2018.3)
pyxdg (0.25)
PyYAML (3.12)
reportlab (3.4.0)
requests (2.18.4)
requests-unixsocket (0.1.5)
SecretStorage (2.3.1)
setuptools (39.0.1)
simplejson (3.13.2)
six (1.11.0)
system-service (0.3)
systemd-python (234)
ubuntu-drivers-common (0.0.0)
ufw (0.36)
unattended-upgrades (0.1)
urllib3 (1.22)
usb-creator (0.3.3)
wadllib (1.3.2)
wheel (0.30.0)
xkit (0.0.0)
zope.interface (4.3.2)

こっちにはnumpyが入ってないことが分かります。

まとめ

以上でvenvの説明は終了です。

一つのマシンで複数のPython実行環境を構築できるvenvを使い、本体の環境はクリーンな状態を保ちながら開発を行っていきましょう。

参考サイト