Dependency Management
Manage Python dependencies with uv following workspace conventions.
Trigger
Use this skill when the user asks to:
- •Add or remove a dependency
- •Update dependencies
- •Sync or install dependencies
- •Fix dependency issues
Quick Reference
| Action | Command |
|---|---|
| Add runtime dependency | uv add <package> |
| Add to group | uv add <package> --group dev |
| Remove dependency | uv remove <package> |
| Update all | uv lock --upgrade |
| Update specific | uv lock --upgrade-package <package> |
| Sync (local dev) | uv sync |
| Sync (CI/CD) | uv sync --frozen |
Procedure: Adding Dependencies
Runtime Dependencies
- •
Add to workspace root:
bashuv add <package_name>
- •
If needed by specific project, also add to project's pyproject.toml:
toml[project] dependencies = [ "new-package>=X.Y.Z", # Must match workspace root version ]
Development Dependencies
Add to appropriate group in workspace root only:
bash
# Linters, formatters, type checkers uv add <package_name> --group dev # Test frameworks and helpers uv add <package_name> --group test # CI/CD and deployment tools uv add <package_name> --group release
Decision Tree
code
Is it needed at runtime in production? ├── YES → uv add <package> (runtime dependency) └── NO → Continue... Is it for running tests? ├── YES → uv add <package> --group test └── NO → Continue... Is it for deploying/releasing? ├── YES → uv add <package> --group release └── NO → uv add <package> --group dev
Procedure: Removing Dependencies
bash
# Remove from workspace root uv remove <package_name> # Remove from specific project cd projects/<project> && uv remove <package_name> # Remove from group uv remove <package_name> --group dev
Procedure: Updating Dependencies
Update All
bash
uv lock --upgrade uv sync
Update Specific Package
bash
uv lock --upgrade-package <package_name> uv sync
Post-Update Checklist
- •Check resolved versions in
uv.lock - •Update
pyproject.tomlconstraints to match (recommended) - •Run tests
- •Commit both
pyproject.tomlanduv.locktogether
Critical Rules
Subset Rule
Project dependencies MUST be a subset of workspace root:
code
Workspace root: [A, B, C, D] Project 1: [A, B] ✅ Valid subset Project 2: [B, C, D] ✅ Valid subset Project 3: [A, E] ❌ E not in workspace root!
If project needs new dependency → add to workspace root FIRST.
Version Constraints
Always use >= with tested version:
toml
# Good "google-cloud-bigquery>=3.30.0" # Bad "google-cloud-bigquery" # No version "google-cloud-bigquery>3.0" # Untested minimum
Lock File Rules
- •Always commit
uv.lock - •Use
--frozenin CI/CD - •Never manually edit
uv.lock
Standard Dependency Groups
| Group | Purpose | Examples |
|---|---|---|
| (none) | Runtime | Flask, pydantic, google-cloud-* |
| dev | Development tools | ruff, pyright, pre-commit |
| test | Testing | pytest, pytest-cov |
| release | CI/CD deployment | pulumi, semantic-release |
Troubleshooting
See troubleshooting.md for common issues.