--- name: python-development description: Python ecosystem defaults and workflows using uv for packaging and ruff for linting/formatting permalink: opencode-config/skills/python-development/skill --- # Python Development Load this skill when a repo or lane involves Python code (presence of `pyproject.toml`, `setup.py`, `requirements*.txt`, or `.py` files as primary source). ## Defaults | Concern | Tool | Notes | | --- | --- | --- | | Package/venv management | `uv` | Replaces pip, pip-tools, and virtualenv | | Linting + formatting | `ruff` | Replaces flake8, isort, black | | Test runner | `pytest` | Unless repo already uses another runner | | Type checking | `pyright` or `mypy` | Use whichever the repo already configures | ## Core Workflow 1. **Bootstrap** — `uv sync` (or `uv pip install -e ".[dev]"`) to create/refresh the venv. 2. **Lint** — `ruff check .` then `ruff format --check .` before committing. 3. **Test** — `pytest` with the repo's existing config. Follow TDD default policy. 4. **Add dependencies** — `uv add ` (runtime) or `uv add --dev ` (dev). Do not edit `pyproject.toml` dependency arrays by hand. 5. **Lock** — `uv lock` after dependency changes. ## Conventions - Prefer `pyproject.toml` over `setup.py`/`setup.cfg` for new projects. - Keep `ruff` config in `pyproject.toml` under `[tool.ruff]`. - Use `uv run ` to execute tools inside the managed venv without activating it. - Pin Python version via `.python-version` or `pyproject.toml` `requires-python`. ## Docker Integration When the repo runs Python inside Docker, install dependencies with `uv pip install` inside the container. Mount a named volume for the uv cache to speed up rebuilds. ## Red Flags - Using `pip install` directly instead of `uv`. - Running `black` or `isort` when `ruff` is configured. - Missing `uv.lock` after dependency changes. - Editing dependency arrays in `pyproject.toml` by hand instead of using `uv add`.