Skill de Empacotamento e Publicação
Estrutura de projeto e releases PyPI - uma Skill de Agente para Python 3.14 e uv 0.6+.
O Que Esta Skill Faz
Cria layout de biblioteca publicável: src/<package>/, pyproject.toml (PEP 621), README.md, LICENSE, CHANGELOG.md, GitHub Actions release.yml, passos de teste no TestPyPI e política de incremento de versão.
Quando Invocar
- Extraindo utilitários compartilhados de um monorepo para uma biblioteca
- Primeira release open-source de um pacote interno
- Modernizando um projeto legado com setup.py para pyproject
- Revisando um PR que quebra metadados sdist/wheel
Entradas
| Entrada | Por quê |
|---|---|
| Nome do pacote | Disponibilidade do nome no PyPI |
| Licença | MIT, Apache-2.0, proprietária |
| Versão mínima do Python | requires-python (3.14 vs 3.13) |
| Extras opcionais | Grupos de dependência dev, gpu |
| Alvo de publicação | PyPI, índice privado, Artifactory |
Saídas
src/<nome>/__init__.pycom__version__[project.scripts]se um ponto de entrada CLI for necessário- Bloco de verificação
uv build/python -m build - Workflow OIDC de publicador confiável ou token via secrets do GitHub
twine check dist/*na CI
Salvaguardas
- Layout
src- importa o pacote desrc/e não da raiz do repositório nosys.path. - Sem secrets no pyproject - tokens apenas em secrets da CI.
- Fixar backend de build -
hatchlingousetuptoolsexplicitamente. - Entrada no CHANGELOG por release - Formato Keep a Changelog.
- Tag
vX.Y.Zaciona a publicação - não cada commit principal. - Testar no TestPyPI antes do índice de produção pela primeira vez.
Receita
uv sync --all-extras
uv run ruff check .
uv run pytest -q
uv build
uv run twine check dist/*
# CI: publicar na tag após autenticação de publicador confiávelExemplo de Trabalho (fragmento de pyproject)
[project]
name = "acme-utils"
version = "0.1.0"
requires-python = ">=3.14"
dependencies = []
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/acme_utils"]FAQs
uv publish ou twine?
uv publish quando disponível no uv fixado; caso contrário, twine upload - a skill documenta ambos.
Monorepo com múltiplos pacotes?
Um pyproject.toml por pacote ou configuração uv de workspace - documente o layout escolhido no README.
Relacionados
- Empacotamento e Publicação - guia humano
- pyproject.toml Explicado - metadados
- uv - A Ferramenta Rápida - ferramentas
- Skill de Melhores Práticas em Python - qualidade de código
Versões da Stack: Esta página foi escrita para Python 3.14.0 (3.14 estável, 3.13 em manutenção), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.