パッケージ管理したい(rye

$ rye init プロジェクト名
$ rye pin バージョン
$ rye sync
$ rye add パッケージ名
$ rye add --dev パッケージ名
$ rye sync
$ rye fmt
$ rye lint
$ rye build
$ rye publish

ryeはPython環境の管理とパッケージ管理を一元管理できるツールです。 .python-versionでPython環境を管理し、 pyproject.tomlrequirements.loc(とrequirements-dev.lock)のファイルを使って、依存関係を管理できます。

インストールしたい

$ brew install rye

$ rye --version
rye 0.39.0
commit: 0.39.0 (2024-08-21)
platform: macos (aarch64)
self-python: cpython@3.12.2
symlink support: true
uv enabled: true

$ which -a rye
/opt/homebrew/bin/rye
~/.local/share/mise/installs/rye/latest/bin/rye
~/.rye/shims/rye

新規プロジェクトしたい(rye init

$ rye init PROJECT_NAME
success: Initialized project in ./PROJECT_NAME
  Run `rye sync` to get started

$ tree PROJECT_NAME
PROJECT_NAME
├── .git/
├── .gitignore
├── .python-version
├── README.md
├── pyproject.toml
└── src
    └── project_name
        └── __init__.py

$ rye init PROJECT_NAME
error: pyproject.toml already exists

initコマンドでプロジェクトを初期化できます。 Git関係のファイルも自動で生成されます。 同名のプロジェクトがすでに存在する場合は、エラーになります プロジェクト名を省略した場合は、カレントディレクトリが初期化されます。

$ rye init --script PROJECT_NAME
PROJECT_NAME
├── README.md
├── pyproject.toml
└── src
    └── project_name
        ├── __init__.py
        └── __main__.py

--scriptオプションでスクリプト/CLIの作成に適したディレクトリ/ファイル構造を作成できます。

$ rye init --license ライセンス名
PROJECT_NAME
├── LICENSE.txt
├── README.md
├── pyproject.toml
└── src
    └── project_name
        └── __init__.py

--licenseオプションで、指定したライセンスのLICENSE.txtを自動で生成できます。 ライセンス名が正しくない場合、初期化に失敗します。

パッケージを追加したい(rye add

$ rye add パッケージ名
$ rye remove パッケージ名

$ rye add パッケージ名==バージョン
$ rye add パッケージ名 --features パッケージ名
$ rye add --dev パッケージ名
$ rye add --git リポジトリ
$ rye add --url URL

rye addコマンドでプロジェクトにパッケージを追加できます。

パッケージをインストールしたい(rye sync

$ rye sync
$ rye sync --update パッケージ名
$ rye sync --update-all

rye syncコマンドで、pyproject.tomlにしたがってパッケージをインストールします。 --updateオプションで特定のパッケージを更新できます。

フォーマッターしたい(rye fmt

$ rye fmt          # ファイル修正
$ rye fmt --check  # チェックのみ

fmt(もしくはformat)コマンドで、コードをフォーマット(=整形)できます。 フォーマッターはruffを利用します。 フォーマット時のオプションはpyproject.toml[tool.ruff.format]セクション、もしくはruff.toml.ruff.tomlで設定できます。

--checkオプションは、フォーマットが必要かどうかのチェックのみで、ファイルは書き換えられません。 CIなどのチェックにいれる場合に有用です。

リンターしたい(rye lint

$ rye lint        # チェックのみ
$ rye lint --fix  # ファイル修正

lintコマンドで、コーディングスタイルを確認できます。 リンターはruffを利用します。 リンター時のオプションはpyproject.toml[tool.ruff.lint]セクション、もしくはruff.toml.ruff.tomlで設定できます。

--fixオプションは、修正が必要な場合にファイルを書き換えます。

パッケージをビルドしたい(rye build

$ rye build

buildコマンドでパッケージをビルドできます。

パッケージを公開したい(rye publish

$ rye publish

publishコマンドでビルドしたパッケージを公開できます。

設定したい(rye config

$ rye config --show-path
~/.rye/config.toml

$ rye config --get behavior.use-uv
$ rye config --get behavior.global-python

configコマンドで設定オプションを確認、変更できます。 デフォルトは~/.rye/config.tomlが対象です。

Python環境したい(rye pin / rye toolchain

$ rye pin 3.12.5
pinned 3.12.5 in ./.python-version

$ rye sync
Downloading cpython@3.12.5
Checking checksum
Unpacking
Downloaded cpython@3.12.5
...

pinコマンドでPython環境を指定できます。 その設定は.python-versionに保存されます。 pinした時点では環境は変わらず、syncすることで切り替えることができます。 指定したバージョンがない場合は、自動ダウンロードがはじまります。

// バージョンを指定してダウンロード
$ rye toolchain fetch 3.12.4
Downloading cpython@3.12.4
Checking checksum
Unpacking
Downloaded cpython@3.12.4

// 利用できるバージョンを確認
$ rye toolchain list
cpython@3.12.5 (~/.rye/py/cpython@3.12.5/bin/python3)
cpython@3.12.4 (~/.rye/py/cpython@3.12.4/bin/python3)
cpython@3.12.2 (~/.rye/py/cpython@3.12.2/bin/python3)
cpython@3.11.8 (~/.rye/py/cpython@3.11.8/bin/python3)

// 不要なバージョンを削除
$ rye toolchain remove 3.12.4
Removed installed toolchain cpython@3.12.4

// パスを指定してローカル環境を使用
$ rye toolchain register パス

また、toolchainコマンドで、Python環境を操作できます。

$ rye toolchain remove 3.12.5
error: toolchain cpython@3.12.5 is still in use by tool sphinx
$ rye tools uninstall sphinx
Uninstalled sphinx
$ rye tools remove 3.12.5
error: unrecognized subcommand

削除指定したバージョンがどこかで使われている場合は、エラーになります。 その環境を利用しているパッケージ名が表示されるので、まずアンインストールして対応します。

外部パッケージしたい(rye tools

$ rye tools list
$ rye tools install パッケージ名
$ rye tools uninstall パッケージ名

toolsコマンドでpipxのようなことができます。 コマンドは~/.local/binに配置されます。

注意

~/.local/binpipxでインストールされるコマンドと同じパスです。 同名のコマンドがある場合は上書きされます。