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
が実行されます。
仮想環境と言うのはディレクトリのことです。
ディレクトリを作成し、その中にpython
やpip
などの実行ファイルを作成します。
そして仮想環境を有効化することで、そのディレクトリの中に入っている実行ファイルをあたかもグローバルな環境の実行ファイルのように使うことができる。というのが仮想環境の特徴です。
つまりグローバルな環境の中に仮想的な環境(ディレクトリ)を作って、その仮想環境下の実行ファイルを使えるようにするというのが仮想環境の主な目的です。
このようにすることで、仮想環境ごとに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
という仮想環境の有効化に使われるスクリプトやpython
やpip
などの実行ファイルが保管されています。
仮想環境の有効化
仮想環境を有効化します。
Linuxの場合は↓のコマンドで仮想環境を有効化できます。
$ source myenv/bin/activate
(myenv) $
仮想環境を有効化すると端末に仮想環境名が表示されます((myenv) $
)。
Windowsの場合は↓のコマンドをコマンドプロンプトから実行します。
@code lang="text" {
myenv\Scripts\activate
(myenv) >
}
↑のコマンドを見てもわかるようにLinuxとWindowsでは仮想環境のディレクトリ構成が異なっているので注意が必要です。
仮想環境を有効化した状態ではpython
やpip
などのコマンドはさきほどのbin
以下の実行ファイルが使われます。
Linuxでは仮想環境下の実行ファイルの所在はwhich
コマンドで確認することができます。
@code lang="text" {
$ which python
/path/to/myenv/bin/python
}
pip
でインストールするパッケージも仮想環境のディレクトリに保存されます。
仮想環境の無効化
仮想環境を無効化するにはLinux, Windowsともに↓のコマンドを実行します。
@code lang="text" {
$ deactivate
}
↑のコマンドを実行すると仮想環境のマーク((myenv)
というマーク)が取れて、仮想環境から脱します。
仮想環境から抜けるとpython
やpip
はグローバル環境のものが参照されるようになります。
@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" {あくまで仮想なのね}