ユーニックス総合研究所

  • home
  • archives
  • python-venv

Pythonの仮想環境(venv)の使い方

  • 作成日: 2021-06-23
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonの仮想環境(venv)の使い方

Pythonでは仮想環境を使うことができます。
仮想環境はvenvというモジュールをスクリプトとして実行することで作成可能です。

結論から言うと仮想環境は↓のようにして使います。

$ # venvモジュールをスクリプトとして実行してmyenvという仮想環境を作成  
$ python -m venv myenv  

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

$ # パッケージをインストール  
$ pip install BeautifulSoup4  

$ # requirements.txtの作成  
$ pip freeze > requirements.txt  

$ # 仮想環境を無効化  
$ deactivate  

この記事ではPythonの仮想環境(venv)について具体的に↓を見ていきます。

  • 仮想環境とは?
  • venvで仮想環境を作成
  • 仮想環境の有効化
  • 仮想環境の無効化
  • pip installでパッケージをインストール
  • requirements.txtの作成

仮想環境とは?

仮想環境」とはどういうものでしょうか?
仮想な環境と言うことですか、これはどういった環境のことを言うのでしょうか。

仮想でない環境のPythonは実行ファイルがシステムのディレクトリの配置されています。
Linux系であれば/usr/local/bin以下にpythonという実行ファイルが配置されてたりします。
こういったグローバルな環境でPythonを実行すると、そういったグローバルなpythonが実行されます。

仮想環境と言うのはディレクトリのことです。
ディレクトリを作成し、その中にpythonpipなどの実行ファイルを作成します。
そして仮想環境を有効化することで、そのディレクトリの中に入っている実行ファイルをあたかもグローバルな環境の実行ファイルのように使うことができる。というのが仮想環境の特徴です。

つまりグローバルな環境の中に仮想的な環境(ディレクトリ)を作って、その仮想環境下の実行ファイルを使えるようにするというのが仮想環境の主な目的です。
このようにすることで、仮想環境ごとにpipを使うことができます。
pipはPythonのパッケージマネージャーで、pipを使うことで外部ライブラリを環境にインストールすることができます。

仮想環境下のpipでインストールした外部ライブラリ(パッケージ)は仮想環境ごとに保存されます。
そのためグローバルな環境を弄る必要なくパッケージを管理することが可能になります。

Pythonを使ったプロジェクトでは、プロジェクトごとに必要なパッケージが異なるのが普通です。
それらのパッケージをすべてグローバルな環境にインストールすると、グローバルな環境が色々なプロジェクトのパッケージでカオスになってしまいます。
それを予防するためにプロジェクトごとに仮想環境を作って、そのプロジェクトに合致したパッケージのみをインストールして使うということを行います。
こうすればプロジェクトごとに仮想環境が作成され、パッケージもその仮想環境ごとに管理されます。非常にすっきりしていて開発しやすいということですね。

venvで仮想環境を作成

Pythonでは仮想環境を使う場合、venvというモジュールを使います。
インタプリタのショートオプション-mにモジュールを指定することでそのモジュールをスクリプトとして実行することができます。

venvを指定して実行すると↓のような結果になります。

$ python -m venv  
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade]  
            [--without-pip] [--prompt PROMPT] [--upgrade-deps]  
            ENV_DIR [ENV_DIR ...]  
venv: error: the following arguments are required: ENV_DIR  

venvには第1引数に作成したい仮想環境名を指定します。
ここではmyenvという仮想環境名を指定します。

$ # myenvという仮想環境の作成  
$ python -m venv myenv  

↑のコマンドを実行すると、現在のディレクトリ以下にmyenvというディレクトリが作成されます。

$ ls | grep myenv  
myenv  

これで仮想環境を作成できました。
仮想環境の中身を見てみます。

$ ls myenv  
bin  include  lib  lib64  pyvenv.cfg  

Linux系では↑のようなディレクトリ構成になっています。
↑のうちbinというのが実行ファイルを保管しているディレクトリです。

$ ls myenv/bin/  
activate      activate.fish  easy_install      pip   pip3.9  python3  
activate.csh  Activate.ps1   easy_install-3.9  pip3  python  python3.9  

activateという仮想環境の有効化に使われるスクリプトやpythonpipなどの実行ファイルが保管されています。

仮想環境の有効化

仮想環境を有効化します。
Linuxの場合は↓のコマンドで仮想環境を有効化できます。

$ source myenv/bin/activate  
(myenv) $  

仮想環境を有効化すると端末に仮想環境名が表示されます((myenv) $)。

Windowsの場合は↓のコマンドをコマンドプロンプトから実行します。

@code lang="text" {

myenv\Scripts\activate
(myenv) >
}

↑のコマンドを見てもわかるようにLinuxとWindowsでは仮想環境のディレクトリ構成が異なっているので注意が必要です。

仮想環境を有効化した状態ではpythonpipなどのコマンドはさきほどのbin以下の実行ファイルが使われます。
Linuxでは仮想環境下の実行ファイルの所在はwhichコマンドで確認することができます。

@code lang="text" {
$ which python
/path/to/myenv/bin/python
}

pipでインストールするパッケージも仮想環境のディレクトリに保存されます。

仮想環境の無効化

仮想環境を無効化するにはLinux, Windowsともに↓のコマンドを実行します。

@code lang="text" {
$ deactivate
}

↑のコマンドを実行すると仮想環境のマーク((myenv)というマーク)が取れて、仮想環境から脱します。
仮想環境から抜けるとpythonpipはグローバル環境のものが参照されるようになります。

@code lang="text" {
$ which python
/usr/local/bin/python
}

pip installでパッケージをインストール

仮想環境を有効にした状態で試しになにかパッケージをインストールしてみます。
ここでは試しにBeautifulSoup4をインストールします。

@code lang="text" {
(myenv) $ pip install BeautifulSoup4
}

Linuxではインストールしたパッケージは↓のディレクトリ以下に配置されます。
(Pythonのバージョンなどは環境によって異なります。)

@code lang="text" {
$ ls myenv/lib/python3.9/site-packages/ | grep bs4
bs4
}

↑のbs4というのがBeautifulSoup4の本体です。

仮想環境下にインストールしたパッケージは仮想環境を有効にしている状態であれば使うことができます。
あるいはPythonの実行ファイルを直接フルパスで参照などすれば使えます。
↓は仮想環境から抜けた状態で仮想環境下のpythonを実行し、BeautifulSoup4をインポートしている所です。

@code lang="text" {
$ ./myenv/bin/python -c "from bs4 import BeautifulSoup"
}

仮想環境下のpythonを直接参照するケースは、たとえば仮想環境で開発したプロジェクトをサーバーにデプロイしたいときなどです。
Webサーバーに仮想環境のpythonを参照させるようにすればWebサーバーからパッケージなどを利用できます。
これはDjangoなどのフレームワークのデプロイでお馴染みの方法です。

requirements.txtの作成

requirements.txtとはなんでしょうか。
仮想環境下にインストールされたパッケージを、別の仮想環境にインストールしたい場合に、このrequirements.txtが使われます。
requirements.txtはパッケージとそのバージョンが書かれたリストで、ただのテキストファイルです。

これを作成するにはpipの↓のコマンドを実行します。

@code lang="text" {
$ pip freeze > requirements.txt
}

↑のコマンドを実行するとpip freezeの出力がrequirements.txtに保存されます。
requirements.txtの中身を見ると↓のようになっています。

@code lang="text" {
$ cat requirements.txt
beautifulsoup4==4.9.3
soupsieve==2.2.1
}

このrequirements.txtを使って別の仮想環境にパッケージをインストールする場合、↓のコマンドを実行します。

@code lang="text" {
$ pip install -r requirements.txt
}

↑のコマンドを別の仮想環境下で実行すると、requirements.txtにリストされたパッケージが環境にインストールされます。

おわりに

今回はPythonの仮想環境について見てみました。
仮想環境はプロジェクトの開発では非常によく使われます。

@say {仮想環境暮らしです}
@say actor="mouse" {あくまで仮想なのね}