Un modèle de copieur / gookietter pour de nouveaux projets Python basés sur le Guide scientifique du développeur Python. Qu'est-ce qui rend cela différent des autres modèles pour les packages Python?
github.com (la valeur par défaut) et ajoute une prise en charge expérimentale de GitLab CI autrement.sp-repo-review pour évaluer les références existantes contre les directives, avec une version WebAssembly intégrée au guide. Tous les vérifications réticulées. Assurez-vous d'avoir lu le guide de développement scientifique-python en premier et que vous les avez peut-être utilisés sur un projet ou deux. Ce n'est pas un exemple ou un tutoriel minimal. Il s'agit d'une collection d'outils utiles pour démarrer un nouveau projet à l'aide de Cookietter, ou pour la copie dans des fichiers individuels pour un projet existant (à la main, à partir de {{cookiecutter.project_name}}/ ).
Pendant la génération, vous pouvez sélectionner parmi les backends suivants pour votre package:
Actuellement, le meilleur choix est probablement l'éclosion des projets Python purs, et Scikit-Build (comme le choix Scikit-Build-Core + Pybind11) pour des projets binaires.
Installez copier et copier-templates-extensions . En utilisant Pipx, c'est-à-dire:
pipx install copier
pipx inject copier copier-templates-extensionsMaintenant, exécutez le copieur pour générer votre projet:
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg> est le chemin pour mettre le nouveau projet. Si le copieur est ancien, utilisez --UNSAFE au lieu de --trust )
Vous obtiendrez une expérience CLI plus agréable avec la validation des réponses. Vous obtiendrez également un fichier .copier-answers.yml , qui vous permettra d'effectuer des mises à jour à l'avenir.
Remarque: add
--vcs-ref=HEADpour obtenir la dernière version au lieu de la dernière version taguée; La tête passe toujours des tests (et c'est ce que Cookietter utilise).
Installez Cookietter, idéalement avec brew install cookiecutter si vous utilisez Brew, sinon avec pipx install cookiecutter (ou prend pipx run vers la commande ci-dessous et sautez l'installation). Puis courez:
cookiecutter gh:scientific-python/cookieSi vous utilisez Cookietter 2.2.3+, vous obtiendrez de belles descriptions pour les options comme Copier!
Vous pouvez également utiliser Cruft, ce qui ajoute la mise à jour de la capacité aux projets Cookietter. Installez avec pipx install cruft (ou prend pipx run vers la commande ci-dessous et sautez l'installation). Puis courez:
cruft create gh:scientific-python/cookie Vérifiez les fichiers de configuration de la clé, pyproject.toml et éventuellement setup.cfg et setup.py (exemple pybind11). Mettre à jour README.md . Mettez également à jour et ajoutez également les documents aux docs/ .
Il y a quelques exemples de dépendances et une version Python minimale de 3.9, n'hésitez pas à la modifier en tout ce dont vous avez réellement besoin. Il existe également une structure de bassin de base avec un petit exemple de dactylographie.
[docs] Extra[test] supplémentaireVous pouvez tester localement avec 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 vous n'avez pas nox localement, vous pouvez utiliser PIPX, comme pipx run nox à la place.
Hypermodern-Python est un autre projet qui mérite d'être consulté avec de nombreuses similitudes, comme une excellente documentation pour chaque fonctionnalité et bon nombre des mêmes outils utilisés. Il a un ensemble de fonctionnalités légèrement différent et a une concentration plus forte sur les actions GitHub - la plupart de notre guide pourrait être adapté à un système CI différent assez facilement si vous ne voulez pas utiliser le GHA. Il oblige également l'utilisation de la poésie (au lieu d'avoir une sélection backend) et ne prend pas en charge les projets compilés. Il déverse actuellement toutes les dépendances de développement dans un environnement partagé, provoquant de longs temps de résolution et des chances élevées de conflits. Il n'utilise pas non plus de pré-engagement comme il était destiné à être utilisé. Il a également un peu de code personnalisé.
Une grande partie du guide, de la cuisine et de la révision a commencé dans le cadre de Scikit-Hep. Ces projets ont été fusionnés, généralisés et combinés avec le guide NSLS-II lors du Sommet des développeurs scientifiques-python 2023.
sp-repo-review fournit des vérifications basées sur le guide de développement scientifique-python à Scientific-Python / Cookie pour Repo-Review.
Cet outil peut vérifier le style d'un référentiel. Utilisez comme ceci:
pipx run ' sp-repo-review[cli] ' < path to repository >Cela produira une liste de résultats - les marques de contrôle vertes signifient que cette règle est suivie, la moyenne de la règle de Red X n'est pas. Un panneau d'avertissement jaune signifie que le chèque a été sauté car un chèque requis précédent a échoué. Certains chèques échoueront, ce n'est pas grave - l'objectif est de porter tous les problèmes possibles à votre attention, de ne pas forcer la conformité aux chèques arbitraires. Finalement, il pourrait y avoir un moyen de marquer les chèques comme ignorés.
Par exemple, GH101 s'attend à ce que tous vos fichiers d'action aient un joli name: champ. Si vous êtes satisfait des noms basés sur des fichiers que vous voyez dans CI, vous devez vous sentir libre d'ignorer simplement ce chèque (il suffit de l'ignorer visuellement pour le moment, un moyen de spécifier des chèques ignorés sera probablement ajouté finalement).
Tous les vérifications sont mentionnées au moins d'une manière ou d'une autre dans le guide de développement scientifique-python. Vous devez le lire d'abord - si vous n'essayez pas de les suivre, certains chèques pourraient ne pas fonctionner. Par exemple, les lignes directrices spécifient la configuration de Pytest être placée dans pyproject.toml . Si vous le placez ailleurs, tous les chèques de Pytest seront ignorés.
Cela a été initialement développé pour Scikit-Hep avant de passer à Scientific Python.
Vous pouvez également utiliser des actions GitHub:
- uses : scientific-python/cookie@<version>Ou pré-engagement:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review Si vous utilisez additional_dependencies pour ajouter plus de plugins, comme validate-pyproject , vous devez également inclure "repo-review[cli]" pour vous assurer que les exigences CLI sont incluses.
PY001 : a un pyproject.tomlPY002 : a un fichier Readme. (MD | RST)PY003 : a un fichier de licence *PY004 : a le dossier des documentsPY005 : a un dossier de testsPY006 : a une configuration de pré-engagementPY007 : prend en charge un coureur de tâche facile (NOx, Tox, Pixi, etc.)PP002 : a une table de système de construction appropriéePP003 : ne répertorie pas la roue comme une build-depPP004 : ne nécessite pas le python supérieurPP301 : a pytest dans pyprojectPP302 : définit un pytest minimum à au moins 6PP303 : définit les chemins de testPP304 : Définit le niveau de journal dans PyTestPP305 : spécifie xfail_strictPP306 : spécifie la configuration strictePP307 : spécifie des marqueurs strictsPP308 : Spécifie le résumé utile de PytestPP309 : avertissements de filtre spécifiéRTD100 : utilise ReadTheDocs (config Pyproject)RTD101 : vous devez définir le numéro de version RTD sur 2RTD102 : Vous devez définir l'image RTD BuildRTD103 : Vous devez définir la version RTD PythonGH100 : a la configuration des actions githubGH101 : a de beaux nomsGH102 : Auto-condenson sur PRS répétéGH103 : au moins un flux de travail avec déclencheur de répartition manuelleGH104 : Utilisez des noms uniques pour le téléchargement artifactGH200 : maintenu par DetenabotGH210 : maintient les versions d'action GitHub avec DetenabotGH211 : Ne comptez pas les actions de base comme versions majeuresGH212 : nécessite le groupe de mise à jour GHAMY100 : utilise mypy (pyproject config)MY101 : mode strict mypyMY102 : mypy show_error_codes dépréciéMY103 : mypy avertit inaccessibleMY104 : mypy permet d'ignorer avec le codeMY105 : mypy permet de redondant-exprMY106 : mypy active la vérité-bolPC100 : a des pré-comitésPC110 : utilise le noir ou le format de rouffPC111 : utilise des Blacken-DocsPC140 : utilise un vérificateur de typePC160 : utilise un vérificateur orthographiquePC170 : utilise des crochets Pygrep (uniquement nécessaires si le premier présent)PC180 : utilise un formateur de marquePC190 : utilise RuffPC191 : Ruff Show Correses Si les correctifs activésPC901 : Message CI pré-engagement personnaliséRF001 : a une configuration de brouillardRF002 : la version cible doit être définieRF003 : Le répertoire SRC n'a plus besoin d'être spécifié (0,6+)RF101 : Bugbear doit être sélectionnéRF102 : ISORT doit être sélectionnéRF103 : Pyupgrade doit être sélectionnéRF201 : Évitez d'utiliser les paramètres de configuration obsolètesRF202 : Utiliser la section de configuration de peluche (nouvelle)