uv sync / uv add が「No pyproject.toml found」で実行できない
No pyproject.toml found は、pyproject.toml のある場所で実行するか --project で指定すれば直る。
requirements.txt だけの構成なら uv init で作る。
公開:
要約
uv sync や uv add を実行すると、何もせずに止まる(終了コード 2)。
error: No `pyproject.toml` found in current directory or any parent directoryuv sync・uv add・uv lock・uv tree は、pyproject.toml で依存を管理するプロジェクトを前提にしたコマンドだ。
カレントディレクトリから親ディレクトリへ順に pyproject.toml を探し、どこにも無ければこのエラーになる。
上の表示は uv 0.13.0 で、空のディレクトリと requirements.txt だけを置いたディレクトリの両方で同じものが出た。
4 つのコマンドとも表示と終了コードは同じだった。
一方で、uv run と uv pip install はプロジェクトが無くても動く。
同じディレクトリで uv run は通るのに uv sync だけ止まる、という見え方になる。
解決策
1. 場所を合わせる
pyproject.toml のあるディレクトリに移動して実行する。
移動できないスクリプトや CI では、--project でプロジェクトの場所を渡す。
ルート(/)から実行しても通った。
uv sync --project /app2. requirements.txt のまま使う
プロジェクトにしないなら、pip 互換のコマンドを使う。
こちらは仮想環境が必要なので、先に uv venv を実行する。uv pip install -r は書かれていないパッケージを残すが、uv pip sync は環境をファイルの内容にそろえる(Locking environments(新しいタブで開く))。
uv venv
uv pip sync requirements.txt # requirements.txt と完全に同じ状態にする
uv pip install -r requirements.txt # 足りないものだけ入れる3. プロジェクトに移行する
uv sync や uv add を使いたいなら、pyproject.toml を作って依存を取り込む。移行ガイド(新しいタブで開く)の手順どおり、uv add -r で既存のファイルを読み込める。
uv init --bare
uv add -r requirements.txt--bare は pyproject.toml だけを作る(Creating projects(新しいタブで開く))。
付けない uv init は、.python-version・README.md・src/ 以下のパッケージも作る。uv add の後は依存が pyproject.toml に書かれ、uv.lock と .venv もできるので、以後は uv sync が通る。
よくある原因
- 実行している場所が違う: リポジトリの外や、Dockerfile の
WORKDIRがプロジェクトと別の場所になっている。
親ディレクトリにあるpyproject.tomlは見つかるので、プロジェクトの中のサブディレクトリで実行した場合は通る。 requirements.txtで管理している: pip の流儀のディレクトリで、uv のプロジェクト用コマンドを使っている。uv syncはrequirements.txtを読まない。- プロジェクトをまだ作っていない:
uv initを実行していない。