pyenvを初心者に薦めるのはもうやめよう

Pythonのパッケージ・プロジェクト管理ツールはまだ乱立状態にあって、どれを使えばいいのかわからないから慣れたpyenv+pipを使おうという判断をする人がいるかもしれない。その判断自体は別に否定しないけれども、初心者に教える時にpyenvを教えるのはもうそろそろやめてほしい。

  • Pythonをソースからビルドするので、コンパイラや依存ライブラリを事前に揃えないといけない。依存ライブラリが足りないと中途半端なPython環境もできうる。
  • デフォルトで最適化オプション(PGO+LTO)が付いてないので、最適化ビルドしたPythonより~5%程度遅い
  • Windowsで使えない

Rye, pdm, Hatch などは python-build-standalone と呼ばれるビルド済みPythonをインストールする機能があるので、これらの欠点が存在しない。 Pythonをインストールするところまで、あるいはそこからvenvを作るところまでをこれらのツールに任せさえすれば、そのあとは慣れた pip を使ってもいい。 特にRyeとHatchは、その本体をインストールするのに事前にPythonを用意する必要がないので、初期状態でPythonが入っていないWindowsmacOSで使う時にも導入手順がシンプルだ。

どうしてもプロジェクト管理ツールをインストールしたくない、言語ランタイムだけを管理したいという場合は、最近は mise というものがあるらしい。 pyenv のような言語ごとのランタイム管理ツールを置き換える anyenv や asdf というツールがあるが、 mise はそれを似たツールだけれどもデフォルトでPythonのインストールが python-build-standalone になっている。pyenv/anyenvの使い勝手のままの移行先としては最適だろう。

note.com

ちなみにRyeとmiseはRustで書かれているし、 Hatch は Python で書かれているものの PyApp というRust製のツールでパッケージ化されていてPythonランタイムや依存ライブラリを自動で用意してくれる。Rustのおかげで最近のPythonのエコシステムは大きく改善されている。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。