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

2019年7月7日

当サイトはアフィリエイト広告を利用しています。

この記事ではvenvを使ってPythonの仮装環境を作る方法および作成した仮想環境を利用する方法を解説しています。

最初に仮想環境についての解説もしていますが、すでにご存知の方は「仮想環境作成手順」からお読みください。

仮想環境とは

1つのコンピュータの中には普通一つの環境しかありません。そのため何かしらアプリケーションをインストールして有効化したら、そのコンピュータ内のすべての箇所においてそのアプリケーションは有効化された状態になります。

しかし仮想的に環境を作り上げれば、1つのマシンの中に複数の環境を作り上げることが出来ます。環境Aで有効化したアプリケーションは、環境Bでは無効化した状態にしておくことが可能ですし、そもそもインストールさせないことも可能です。

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

仮想環境の例え話

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

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

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

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

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

例え話は以上です。

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

開発時においてもテスト時においてもとても便利な技術なので是非とも覚えておきましょう。

venvとは

venvはPython用の仮想環境作成をサポートしてくれるモジュールです。

venvを使うことによって、あるPython用ライブラリ(例えばNumpyとか)が入った環境と入っていない環境バージョンが異なるPythonがインストールされた環境など、複数のPython実行環境を一つのマシンの中に構築することが出来ます。

仮想環境作成機能を持ったモジュールはvenv以外だとpyenvがありますが、こちらはPythonのバージョン3.6から非推奨になっているので今から仮想環境を使うのならvenvを使う方が良いです。参考サイト:venv — 仮想環境の作成

仮想環境作成手順

それではvenvを使ってPythonの仮想環境を作成するまでの手順を説明します。複雑なコマンドの場合、コマンドの下に補足説明をしているので参考にしてください。

1. python3-venvをOSにインストール

$ sudo apt install python3-venv

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

$ python3 -m venv new_environment_name
  • “-m"はそのあとに記載されたモジュール(今回で言うとvenv)を実行するというオプションです。
  • new_environment_nameのところに作成する仮想環境につけたい名前を入力してください。
  • ちなみに仮想環境は一つのマシン内に何個でも作れます。

3. 仮想環境の有効化

$ source new_environment_name/bin/activate

4. 仮想環境の無効化

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

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

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

仮想環境の確認

1. Pythonで利用するライブラリをインストールするためにはpipというパッケージが必要です。以下のコマンドを実行してインストールします。(venvはpipを使ってインストールしたPython用ライブラリを仮想環境ごとに分けて管理します。)

$ sudo apt install python3-pip

2. 仮想環境に入らない(無効化した)状態で下記の「pip3 list」コマンドを実行します。実行すると今いる環境で利用できるPython用ライブラリが表示されます。

$ 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. 今度は先ほど作成した仮想環境を有効化してから利用できるライブラリを確認してみます。
 (venvで作った仮想環境ならpipだけでpip3を意味するので"pip list"でOKです。)

# 仮想環境有効化
$ source new_environment_name/bin/activate

# 仮想環境内に存在するPython用パッケージのリストを表示
$ 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)

仮想環境外で実行した時よりかなり少ないです。インストールされているPython用ライブラリの数に違いがあることが分かります。

最後に仮想環境でPython用ライブラリをインストールしたら本体の環境はどうなるのか確認してみましょう。

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

$ 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. 今度は仮想環境を無効化してから、pip3 listを実行します。

$ deactivate
$ 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を使い、本体の環境はクリーンな状態を保ちながら開発を行っていきましょう。

参考サイト

直近でおすすめの本

直近十数冊読んだ中で一番おすすめの本です。

人が行動をするに至るまでのステップを科学的に分析した上で、その結果を習慣と紐付けて解説してくれている本です。

悪い習慣を断ち、良い習慣を継続する方法を詳細に説明してくれています。習慣が人を作っているので、この本の内容を実践できれば人生を大きく好転させられる気がしました。

この本の最初の方に説明があるのですが、複利という考え方があり毎日1パーセントだけの増加でもそれが続くととてつもない倍率になります。これは投資でよく用いられる概念ですが、良い習慣は未来への投資なので習慣にもあてはまります。良い習慣を身に付けるのは早ければ早いほど良いです。

私はまず長時間YouTubeを見てしまう習慣を断って、直近の業務に役立つITの勉強を習慣として身に付けよう思います。

Pythonvenv

Posted by ラプラス