uv is young but solid. These rules let you adopt it without surprises.
Use uv run instead of activating venvs. The single biggest workflow shift. 'cd project; uv run pytest' replaces 'cd project; source .venv/bin/activate; pytest; deactivate'. Build the muscle memory; the old one becomes obsolete.
Pin your Python version with uv python pin. Writes .python-version. Combined with uv.lock, your project is reproducible across machines.
Commit uv.lock. Same rule as every other lockfile in this quest. uv.lock is text, fairly stable, git-friendly. It IS your reproducibility — don't gitignore it.
Use uv sync in CI. Same role as npm ci or pnpm install --frozen-lockfile: strict, fast, fails on lockfile drift.
Use uvx for one-off tools. Replaces pipx run and npx for Python tools. uvx ruff check . works without committing ruff to your project.
The drop-in uv pip path is your migration. If a project isn't ready to switch to uv-native (uv add + uv.lock), uv pip install ... is a 10-100x speedup with zero workflow change. Do that first; migrate to uv-native later.