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
環境変数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ファイルが最優先に実行されることになるのです。
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!