【MacOS】PyenvとvenvでPython環境を構築する
MacBookAir M1からM3に乗り換えました。
私はPythonを始めたと同時にM1 Macを買い、
Python本体やらパッケージやらを訳も分からず適当にインストールしていたので、M1 MacのPython環境はかなりゴチャゴチャしていました。
M3では、こうした反省を踏まえ、
pyenvを使ってPython本体のバージョン管理もやりながら、一から環境構築していくことにしました。
Pythonを独学ではじめた方は、
かなりの確率の高さで、ローカルのPython環境がゴチャゴチャになっているのではないでしょうか?
この記事では、自分と同じような境遇の方の方に向けて
pyenvとvenvを使ったPython環境の構築の方法について紹介していきます。
なお、pyenvのインストールではHomebrewを使います。
Homebrewのインストールが未了の方はこちらの記事を参照して、インストールしておいてください。
そもそもpyenvとは?
venvと名前が似ているのでややこしいですが、pyenv自体はPythonのバージョンを管理してくれるツールです。
主に以下のような特徴があります。
複数バージョンのPythonの管理:
pyenvを使うと、1台のコンピューター内で複数のPythonバージョンをインストールし、それらのバージョンを切り替えて使用することができます。
環境の隔離:
pyenvを使用すると、システム全体で影響を及ぼすことなく、Pythonのバージョンや環境を管理できます。これにより、システムのPythonに影響を与えることなく、プロジェクトごとに適切なPythonバージョンを選択できます。
シンプルなインストールと使用: pyenv自体のインストールは比較的簡単であり、Pythonのバージョンを切り替える際もシンプルなコマンドで行えます。
異なるバージョンのPythonを管理し、それらを効果的に切り替えて使用するための便利なツールとして利用されています。
pyenvでPythonのバージョン管理をできるようにする
ここから実装です。
Homebrewコマンドでpyenvをインストールする
ターミナルを開いて、brewコマンドを以下を実行します。
brew install pyenv
シェル環境のセットアップ
まずは、以下のコマンドで、ご自身のシェルの種類を確認してください。
echo $SHELL
Appleシリコン(Mシリーズ)のMacの場合、以下のように、/bin/zshというシェル環境になっていますので、それを前提に進めます。
(出力結果)
/bin/zsh
続きです。以下のコードを一行ずつ実行していきます。
いわゆるpathを通すコードです。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
最後に以下のコードで確定します。
exec "$SHELL"
pyenvからPythonをインストールする
ここからはpyenvコマンドを使います。
まずは、以下のコマンドを入力します。
pyenv install --list
すると、pyenvでインストールできるバージョンが出力されます。
最初の数字だけのものがPythonのバージョンです。
(出力結果)
Available versions:
2.1.3
2.2.3
2.3.7
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
(略)
3.12.8
3.13.0
3.13.0t
3.13-dev
3.13t-dev
3.13.1
3.13.1t
3.14.0a3
3.14.0a3t
3.14-dev
3.14t-dev
(略)
stackless-3.4-dev
stackless-3.4.2
stackless-3.4.7
stackless-3.5.4
stackless-3.7.5
ここでは、Pythonの3.12.8をインストールしたいと思います。
以下のコマンドを入力します。
pyenv install 3.12.8
もし、 以下のように、「No module named '_lzma'」のエラーが出た場合は、次のステップ(一旦、3.12.8をアンインストール)に移ってください。
エラーが出なければ、「pyenvコマンドでバージョンを確認する」まで進んでください。
(出力結果)
ModuleNotFoundError: No module named '_lzma'
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?
一旦、3.12.8をアンインストールする
pyenv uninstall 3.12.8
さきほどのエラーメッセージは「liblzma-devというパッケージがない」という内容ですが、Homebrew がインストールされている場合、liblzma-dev の代わりに xz パッケージをインストールします。
xzパッケージをインストールする
brewコマンドを使って、次を実行してください:
brew install xz
再び、pyenvコマンドを使って、Python3.12.8をインストールする
pyenv install 3.12.8
今度はエラーなくインストールが完了するはずです。
(出力結果)
python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
Downloading Python-3.12.8.tar.xz...
-> https://www.python.org/ftp/python/3.12.8/Python-3.12.8.tar.xz
Installing Python-3.12.8...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.12.8 to /Users/username/.pyenv/versions/3.12.8
pyenvコマンドでバージョンを確認する
以下のコマンドで、バージョンを確認します。
pyenv versions
以下のような出力がされていれば、とりあえず成功です。
(出力結果)
* system (set by /Users/username/.pyenv/version)
3.12.8
ただ、この時点では、
まだ、バージョン 3.12.8 を使用することはできません。
Python3.12.8を使用できるようには、globalコマンドまたはlocalコマンドで指定する必要があります。
globalコマンドによる指定
pyenv global 3.12.8
pyenv global コマンドは、システム全体でデフォルトの Python バージョンを設定するために使用します。
この設定は、ユーザーがログインするたびに有効になります。
例えば、pyenv global 3.12.8 を実行すると、システム全体で Python バージョン 3.12.8 をデフォルトとして使用するように設定されます。
localコマンドによる指定
pyenv local 3.12.8
pyenv local コマンドは、特定のディレクトリ(プロジェクトディレクトリなど)における Python バージョンを設定するために使用します。
プロジェクトごとに異なる Python バージョンを使用したい場合に便利です。
例えば、あるプロジェクトディレクトリで pyenv local 3.12.8 を実行すると、そのディレクトリ内でのみ Python バージョン 3.12.8 を使用するように設定されます。
system
* 3.12.8 (set by /Users/username/.pyenv/version)
元に戻す時は以下のコードです。(システムのデフォルトに戻す場合)
pyenv global system
venvでPython仮想環境を構築する
ここからは難しくありません。
仮想環境用のディレクトリをデスクトップに作成
デスクトップに、python_projectというディレクトリを作成します。
cd /Users/username/Desktop
mkdir python_project
pyenvのlocalコマンドでPythonバージョンを設定
cdコマンドで、仮想環境用のディレクトリに移動します。
cd python_project
localコマンドを使って、pyenvにインストールした3.12.8を設定します。
pyenv local 3.12.8
これによって、この仮想環境では、Python3.12.8が使えるようになります。
pyenv versionsのコマンドを実行すると、以下のように出力されます。
3.12.8に※がついていますね。
(出力結果)
system
* 3.12.8 (set by /Users/username/Desktop/python_project/.python-version)
ls -a コマンドでpython_projectディレクトリの中を見てみると、.python-versionという隠しファイルが作成されています。
(出力結果)
ls -a
. .. .python-version
venv環境の作成
以下のコードで.venvという名前の仮想環境を作ります。
python -m venv .venv
ls -a コマンドでpython_projectディレクトリの中を見てみると、
.venvが作成されています。
ls -a
. .. .python-version .venv
仮想環境の起動
以下のコードで仮想環境を使えるようになります。
source .venv/bin/activate
最後までお読みいただきありがとうございます!