Eine Kopierer/CookieCutter -Vorlage für neue Python -Projekte basierend auf dem wissenschaftlichen Python Developer Guide. Was unterscheidet dies von anderen Vorlagen für Python -Pakete?
github.com -URL (Standard) abzielen, und fügt ansonsten experimentelle Gitlab -CI -Unterstützung hinzu.sp-repo-review um vorhandene Repos anhand der Richtlinien zu bewerten, wobei eine WebAssembly-Version in den Leitfaden integriert ist. Alle Schecks verknüpft. Stellen Sie sicher, dass Sie zuerst den Entwicklungshandbuch für wissenschaftliche Python gelesen und möglicherweise in ein oder zwei Projekten verwendet haben. Dies ist kein minimales Beispiel oder Tutorial. Es handelt sich um eine Sammlung nützlicher Tools zum Starten eines neuen Projekts mit CookieCutter oder zum Kopieren in einzelnen Dateien für ein vorhandenes Projekt (von Hand von {{cookiecutter.project_name}}/ ).
Während der Generation können Sie aus den folgenden Backends für Ihr Paket auswählen:
Derzeit ist die beste Wahl wahrscheinlich, dass sie für reine Python-Projekte und Scikit-Build (wie die Auswahl von Scikit-Build-Core + Pybind11) für binäre Projekte (wie die Auswahl von Scikit-Build-Core + Pybind11).
Installieren Sie copier und copier-templates-extensions . Mit PIPX ist das:
pipx install copier
pipx inject copier copier-templates-extensionsFühren Sie nun Kopierer aus, um Ihr Projekt zu generieren:
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg> ist der Weg, um das neue Projekt zu platzieren. Wenn der Kopierer alt ist, verwenden Sie --UNSAFE anstelle von --trust )
Sie erhalten eine schönere CLI -Erfahrung mit Antwortvalidierung. Sie erhalten auch eine .copier-answers.yml Datei, mit der Sie in Zukunft Updates durchführen können.
Hinweis: Hinzufügen
--vcs-ref=HEADum die neueste Version anstelle der letzten Tagged-Version zu erhalten. Der Kopf besteht immer durch Tests (und ist das, was CookieCutter verwendet).
Installieren Sie CookieCutter, idealerweise mit brew install cookiecutter , wenn Sie das Gebräu verwenden. Andernfalls pipx install cookiecutter (oder vorbereiten Sie pipx run mit dem folgenden Befehl und überspringen Sie die Installation). Dann rennen:
cookiecutter gh:scientific-python/cookieWenn Sie CookieCutter 2.2.3+ verwenden, erhalten Sie schöne Beschreibungen für die Optionen wie Copier!
Sie können auch Cruft verwenden, wodurch CookieTutter -Projekte das Fähigkeitsaktualisierung verleiht. Installieren Sie mit pipx install cruft (oder erstellen Sie pipx run mit dem Befehl unten und überspringen Sie die Installation). Dann rennen:
cruft create gh:scientific-python/cookie Überprüfen Sie die wichtigsten Setup -Dateien, pyproject.toml und möglicherweise setup.cfg und setup.py (Pybind11 -Beispiel). Update README.md . Aktualisieren Sie auch Dokumente und fügen Sie den docs/ hinzu.
Es gibt einige Beispielabhängigkeiten und eine minimale Python -Version von 3.9. Wechseln Sie sie gerne in das, was Sie tatsächlich brauchen/wollen. Es gibt auch eine einfache Backports -Struktur mit einem kleinen Schreibbeispiel.
[docs] extra[test] extraSie können lokal mit Nox testen:
# 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 Wenn Sie nox vor Ort nicht haben, können Sie PIPX wie pipx run nox verwenden.
Hypermodern-Python ist ein weiteres Projekt, das es wert ist, mit vielen Ähnlichkeiten nachzudenken, z. B. großartige Dokumentation für jede Funktion und viele der gleichen verwendeten Tools. Es hat etwas andere Funktionen und konzentriert sich stärker auf Github -Aktionen. Die meisten unserer Anleitung können an ein anderes CI -System ziemlich einfach angepasst werden, wenn Sie GHA nicht verwenden möchten. Es erzwingt auch die Verwendung von Gedichten (anstatt eine Backend -Auswahl) und unterstützt keine kompilierten Projekte. Derzeit steckt es alle Entwicklungsabhängigkeiten in ein gemeinsames Umfeld, was zu langen Lösungszeiten und hohe Wahrscheinlichkeit von Konflikten führt. Es verwendet auch nicht die Art und Weise, wie es verwendet werden sollte. Es hat auch ein paar benutzerdefinierte Code.
Ein Großteil des Leitfadens, des CookieCutter und des Repo-Review begann als Teil von Scikit-Hep. Diese Projekte wurden während des Gipfels für wissenschaftliche Python-Entwickler mit dem NSLS-II-Leitfaden zusammengeführt, verallgemeinert und kombiniert.
sp-repo-review bietet Schecks basierend auf dem wissenschaftlichen Python Development Guide bei Scientific-Python/Cookie für Repo-Review.
Dieses Tool kann den Stil eines Repositorys überprüfen. Verwenden Sie so:
pipx run ' sp-repo-review[cli] ' < path to repository >Dies erzeugt eine Liste von Ergebnissen - grüne Checkmarks bedeuten, dass diese Regel befolgt wird, der Mittelwert der Regel ist nicht. Ein gelbes Warnschild bedeutet, dass der Scheck übersprungen wurde, da ein früherer erforderlicher Scheck fehlgeschlagen ist. Einige Überprüfungen werden scheitern, das ist in Ordnung - das Ziel ist es, alle möglichen Probleme aufmerksam zu machen, nicht um die Einhaltung willkürlicher Überprüfungen zu erzwingen. Schließlich könnte es eine Möglichkeit geben, Schecks zu markieren, die ignoriert werden.
Zum Beispiel erwartet GH101 , dass alle Ihre Aktionsdateien einen schönen name: Feld. Wenn Sie mit den in CI angezeigten Dateinamen zufrieden sind, sollten Sie diese Überprüfung einfach ignorieren (nur visuell ignorieren Sie sie für den Moment visuell, eine Möglichkeit, ignorierte Schecks anzugeben, wird wahrscheinlich irgendwann hinzugefügt).
Alle Schecks werden zumindest in irgendeiner Weise im Entwicklungsleitfaden für wissenschaftliche Python erwähnt. Sie sollten das zuerst lesen - wenn Sie nicht versuchen, ihnen zu folgen, funktionieren einige der Schecks möglicherweise nicht. Beispielsweise geben die Richtlinien an, dass die PyTest -Konfiguration in pyproject.toml platziert werden. Wenn Sie es woanders platzieren, werden alle PyTest -Schecks übersprungen.
Dies wurde ursprünglich für Scikit-Hep entwickelt, bevor sie zu Scientific Python wechselte.
Sie können auch GitHub -Aktionen verwenden:
- uses : scientific-python/cookie@<version>Oder vor dem Kommission:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review Wenn Sie additional_dependencies verwenden, um weitere Plugins hinzuzufügen, z. B. validate-pyproject , sollten Sie auch "repo-review[cli]" einschließen, um sicherzustellen, dass die CLI-Anforderungen enthalten sind.
PY001 : Hat eine PYProject.tomlPY002 : Hat eine lesende Datei (MD | RST)PY003 : Hat eine Lizenz* Datei*PY004 : Hat Docs -OrdnerPY005 : Hat Test -Ordner hatPY006 : Hat eine VorkommachtkonfigurationPY007 : Unterstützt einen leichten Task -Läufer (NOX, Tox, Pixi usw.)PP002 : hat eine ordnungsgemäße Build-System-TabellePP003 : Listet Wheel nicht als Build-Dep aufPP004 : erfordert nicht obere Kappe Python erfordertPP301 : hat pytest in PyProjectPP302 : Legt einen Mindestpytest auf mindestens 6 festPP303 : Legt die Testpfade festPP304 : Legt die Protokollebene in PyTest festPP305 : Gibt xfail_strict anPP306 : Gibt strenge Konfiguration anPP307 : Gibt strenge Marker anPP308 : Gibt eine nützliche PyTest -Zusammenfassung anPP309 : Filterwarnungen angegebenRTD100 : Verwendet Redethedocs (PYProject -Konfiguration)RTD101 : Sie müssen die RTD -Versionsnummer auf 2 festlegenRTD102 : Sie müssen das Rtd -Build -Bild festlegenRTD103 : Sie müssen die Rtd Python -Version festlegenGH100 : Hat GitHub -Aktionen configGH101 : Hat schöne NamenGH102 : Auto-Cancel auf wiederholten PRsGH103 : Mindestens ein Workflow mit manuellem VersandauslöserGH104 : Verwenden Sie eindeutige Namen für Upload-ArtifactGH200 : Von DeVeabot gepflegtGH210 : Behält die GitHub -Aktionsversionen mit Abhängigkeit beiGH211 : Pinieren Sie keine Kernaktionen als HauptversionenGH212 : Erfordernde GHA -Update -GruppierungMY100 : Verwendet MyPy (PYProject -Konfiguration)MY101 : MyPy Strict -ModusMY102 : mypy show_error_codes veraltetMY103 : mypy warnen unerreichbarMY104 : MyPy ermöglicht es, ohne Code zu ignorierenMY105 : MyPy ermöglicht redundant-exprMY106 : Mypy ermöglicht die WahrheitPC100 : hat vor-Commit-HooksPC110 : Verwendet Schwarz oder Ruff-FormatPC111 : Verwendet Black-DocsPC140 : Verwendet einen Typ CheckerPC160 : Verwendet eine ZauberprüfungPC170 : Verwendet PyGrep -Haken (nur erforderlich, wenn erstmals vorhanden ist)PC180 : Verwendet ein Markdown -FormatiererPC190 : Verwendet RuffPC191 : Ruff Show Fixes Wenn die Korrekturen aktiviert sindPC901 : benutzerdefinierte CI-Nachricht vor dem KommandoRF001 : Hat Ruff -KonfigurationRF002 : Zielversion muss festgelegt werdenRF003 : Das SRC -Verzeichnis muss nicht mehr angegeben werden (0,6+)RF101 : Bugbear muss ausgewählt werdenRF102 : ISORT muss ausgewählt werdenRF103 : Pyupgrade muss ausgewählt werdenRF201 : Vermeiden Sie es, veraltete Konfigurationseinstellungen zu verwendenRF202 : Verwenden Sie (neu) Lint -Konfigurationsabschnitt