Una plantilla de copiadora/cocinera para nuevos proyectos de Python basados en la Guía de desarrolladores de Python Scientific. ¿Qué hace que esto sea diferente de otras plantillas para los paquetes de Python?
github.com (el valor predeterminado), y agrega soporte experimental de GITLAB CI de lo contrario.sp-repo-review para evaluar los Repos existentes con las pautas, con una versión de WebAssembly integrada con la guía. Todos los cheques reticulados. Asegúrese de haber leído primero la Guía de Desarrollo de Python Scientific, y posiblemente los haya usado en un proyecto o dos. Este no es un ejemplo o tutorial mínimo. Es una colección de herramientas útiles para comenzar un nuevo proyecto usando Cookiecutter, o para copiar en archivos individuales para un proyecto existente (a mano, de {{cookiecutter.project_name}}/ ).
Durante la generación, puede seleccionar entre los siguientes backends para su paquete:
Actualmente, la mejor opción es probablemente Hatch para Pure Python Projects, y Scikit-Build (como la elección scikit-build-core + pybind11) para proyectos binarios.
Instale copier y copier-templates-extensions . Usando Pipx, eso es:
pipx install copier
pipx inject copier copier-templates-extensionsAhora, ejecute Copier para generar su proyecto:
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg> es el camino para poner el nuevo proyecto. Si la copiadora es antigua, use --UNSAFE en lugar de --trust )
Obtendrá una mejor experiencia de CLI con la validación de respuestas. También obtendrá un archivo .copier-answers.yml , que le permitirá realizar actualizaciones en el futuro.
NOTA: Agregar
--vcs-ref=HEADpara obtener la última versión en lugar de la última versión etiquetada; La cabeza siempre pasa pruebas (y es lo que usa Cookiecutter).
Instale CookieCutter, idealmente con brew install cookiecutter si usa cerveza, de lo contrario con pipx install cookiecutter (o prepender pipx run al comando a continuación y omita la instalación). Luego corre:
cookiecutter gh:scientific-python/cookieSi está utilizando Cookiecutter 2.2.3+, ¡obtendrá buenas descripciones para las opciones como Copier!
También puede usar Cruft, lo que agrega la actualización de habilidad a los proyectos de CookieCutter. Instale con pipx install cruft (o Prepend pipx run al comando a continuación y omita la instalación). Luego corre:
cruft create gh:scientific-python/cookie Verifique los archivos de configuración de clave, pyproject.toml y posiblemente setup.cfg y setup.py (ejemplo pybind11). Actualizar README.md . También actualice y agregue documentos a docs/ .
Hay algunas dependencias de ejemplo y una versión mínima de Python de 3.9, no dude en cambiarlo a lo que realmente necesite/desee. También hay una estructura básica de backports con un pequeño ejemplo de tipificación.
[docs] Extra[test] extraPuede probar localmente con 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 Si no tiene nox localmente, puede usar PIPX, como pipx run nox .
Hypermodern-Python es otro proyecto que vale la pena ver con muchas similitudes, como una gran documentación para cada característica y muchas de las mismas herramientas utilizadas. Tiene un conjunto de características ligeramente diferentes y tiene un enfoque más fuerte en las acciones de GitHub; la mayoría de nuestra guía podría adaptarse a un sistema CI diferente con bastante facilidad si no desea usar GHA. También obliga al uso de la poesía (en lugar de tener una selección de backend), y no admite proyectos compilados. Actualmente arroja todas las dependencias de desarrollo en un entorno compartido, causando largos tiempos de resolución y altas posibilidades de conflictos. Tampoco usa pre-compromiso de la forma en que se pretendía ser utilizada. También tiene bastante código personalizado.
Gran parte de la guía, CookieCutter y Repo-Review comenzaron como parte de Scikit-Hep. Estos proyectos se fusionaron, generalizaron y se combinaron con la Guía NSLS-II durante la Cumbre de Desarrolladores de Python de Python 2023.
sp-repo-review proporciona cheques basados en la Guía de Desarrollo de Python Scientific en Scientific-Python/Cookie para Repo-Review.
Esta herramienta puede verificar el estilo de un repositorio. Use así:
pipx run ' sp-repo-review[cli] ' < path to repository >Esto producirá una lista de resultados: las marcas de verificación verdes significan que esta regla se sigue, la Red X significa que la regla no lo es. Una señal de advertencia amarilla significa que el cheque se omitió porque falló un cheque previo requerido. Algunos cheques fallarán, está bien: el objetivo es atraer todos los problemas posibles a su atención, no para forzar el cumplimiento de los controles arbitrarios. Finalmente, podría haber una manera de marcar las verificaciones como se ignoran.
Por ejemplo, GH101 espera que todos sus archivos de acción tengan un buen name: campo. Si está satisfecho con los nombres basados en archivos que ve en CI, debe sentirse libre de simplemente ignorar este cheque (solo ignorarlo visualmente por el momento, es probable que se agregue una forma de especificar cheques ignorados).
Todos los controles se mencionan al menos de alguna manera en la Guía de Desarrollo de Python Scientific. Debería leer eso primero: si no está intentando seguirlos, algunos de los cheques podrían no funcionar. Por ejemplo, las pautas especifican la configuración de Pytest se colocan en pyproject.toml . Si lo coloca en otro lugar, se omitirán todas las verificaciones de Pytest.
Esto se desarrolló originalmente para Scikit-Hep antes de mudarse a la Python científica.
También puede usar acciones de GitHub:
- uses : scientific-python/cookie@<version>O pre-compromiso:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review Si usa additional_dependencies para agregar más complementos, como validate-pyproject , también debe incluir "repo-review[cli]" para garantizar que se incluyan los requisitos de la CLI.
PY001 : tiene un pyproject.tomlPY002 : tiene un archivo ReadMe. (MD | RST)PY003 : tiene un archivo de licencia*PY004 : tiene carpeta de documentosPY005 : tiene carpeta de pruebasPY006 : tiene configuración previa al contratoPY007 : admite un corredor de tareas fácil (NOX, TOX, PIXI, etc.)PP002 : tiene una tabla de sistema de compilación adecuadaPP003 : no enumera la rueda como una compilaciónPP004 : no requiere Python de la tapa superiorPP301 : tiene pytest en pyprojectPP302 : establece una pytest mínima a al menos 6PP303 : Establece las rutas de pruebaPP304 : Establece el nivel de registro en PytestPP305 : Especifica xfail_strictPP306 : Especifica una configuración estrictaPP307 : Especifica marcadores estrictosPP308 : Especifica un resumen útil de PytestPP309 : Advertencias de filtro especificadasRTD100 : usa readthedocs (configuración pyproject)RTD101 : Debe establecer el número de versión RTD en 2RTD102 : Tienes que establecer la imagen de compilación RTDRTD103 : Tienes que establecer la versión RTD PythonGH100 : tiene una configuración de GitHub ActionsGH101 : tiene buenos nombresGH102 : Cancelio automático en PRS repetidosGH103 : Al menos un flujo de trabajo con disparador de despacho manualGH104 : Use nombres únicos para la carga de carga de cargaGH200 : mantenido por dependabotGH210 : Mantiene las versiones de acción de Github con dependabotGH211 : No fije las acciones del núcleo como versiones principalesGH212 : requiere agrupación de actualizaciones de GHAMY100 : usa mypy (configuración pyproject)MY101 : modo estricto mypyMY102 : mypy show_error_codes en desacuerdoMY103 : mypy advertir inalcanzableMY104 : mypy habilita ignorar sin códigoMY105 : mypy habilita redundante-exprMY106 : mypy habilita verdady-boolPC100 : tiene gancos previos al compromisoPC110 : usa un formato negro o ruffPC111 : usa docs ennegrecidosPC140 : usa un comprobador de tipoPC160 : usa un corrector ortográficoPC170 : usa ganchos pygrep (solo es necesario si RST presente)PC180 : usa un formateador de markdownPC190 : usa RuffPC191 : Ruff Show Soluciones si las correcciones habilitanPC901 : Mensaje CI previo al comercio personalizadoRF001 : tiene configuración de RuffRF002 : la versión de destino debe estar configuradaRF003 : el directorio SRC ya no necesita especificarse (0.6+)RF101 : se debe seleccionar BugbearRF102 : se debe seleccionar iSortRF103 : se debe seleccionar pyupgradeRF201 : Evite usar configuraciones de configuración desactivadasRF202 : Use (nueva) sección de configuración de pelusa