- 複数の Python バージョンを簡単に切り替えられる
- シンプルで、目立たず、確実に動作する単一目的の UNIX 伝統ツールの思想に従っている
- このプロジェクトは rbenv と ruby-build から分岐し、Python 向けに修正されたもの
pyenv が行うこと
- ユーザーベースで グローバル Python バージョンを変更 できる。
- プロジェクトごとの Python バージョン をサポート。
- 環境変数を使って Python バージョンを オーバーライド できる。
- 一度に 複数バージョンの Python コマンド を検索できる。tox を使って Python バージョン間でテストする際に便利。
pyenv がしないこと...
- Python 自体に 依存しない。pyenv は純粋なシェルスクリプトで作られている。
- シェルにロードされる 必要がない。代わりに、
PATH にディレクトリを追加する shim アプローチを使う。
- virtualenv を管理しない。もちろん、ユーザーが自分で virtualenv を作成したり、pyenv-virtualenv を使って自動化したりできる。
動作の仕組み
- pyenv は
PATH に挿入された shim 実行ファイルを使って Python コマンドを横取りし、アプリケーションが指定した Python バージョンを決定したうえで、その Python インストールへコマンドを渡す。
PATH を理解する
python や pip のようなコマンドを実行すると、オペレーティングシステムは PATH 環境変数内のディレクトリ一覧から、その名前の実行ファイルを探す。
Shims を理解する
- pyenv は
PATH の先頭に shims ディレクトリを挿入する。rehashing の過程を通じて、インストール済みのすべての Python バージョンに含まれるすべての Python コマンドに対する shims を維持する。
Python バージョン選択を理解する
- shim を実行すると、pyenv は次のソースから順番に Python バージョンを読み取って使う:
PYENV_VERSION 環境変数(指定されている場合)。
- 現在のディレクトリにあるアプリケーション固有の
.python-version ファイル(ある場合)。
- ファイルシステムのルートに到達するまで各親ディレクトリを検索して見つかった最初の
.python-version ファイル(ある場合)。
- グローバルな
$(pyenv root)/version ファイル。
Pyenv が提供する Python インストール場所を見つける
- pyenv が決定した Python バージョンに従って、コマンドをその Python インストールへ渡す。
- 各 Python バージョンは
$(pyenv root)/versions 配下の専用ディレクトリにインストールされる。
使い方
追加の Python バージョンをインストール
pyenv install を使って追加の Python バージョンをインストールする。
最新バージョンへの自動解決
uninstall を除くすべての Pyenv サブコマンドは、完全なプレフィックスを最新バージョンへ自動的に解決する。
拡張サポート付きの Python バージョン
- 特定の環境でサポートを追加するために、ユーザー提供のパッチを適用した Python リリースがある。
Python バージョンの切り替え
- Pyenv がインストールした Python を使うには、次のコマンドのいずれかを実行する:
pyenv shell
pyenv local
pyenv global
Python バージョンの削除
- 時間の経過とともに、
$(pyenv root)/versions ディレクトリには Python バージョンが蓄積される。
- 古い Python バージョンを削除するには
pyenv uninstall を使う。
その他の作業
- 利用可能なすべてのサブコマンド一覧を見るには、
pyenv commands を実行する。
pyenv の削除
- Pyenv を一時的に無効化したり、システムから削除したりするのは簡単。
Pyenv プラグイン
- プラグインを使うことで、Pyenv の機能をシンプルかつ柔軟で保守しやすい形で拡張・カスタマイズできる。
高度な設定
開発
- Pyenv のソースコードは GitHub でホスティングされている。
- Bats を使ってテストを実行する。
GN⁺ の意見
- pyenv はさまざまな Python バージョンを管理するのに非常に便利なツール。特に複数のプロジェクトで異なるバージョンの Python を使う必要がある開発者に役立つ。
- このツールは Python 自体に依存せず、純粋なシェルスクリプトで構成されているため、Python がインストールされていないシステムでも導入と管理が可能。
- pyenv は virtualenv を直接管理しないが、pyenv-virtualenv プラグインを通じて virtualenv 管理を自動化できるため便利。
- インストールと使い方が比較的簡単なので、Python バージョン管理が必要な初級ソフトウェアエンジニアでも扱いやすい。
- pyenv と似た機能を提供する他のツールとしては
conda があり、特にデータサイエンスや機械学習の分野で広く使われている。conda はパッケージ管理と環境管理をあわせて提供するため、こうした機能が必要なユーザーに勧められる。
- pyenv を導入する際は、システムに複数バージョンの Python がインストールされている場合、パスの衝突を避けるための注意が必要。pyenv を使う利点はバージョン管理のしやすさだが、設定を誤るとシステムのデフォルト Python パスに影響を与える可能性がある。
7件のコメント
conda は注意が必要で、ある程度の規模の企業では
有料です。
会社が小さくても元請けの規模が大きいと納品しづらいです
conda 自体は BSD で無料ですが、リポジトリとパッケージのライセンスはよく確認してください。
asdfを最上位に設定しておいて https://asdf-vm.com/プロジェクトごとには
localで構成したり、コンテナを使ったりもしていますが…新しい環境の構築+管理をするものがたくさん出てきていて、あまり使わなくなっていますね……(笑)
私もまさにそんなふうに使っています。
ははは、個人的には pyenv は少し時代遅れになった感じがあります。
rbenv、pyenv、nodenvのようなものが次々と出てくるので、結局anyenvなんてものまで生まれましたね。笑
https://github.com/anyenv/anyenv
Hacker Newsのコメント
pyenv利用に関する警告
Pythonプログラマーの苦労
Pythonプログラムを安定して維持するツール
Miseツールの紹介
ASDFの利点
pyenv利用経験の共有
python<version> -m venv /my/virtual/envを使って仮想環境を管理するほうが安定している。個人的なPython管理スタック
.venvフォルダーを無視リストに追加する。Miseを使ったランタイム依存関係の管理
macOSワークフローの共有
ここがあまりにもつらいポイントのように思います。