Um modelo de copiadora/cookieCutter para novos projetos Python com base no Guia do Developer Scientific Python. O que torna isso diferente de outros modelos para pacotes Python?
github.com (o padrão) e adicionar suporte experimental do GitLab CI de outra forma.sp-repo-review para avaliar os repositórios existentes em relação às diretrizes, com uma versão WebAssembly integrada ao guia. Todas as verificações reticuladas. Certifique-se de ter lido o Guia de Desenvolvimento do Python científico primeiro e possivelmente os usou em um projeto ou dois. Este não é um exemplo ou tutorial mínimo. É uma coleção de ferramentas úteis para iniciar um novo projeto usando CookieCutter ou para copiar em arquivos individuais para um projeto existente (manualmente, de {{cookiecutter.project_name}}/ ).
Durante a geração, você pode selecionar entre os seguintes back -end para o seu pacote:
Atualmente, a melhor opção é provavelmente a escotilha para projetos Python Pure, e a Scikit-Build (como a escolha Scikit-Build-Core + Pybind11) para projetos binários.
Instale copier e copier-templates-extensions . Usando PIPX, isso é:
pipx install copier
pipx inject copier copier-templates-extensionsAgora, execute a copiadora para gerar seu projeto:
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg> é o caminho para colocar o novo projeto. Se a copiadora for antiga, use --UNSAFE em vez de --trust )
Você obterá uma experiência mais agradável da CLI com a validação de respostas. Você também receberá um arquivo .copier-answers.yml , que permitirá que você execute atualizações no futuro.
Nota: add
--vcs-ref=HEADpara obter a versão mais recente em vez da última versão marcada; A cabeça sempre passa testes (e é o que o Cookiecutter usa).
Instale o CookiecTutter, idealmente com brew install cookiecutter se você usar o Brew, caso contrário, com pipx install cookiecutter (ou Prenda pipx run no comando abaixo e pule a instalação). Em seguida, corra:
cookiecutter gh:scientific-python/cookieSe você estiver usando o Cookiecutututter 2.2.3+, receberá boas descrições para as opções como a Copiadora!
Você também pode usar o Cruft, o que adiciona a atualização de habilidades aos projetos de cozinheiro. Instale com pipx install cruft (ou prenda pipx run no comando abaixo e pule a instalação). Em seguida, corra:
cruft create gh:scientific-python/cookie Verifique os arquivos de configuração da chave, pyproject.toml e possivelmente setup.cfg e setup.py (exemplo pybind11). Atualize README.md . Atualize também e adicione documentos aos docs/ .
Existem algumas dependências de exemplo e uma versão mínima do Python do 3.9, sinta -se à vontade para alterá -la para o que você realmente precisar/deseja. Há também uma estrutura básica de backports com um pequeno exemplo de digitação.
[docs] extra[test] extraVocê pode testar localmente com NOX:
# See all commands
nox -l
# Run a specific check
nox -s "lint(scikit-build)"
# Run a noxfile command on the project noxfile
nox -s "nox(hatch)" -- docs Se você não possui nox localmente, pode usar o PIPX, como pipx run nox .
O Hypermodern-Python é outro projeto que vale a pena conferir com muitas semelhanças, como ótima documentação para cada recurso e muitas das mesmas ferramentas usadas. Ele possui um conjunto de recursos ligeiramente diferentes e tem um foco mais forte nas ações do GitHub - a maioria do nosso guia pode ser adaptada a um sistema de IC diferente com bastante facilidade se você não quiser usar o GHA. Também força o uso da poesia (em vez de ter uma seleção de back -end) e não suporta projetos compilados. Atualmente, ele despeja todas as dependências de desenvolvimento em um ambiente compartilhado, causando longos tempos de resolução e alta chance de conflitos. Ele também não usa pré-compromisso da maneira como deveria ser usada. Ele também possui bastante código personalizado.
Muito do guia, o CookieCutter e o Repo-Review começou como parte do Scikit-Hep. Esses projetos foram mesclados, generalizados e combinados com o Guia NSLS-II durante a cúpula de desenvolvedores de Python científica de 2023.
sp-repo-review fornece cheques com base no Guia de Desenvolvimento do Python Scientific em Scientific-Python/Cookie para Repo-Review.
Esta ferramenta pode verificar o estilo de um repositório. Use assim:
pipx run ' sp-repo-review[cli] ' < path to repository >Isso produzirá uma lista de resultados - marcas de verificação verdes significam que essa regra é seguida, o Red X significa que a regra não é. Um sinal de aviso amarelo significa que o cheque foi ignorado porque uma verificação necessária anterior falhou. Alguns verificações falharão, tudo bem - o objetivo é levar todos os problemas possíveis à sua atenção, não forçar a conformidade com verificações arbitrárias. Eventualmente, pode haver uma maneira de marcar as verificações como ignoradas.
Por exemplo, GH101 espera que todos os seus arquivos de ação tenham um bom name: Campo. Se você estiver satisfeito com os nomes baseados em arquivos que você vê no CI, deve sentir-se à vontade para simplesmente ignorar essa verificação (basta ignorá-la visualmente no momento, uma maneira de especificar cheques ignorados provavelmente será adicionada eventualmente).
Todas as verificações são mencionadas pelo menos de alguma forma no Guia de Desenvolvimento do Python Scientific. Você deve ler isso primeiro - se não estiver tentando segui -los, alguns dos cheques podem não funcionar. Por exemplo, as diretrizes especificam a configuração de pytest ser colocada em pyproject.toml . Se você o colocar em outro lugar, todas as verificações de pytest serão ignoradas.
Isso foi originalmente desenvolvido para o Scikit-Hep antes de se mudar para o Scientific Python.
Você também pode usar ações do GitHub:
- uses : scientific-python/cookie@<version>Ou pré-compromisso:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review Se você usar additional_dependencies para adicionar mais plug-ins, como validate-pyproject , também deverá incluir "repo-review[cli]" para garantir que os requisitos da CLI sejam incluídos.
PY001 : tem um pyProject.tomlPY002 : tem um arquivo ReadMe. (MD | RST)PY003 : tem um arquivo de licença*PY004 : tem pasta DocsPY005 : tem pasta de testesPY006 : tem uma configuração pré-comprometidaPY007 : suporta um corredor de tarefas fácil (NOX, tox, pixi, etc.)PP002 : tem uma tabela de sistema de construção adequadaPP003 : não liste a roda como uma construção de construçãoPP004 : não requer python superiorPP301 : tem pytest no PyProjectPP302 : define um pytest mínimo para pelo menos 6PP303 : define os caminhos de testePP304 : define o nível de log no pytestPP305 : especifica xfail_strictPP306 : especifica configuração estritaPP307 : Especifica marcadores rígidosPP308 : Especifica o resumo de pytest útilPP309 : avisos de filtro especificadosRTD100 : usa o ReadThEdocs (Config PyProject)RTD101 : você precisa definir o número da versão RTD como 2RTD102 : você precisa definir a imagem de construção rtdRTD103 : você precisa definir a versão RTD PythonGH100 : tem ações github configGH101 : tem nomes agradáveisGH102 : Cancel automático em PRs repetidosGH103 : Pelo menos um fluxo de trabalho com gatilho de despacho manualGH104 : Use nomes exclusivos para upload-artifactGH200 : Mantido por DependabotGH210 : mantém as versões de ação do GitHub com dependabotGH211 : Não prenda as ações principais como versões principaisGH212 : requer agrupamento de atualização do GHAMY100 : usa mypy (configuração pyproject)MY101 : Modo rigoroso mypyMY102 : mypy show_error_codesMY103 : mypy avise inacessívelMY104 : mypy permite ignorar-sem códigoMY105 : mypy permite redundante-exprMY106 : mypy permite um brool verdadeiroPC100 : tem gancho pré-comprometidoPC110 : usa formato preto ou ruffPC111 : usa Docs BleennPC140 : usa um verificador de tipoPC160 : usa um verificador ortográficoPC170 : usa ganchos pigrep (apenas necessários se o primeiro presente)PC180 : usa um formatador de marcaçãoPC190 : usa RuffPC191 : Ruff show correções se as correções habilitadasPC901 : Mensagem CI personalizada pré-comprometimentoRF001 : tem configuração RuffRF002 : a versão alvo deve ser definidaRF003 : o diretório SRC não precisa mais ser especificado (0,6+)RF101 : Bugbear deve ser selecionadoRF102 : ISORT deve ser selecionadoRF103 : pyupgrade deve ser selecionadoRF201 : Evite usar configurações de configuração depreciadaRF202 : Use (novo) seção de configuração de fins