pyenvとvenvを使用した仮想環境構築
MacOS Sonoma 14.4.1
zsh
Pythonの実行環境を整えるのはなかなか複雑で、私はなんとなく使っていましたが、今一度整理してみようと思い現状分かる範囲でPythonの環境構築についてまとめました。
なおpyenv自体のインストールについては触れていません。
pyenvとvenvついでにpipの概要
基本的にはこれら3つを使用すれば、Pythonの環境を作ることはできます。
まずは、それぞれのツールの概要を掴んでおきましょう。
pyenv
Pythonのバージョンを簡単に管理、変更することができます。
PythonのインストールはPythonのサイトから行うよりも、pyenvでインストールしたほうが管理しやすいかと思います。
venv
仮想的な環境を作るためのもの。
venvによって作成された特定のディレクトリにパッケージをインストールすることで、他の環境に影響を与えない仮想的な環境を作ることができます。
仮想環境作成時にはpyenvにPythonバージョンの管理を行ってもらうので、venvはパッケージのバージョン管理を行うものとも言えます
通常は /bin、/usr/bin、/usr/local/bin
などのシステムディレクトリからPythonなどが実行されるところを、仮想環境の中の /bin
ディレクトリへとパスを変更することで仮想的な環境を作っています。
pip
Pythonのパッケージマネージャー。
MacやLinuxにhomebrewやaptなどのパッケージ管理ツールがありますが、pipはPython専用のパッケージマネージャーです。
Python新規プロジェクトの作成手順
それぞれのコマンド等を見ていく前に、まず私が新しくPythonプロジェクトを作成するさいの流れを紹介します。
今回はホームディレクトリ下のDocuments(書類)ディレクトリにprojectnameというプロジェクトを開始していきます。
ディレクトリをローカルで作成したりGitHubからクローンしてから、そのディレクトリに移動します。
cd ~/Documents/projectname
pyenv local 3.11.9
このコマンドを実行すると、projectnameの中に .python-version
というファイルが生成されます。これにより、このプロジェクトで使用するPythonバージョンが設定されます。
※任意のPythonバージョンのインストールに関してはこちらで紹介しています。
python3 -m venv .venv
2つめの.venvは任意の名称にして問題ありませんが、特にこだわりがなければ.venvで良いです。
source .venv/bin/activate
.venvは作成時に付けた名称です。
仮想環境に入るとターミナルのプロンプトの一番前に、(.venv)と表示されます。
※2回目以降に仮想環境に入るときは、プロジェクトのディレクトリに移動してから上のコマンドを実行します。
pip install flask
自分の必要なパッケージをインストールします。
deactivate
仮想環境から抜けます。
以上が基本的な流れになっています。
ここからはそれぞれのツールでよく使うコマンドなどについて見ていきます。
pyenvコマンド
<!-- インストール可能なバージョンのリストを表示 -->
pyenv install --list
<!-- Pythonのイントール(インストールしたいバージョンを指定) -->
pyenv install 3.12.2
<!-- Pythonのアンイントール(アンインストールしたいバージョンを指定) -->
pyenv uninstall 3.12.2
インストール周りのコマンドです。アンインストールのさいはそのバージョンがアクティブでない必要があります。さらに消してもいいですか?と確認されるのでyで確定します。
<!-- 使用するPythonバージョンの変更 -->
pyenv local 3.11.9
pyenv global 3.11.9
localは実行したディレクトリに .python-version
ファイルを生成することで、そのディレクトリに入ると自動的に設定したバージョンに切り替わり、出ると元のバージョンに戻る状態にしてくれます。
globalは仮想環境などのバージョンが設定されていないところでのPythonのバージョンを変更できます。こちらは変更しない限り変わることはありません。
<!-- インストールされているバージョンの確認 -->
pyenv versions
<!-- 現在設定されているバージョンの確認-->
python -V
pyenv version
pyenv local
pyenv global
versionsを実行するとインストール済みのものが一覧表示された上で、現在のディレクトリで設定されているバージョンの横に*が付与されています。
バージョン確認の方法は様々あり、それぞれで微妙に役割が異なっています。
python -Vは現在のディレクトリで設定されているバージョンを表示します。
versionもpython -Vとほぼ同じ感覚で使えますが、仮想環境の作り方によっては結果が変わってきます。
localは現在のディレクトリに .python-version
ファイルが有れば、そこで設定されているバージョンを表示します。
無ければ、ローカルバージョンが設定されていないと教えてくれます。
globalは現在のディレクトリに関係なく仮想環境の中にいようが、globalで設定されたバージョンを表示します。
venvコマンド
<!-- 仮想環境作成 -->
python3 -m venv .venv
<!-- 仮想環境に入る -->
source .venv/bin/activate
<!-- 仮想環境から出る -->
deactivate
流れのところで説明しましたが、仮想環境作成の前にpyenv localでバージョンを変更しました。
実際はこれを行わずに仮想環境を作成しても、環境が作成されたタイミングで設定されていたglobalバージョンが仮想環境自体に内包されるので、一応venvのみでもPythonバージョンを管理することはできます。
しかしそれには問題があり、プロジェクトディレクトリを移動させた場合等、自分の意図しないバージョンが使用される可能性があります。
ですが、pyenv localを使用しプロジェクトディレクトリに .python-version
ファイルが存在していれば、ディレクトリが移動しても常に同じバージョンのPythonが使用されます。
ですので仮想環境作成時にはpyenv localを使用してそのプロジェクトにしっかりバージョンを設定しておくことが大切になります。
pipコマンド
<!-- 最新バージョンのインストール -->
pip install flask
<!-- バージョンを指定してインストール -->
pip install flask==0.9.0
<!-- バージョン範囲を指定してインストール(例の場合1.0.1以上2.0.0未満) -->
pip install 'flask>=1.0.1,<2.0.0'
<!-- 最新バージョンへ更新 -->
pip install --upgrade flask
<!-- パッケージの削除 -->
pip uninstall flask
<!-- パッケージの一覧を表示 -->
pip list
一つずつではなく、複数まとめてインストールしたい場合は requirements.txt
を使用します。
このファイルを予めプロジェクトディレクトリに用意しておき、以下のコマンドを実行します。
<!-- まとめてインストール -->
pip install -r requirements.txt
<!-- requirements.txtの記入例 -->
blinker==1.8.2
click==8.1.7
Flask==3.0.3
itsdangerous==2.2.0
Jinja2==3.1.4
MarkupSafe==2.1.5
Werkzeug==3.0.3
おわりに
まだまだなんとか使えているというくらいで、しっかり理解できていないところも多いので、もっと使いこなせるように積極的に使っていきたいものです。