見出し画像

Python仮想環境の作り方と仕組みを理解する

Python初学者にとって、
とっつきにくい概念の一つに
仮想環境があると思います。

この記事は、
仮想環境の作り方と仕組みについて
分かりやすく解説していきます。


なぜ、仮想環境を作るのか?


一言でいうと、
プロジェクトごとに
バージョンの異なるPythonパッケージを使用したいから

ということになります。
初心者の場合、この話が、実感できないと思います。
これは、いくつもプロジェクトを
作っていくと分かります。
なので、あまり気にしなくて良いです。


ちなみに、仮想環境を作らない場合、
インストールしたPythonパッケージは、
特定の1つのディレクトリに保存されます。
このため、
プロジェクトごとに異なるバージョンのパッケージを
使うことができません。


仮想環境を作ると、

仮想環境ごと(=プロジェクトごと)に
インストールしたPythonパッケージを
専用のディレクトリに保存することができます。
このため、
プロジェクトごとに異なるバージョンのパッケージを
使うことができるのです。

仮想環境の作り方


venvを使って仮想環境を作っていきます。
venvはPythonの仮想環境のためのツールです

ターミナルで、以下を入力します。
これだけで仮想環境の出来上がりとなります

 $ python -m venv .venv 

コードの中身を見てみましょう。

①Pythonインタプリターを起動します
②Pythonのモジュールをコマンドラインで実行可能にするおまじないです
③Venvを実行するコマンドです
新しく作成される仮想環境のディレクトリです

③と④が紛らわしいですが、
③はコマンド、④はディレクトリになります。

python-venvというディレクトリの中に
新たな仮想環境 .venvディレクトリが作成されました


仮想環境を有効化する


仮想環境は作っただけでは意味がありません。
有効化してあげる必要があります。

ターミナルで以下のコードを入力します。

$ source .venv/bin/avtivate

①のsourceは、
ファイルに書かれているコードを実行するコマンドです。
②venv/bin/のディレクトリにある
activateというファイルのコードを実行せよ
と言っていることになります。

ファイル階層を見てみると、
パスの通り、avtivateファイルがありますね。
この中に仮想環境を有効化するスクリプトが書かれています。

有効化されると、先頭に(.venv)とつきます

(.venv) ####################### python-venv %


仮想環境を無効化する


ターミナルに以下を入力するだけです

$ deactivate

ターミナルから(.venv)が消えて
元のパスに戻っているはずです。


仮想環境の仕組みを理解する


仮想環境とは
結局、何なんでしょうか?
何か特別の環境が作られているのでしょうか?

結論から言うと、
環境変数であるPATHを書き換えて
実行されるPythonプログラムのディレクトリを
変更しているだけ


 仮想環境の実行コマンドを見ていきましょう

% source venv/bin/activate                                 

上記のコードは、
activateというファイルのコードを実行せよ
でしたね。

activateファイルのコードを見てみましょう
大事なところだけ抜き出してみました。
ファイルの中断あたりに、以下のコードがあります。

(略)

VIRTUAL_ENV="/Users/an./Desktop/streamlit_APP/venv"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

VIRTUAL_ENVという変数に
venvディレクトリのパスが渡され、
VIRTUAL_ENVが環境変数に設定されています。

PATHという変数に、
VIRTUAL_ENVに/binディレクトリを加えたパスが渡され、
このパスがコマンド検索先の最優先に設定されます。
そして、環境変数として設定されます。

環境変数PATH
あるコマンド名を入力した時に
検索されるディレクトリ群です。

仮に同じ名前のコマンドが複数のディレクトリに存在する場合は、
環境変数PATHの先頭の方にあるディレクトリが優先されます。

それでは環境変数PATHを見てみましょう。

仮想環境に入る前の$PATHは次のとおりです。

% echo  $PATH | tr ":" "\n"
/opt/homebrew/bin
/opt/homebrew/bin
/opt/homebrew/sbin
/Library/Frameworks/Python.framework/Versions/3.9/bin
/opt/homebrew/bin
/usr/local/bin
/System/Cryptexes/App/usr/bin
/usr/bin
/bin
/usr/sbin
/sbin
/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin
/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin
/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin

仮想環境に入った後の$PATHは次のとおりです。

(venv) % echo  $PATH | tr ":" "\n"
/Users/an./Desktop/streamlit_APP/venv/bin
/opt/homebrew/bin
/opt/homebrew/bin
/opt/homebrew/sbin
/Library/Frameworks/Python.framework/Versions/3.9/bin
/opt/homebrew/bin
/usr/local/bin
/System/Cryptexes/App/usr/bin
/usr/bin
/bin
/usr/sbin
/sbin
/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin
/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin
/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin

$PATHの先頭に
/Users/an./Desktop/streamlit_APP/venv/bin
が来ていますね。

これにより、
pythonコマンドを実行した場合、
/Users/an./Desktop/streamlit_APP/venv/binにある
pythonファイルが最優先に実行されることになるのです。


よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!