最近は複数のPythonバージョンを用意するのにpyenvを使うのをやめてryeを使っています。
プロジェクトもryeで管理すればいいのですが、OSSメンテしていると良くあるのがIssueの再現のためにスクリプト1つ動かすための環境を作るケースでは若干ryeは面倒です。
src等のディレクトリは不要ですし、addしてからsyncしないといけないし、 python script.py
じゃなくて rye run
か rye shell
をしないといけないし。
なので、ryeでプロジェクト管理するよりも、ryeをpyenvのように使うことが多いです。しかも、pyenvを使っていた時はpythonの起動速度が遅くなる事を嫌ってshimsは使っていなかったのですが、ryeはオーバーヘッドがすごく小さいので、shimsにパスを通して rye pin
を使って今のディレクトリで利用するPythonのバージョンを選択しています。
環境を一つ作ってライブラリをインストールするまでの手順を書いておきます。まず、普段から使っているエイリアスがこちらです。
# カレントディレクトリ配下に .venv というディレクトリ名で venv を作り有効化する alias mkvenv='python3 -m venv --upgrade-deps --prompt . .venv && activate' # すでに .venv がある場合にそれを有効化する alias activate='source .venv/bin/activate'
また、 rye が管理するプロジェクト以外でもrye pinなどを使ってryeが管理するPythonを使えるようにするために、次の設定をしておきます。
rye config --set-bool behavior.global-python=true
このmkvenvエイリアスとryeを組み合わせて使い捨ての検証環境を作る手順です。
inada-n@macos:~ $ mkdir t && cd t inada-n@macos:~/t $ rye pin 3.11 pinned 3.11.7 in /Users/inada-n/t/.python-version inada-n@macos:~/t $ mkvenv # ここでは rye の shims にある python が、 pin したバージョンのpythonを実行してくれる (t) inada-n@macos:~/t $ pip -V # 仮想環境をactivate済みなので、pipもpythonも仮想環境のものを使える pip 23.3.2 from /Users/inada-n/t/.venv/lib/python3.11/site-packages/pip (python 3.11) (t) inada-n@macos:~/t $ pip install msgpack Collecting msgpack Using cached msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl.metadata (9.1 kB) Using cached msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl (231 kB) Installing collected packages: msgpack Successfully installed msgpack-1.0.7
このように、pyproject.tomlを使ったプロジェクト管理をしない場合も、portable pythonをインストールして利用するためだけにでもryeを便利に使えます。
ちなみに上では mkvenv
エイリアスを動かすために rye pin 3.11
しましたが、仮想環境を作ってしまった後はこのpinは不要になります。
エイリアスを使わないで直接コマンドを実行する場合は、pinの代わりに python +3.11 -m venv --prompt . .venv
のように +3.X
の形でバージョン指定できます。