🦧

【Python】仮想環境 venvってのを触ってみた

2020/10/19に公開

はじめに

Pythonを勉強していて「virtualenv」や「venv」という仮想環境があるということを知り、
調べて実際に動かしてみたのでそのメモ。

仮想環境って?

仮想環境ってイメージだと自分はコンピュータの中にコンピュータを作るイメージだった。
今まで使ってきた以下の技術の類似品かなと。

  • VirtualBox
  • Docker
  • VMWare Workstation

OSやメモリ、CPUなどある程度決めて実際に操作できたりするものが仮想環境って呼ばれると思っていたがPythonの「virtualenv」や「venv」は違うようだ。
上記の技術と似たようなものと考えることは一旦捨てよう。

「virtualenv」と「venv」の使用用途

「virtualenv」とは元々、システム中で別々のPythonを動かすための環境を仮想で作るツール。Pythonを調べたことある人、使ったことある人は知っていると思うがバージョンが大きく2系と3系に分かれており、さらに複数のバージョンに枝分かれしている。インストールしたライブラリやパッケージも2系と3系で使える使えないなどの問題も多数ある。

「virtualenv」を使用すれば様々なパターンのバージョン環境を用意でき、開発を行う際に最適な状態で進めることができる。
また、様々なバージョンのPythonモジュールや様々なバージョンのライブラリなども仮想環境別に管理できるため、ローカルのPC環境を汚すことなく開発を進めることができる。

Dockerなどで開発環境を整えてもよいが、Pythonのバージョンやライブラリの選定する際は
この「virtualenv」と「venv」を使用したほうが軽量である。

「virtualenv」と「venv」の歴史

「virtualenv」はPythonの仮想環境を作成するツールであるが、Pythonの公式で配布しているツールではない。サードパーティとしてPythonとは別にインストールする必要がある。
しかしPython3.3以降ではPythonをインストールした際に「venv」というツールが同梱されている。使い方はほぼ同じだが、それぞれに長所と短所がある。
↓参考サイト
Pythonの環境管理ツール良し悪し

実際に「venv」を触ってみたので以下は「venv」の使い方

仮想環境を作る

※Python3.3以降がインストールされている前提
自分の環境がWindowsなのでWindows向けに記載するが、Mac or Linuxでも同様なはず。

仮想環境用のディレクトリ(フォルダ)を作る

①Pythonで何らかを開発する際はプロジェクトごとにディレクトリを分けると思うが仮想環境もそのプロジェクトのディレクトリ内に作成する

②フォルダ直下でShift + 右クリックでコンテキストメニューを開いてPowerShellをクリック

③仮想環境を作成するコマンドを実行

python -m venv [仮想環境ディレクトリ名]

※ここでは「venvTest」とする

④実行結果を確認

実行されると「venvTest」のディレクトリが作成される

ディレクトリ構成は以下

venvTest
├─Include 
├─Lib : 仮想環境内で管理するライブラリが格納されている
│  └─site-packages : 仮想環境を起動中にinstallコマンドで取得したライブラリが格納される
├─Scripts : 仮想環境で使用するPythonのインタプリタが格納
└─pyvenv.cfg : 仮想環境のPythonのバージョン情報等が記載された設定ファイル

仮想環境を起動/停止する

①起動してみる
project_A←カレントディレクトリ
└venvTest
 ├Include
 ├Lib
 └Scripts

使用するターミナルによって起動方法が違うようだ。

  • PowerShellの場合
venvTest\Scripts\activate


このように仮想環境を起動中だと先頭に([仮想環境ディレクトリ名])が表示される

  • Git Bashの場合
. venvTest/Scripts/activate

②停止してみる

コマンドは共通で

deactivate

仮想環境でライブラリをインストールしてみる

試しに仮想環境を起動した状態で以下のコマンドを実行する

pip install requests 

実行前のLib→site-packagesディレクトリ

初期状態のライブラリしかインストールされていない

実行後のLib→site-packagesディレクトリ

requestsのライブラリと付随するライブラリが増えている。

※仮想環境を起動していない状態でライブラリをインストールした場合は ローカルのライブラリ格納用ディレクトリにインストールされてしまうので注意

仮想環境のライブラリを共有

複数人で開発を行う場合や、他のディレクトリに仮想環境を作り直す場合にライブラリの管理が大変になるが、以下の手順で共有も管理も行える。

①仮想環境を起動する。

②テキストにライブラリ一覧を出力

pip freeze > requirements.txt

※pip freezeはパッケージ管理のためのライブラリ一覧を表示するコマンド。
「pip list」もあるが、これはすべてのライブラリを表示させる。一つのライブラリをインストールすれば関連するライブラリがインストールされることも あるため、パッケージ管理としてのライブラリさえわかれば良い。
requirements.txtはライブラリの一式を管理するテキスト。

③作成されたrequirements.txtを配布 or コピー

④requirements.txtを特定のディレクトリに格納し、以下のコマンドを実行

pip install -r requirements.txt

これで仮想環境と同じライブラリを共有できる。

その他

Pythonのコーディングを行う際に専用のIDEとして「Pycharm」を使用する人が多いが、
Pycharmで新規プロジェクトを作成すると自動でVirtualenvを使用できる。

この状態で作成をクリックすると仮想環境のディレクトリが作成され、
Pycharmのターミナルを表示すると仮想環境が起動した状態となっている。

Pycharmを再度開きなおした場合も仮想環境が起動した状態となるため便利である。

Discussion