pyenvの仕組みと使ったほうが良い理由
pyenvを使わなくても、Pythonの公式サイトからダウンロードしてインストールすることもできます。確かにpyenvなどというものを使わない分、公式サイトからのダウンロードの方がわかりやすい。
ただ、実際のプロジェクトや僕が個人開発する際にもpyenvは必ず使っています。
その理由を簡単にご説明します。
複数バージョンのPythonを簡単に切り替えられる
Pythonではプロジェクトごとに違うバージョンを使いたい場合も多いです。
- プロジェクトA(Django 2系):Python 3.8 が必要
- プロジェクトB(最新ライブラリ使用):Python 3.11 を使いたい
仮にシステムに直接Pythonをインストールしてしまうと、どのPythonバージョンを使うかを指定するのが大変になってしまいます。
両者を簡単に比較すると、次のような感じです。
項目 | OS直インストール | pyenv経由 |
---|---|---|
複数バージョンの共存 | 難しい | 簡単 |
バージョンの切り替え | シンボリックリンクなどが必要 | pyenv global / pyenv local でOK |
プロジェクト単位での制御 | 面倒 | .python-version で自動切替できる |
OS依存 | 高い | 低い |
システムを壊すリスク | ある | ほぼない |
つまり、pyenv
を使えばプロジェクトごとに異なるPythonバージョンを簡単に使い分けられます。
# プロジェクトAディレクトリ内で、以下を実行
pyenv local 3.8.18
# プロジェクトBディレクトリ内で、以下を実行
pyenv local 3.11.4
上記のように、フォルダ単位でバージョンを切り替えることができるのが最大のメリットです。
pyenvの内部的な挙動について
pyenv
の仕組みは、以下の通りです。
~/.pyenv/versions/3.11.4/bin/python
などに各バージョンをインストール.python-version
という設定ファイルで現在使用するバージョンを記録python
コマンドをpyenv
が仲介し、正しいバージョンに切り替える
このPythonバージョン切り替えの仲介には、shims
というスクリプトが使われています。
shims
が使われているかは、which python
コマンドを実行するとわかります。
which python
# => ~/.pyenv/shims/python
この「shims(仲介スクリプト)」が、pyenv
の心臓部です。
pyenvの導入方法
pyenvのインストール
pyenv本体と、必要なパッケージをインストールします。
brew install openssl readline sqlite3 xz zlib pyenv
pyenvを有効化するため、パスを通しましょう。
# ~/.zprofile に追記(ログイン時のパス設定)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
# ~/.zshrc に追記(対話シェルの初期化)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
# シェル再読み込み
exec $SHELL -l
インストール可能なPythonバージョンリストを取得
以下のコマンドで、pyenvを使ってインストール可能なPythonのバージョン一覧が取得できます。
pyenv install --list
Pythonのインストール
Python3.12
をインストールする場合は、次のコマンドを実行します。
pyenv install 3.12
install
コマンドでは、実際にPythonが有効化されていません。
そのため、次に紹介する有効化コマンドを実行する必要があります。
Pythonの有効化
インストールしたPythonを有効化しましょう。
システム全体に適用
今使っているマシン全体に、特定のPythonのバージョンを有効化するには次のコマンドを実行します。
pyenv global 3.12
特定フォルダに適用
ある特定のフォルダにPythonバージョンを適用したい場合には、次のコマンドです。
pyenv local 3.12
その他の便利なコマンド
globalで設定されているPythonのバージョンを確認
pyenv global
localで設定されているPythonバージョンを確認
pyenv local
現在インストール済みのPythonバージョンを表示
pyenv versions
# system
# * 3.12.11 (set by /Users/yanro/.pyenv/version)
上記のように、*
がついているのが現在有効になっているPythonのバージョンです。
Pythonのアンインストール方法
pyenv uninstall 3.12.0
最初にpyenv versions
でインストール済みのバージョンを確認してから、上記のuninstall
コマンドで削除しましょう。
コメント