{"id":1119,"date":"2026-08-19T09:48:31","date_gmt":"2026-08-19T09:48:31","guid":{"rendered":"https:\/\/matforge.org\/?p=1119","raw":"https:\/\/matforge.org\/?p=1119"},"modified":"2026-08-19T09:48:31","modified_gmt":"2026-08-19T09:48:31","slug":"modern-scientific-python-tooling-uv-ruff-type-checking","status":"publish","type":"post","link":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/","title":{"rendered":"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY","raw":"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 11<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li><strong>UV<\/strong> ist der Standard-Python-Paketmanager f\u00fcr wissenschaftliches Rechnen geworden \u2013 10- bis 100-mal schneller als PIP, mit deterministischen Lockfiles, die Forschungs-Workflows reproduzierbar machen.<\/li>\n<li><strong>Ruff<\/strong> Ersetzt Black, Isort, Flake8, Pyupgrade und Autoflake in einer einzigen rostbasierten Bin\u00e4rdatei. Scipy, Pandas und andere wichtige wissenschaftliche Bibliotheken verwenden es heute.<\/li>\n<li><strong>Ty<\/strong> (ver\u00f6ffentlicht Dezember 2025) ist 20- bis 100-mal schneller als MYPY und verwendet eine schrittweise Garantie, die nicht den nicht kommentierten Code bricht &#8211; ideal f\u00fcr die Migration von Forschungscodebasen.<\/li>\n<li><strong>pyproject.toml<\/strong> ist jetzt die einzige Konfigurationsquelle f\u00fcr die gesamte Toolchain und ersetzt verstreute Konfigurationsdateien wie <code>.flake8<\/code>, <code>.isort.cfg<\/code> und <code>mypy.ini<\/code>.<\/li>\n<li><strong> speziell f\u00fcr das wissenschaftliche Rechnen<\/strong>, Conda bleibt f\u00fcr Nicht-Python-Abh\u00e4ngigkeiten (MPI, CUDA, HDF5) erforderlich, und Pyright ist nach wie vor die sicherere CI-Wahl, bis TY Version 1.0 erreicht.<\/li>\n<\/ul>\n<p>Wenn Sie 2026 wissenschaftliche Python-Workflows ausf\u00fchren, hat sich Ihre Toolchain grundlegend ge\u00e4ndert. Die Pakete, die Sie f\u00fcr die Berechnung verwenden &#8211; Numpy, Scipy, Fipy und der Rest &#8211; sind identisch. Wie Sie sie installieren, verwalten, fusseln und \u00fcberpr\u00fcfen, unterscheidet sich jedoch von den meisten Tutorials, \u00e4lteren Anleitungen und Notebooks f\u00fcr das Universit\u00e4tslabor.<\/p>\n<p>Astral, das Unternehmen hinter Pythons beliebtester Linter (Ruff), hat drei Tools entwickelt, die jetzt den gesamten Entwickler-Workflow abdecken: <strong>UV<\/strong> f\u00fcr die Paketverwaltung, <strong>ruff<\/strong> f\u00fcr das Flinten und Formatieren und <strong>ty<\/strong> f\u00fcr den Typ \u00dcberpr\u00fcfung. Zusammen ersetzen sie PIP, VENV, BLACK, ISort, Flake8 und myPy. Das sind sechs Werkzeuge, die in drei zusammengefasst sind, alle aus einer einzigen <code>pyproject.toml<\/code>-Datei konfiguriert.<\/p>\n<p>Dieser Artikel behandelt die moderne wissenschaftliche Python-Toolchain im Jahr 2026. Er erkl\u00e4rt, was jedes Werkzeug tut, warum die Verschiebung stattgefunden hat und wie alles eingerichtet werden kann &#8211; einschlie\u00dflich der Macken und Einschr\u00e4nkungen, die f\u00fcr das wissenschaftliche Rechnen wichtig sind. Wenn Sie ein neues Simulationsprojekt einrichten, eine vorhandene Codebasis migrieren oder nach dem Leitfaden &#8222;Scientific Python Ecosystem&#8220; aufholen (siehe Artikel <a href=\"https:\/\/matforge.org\/scientific-python-ecosystem-navigating-scipy-numpy-sympy-2\/\"> # 364 <\/a>), dies ist das praktische Update, das Sie ben\u00f6tigen.<\/p>\n<h2>Die moderne Werkzeuglandschaft<\/h2>\n<p>Bis etwa 2024 sah der wissenschaftliche Python-Entwickler-Workflow folgenderma\u00dfen aus:<\/p>\n<ul>\n<li><strong>Paketmanagement<\/strong>: Pip mit Pip-Tools oder Poesie<\/li>\n<li><strong>Virtual Environments<\/strong>: Venv oder VirtualEv<\/li>\n<li><strong>Python-Versionsverwaltung<\/strong>: Pyenv oder Pyenv-VirtualEnv<\/li>\n<li><strong>Fusseln<\/strong>: Flake8, dann PydocStyle plus Pylint f\u00fcr Style-Checks<\/li>\n<li><strong>Formatierung<\/strong>: schwarz und isort (und sp\u00e4ter AutoPEP8 und Pyupgrade)<\/li>\n<li><strong>Typpr\u00fcfung<\/strong>: mypy<\/li>\n<\/ul>\n<p>Das bedeutete, sechs separate Python-Pakete zu installieren, separate Konfigurationsdateien zu verwalten und durch sequentielle Aufl\u00f6sungsschritte zu warten. Eine einfache <code>pip install<\/code> kann Minuten dauern. Schwarz laufen, dann isort, dann flocke8, dann k\u00f6nnte mypy noch l\u00e4nger dauern.<\/p>\n<p>Die Verschiebung begann, als Astral Ruff im Jahr 2023 ver\u00f6ffentlichte. Ruff wurde in Rust geschrieben, um Black, Isort, Flake8, Pyupgrade und Autoflake gleichzeitig zu ersetzen, und lief um Gr\u00f6\u00dfenordnungen schneller als die Python-basierten Alternativen. Dieser Adoptionserfolg gab Astral den Schwung, ein vollst\u00e4ndiges \u00d6kosystem aufzubauen: UV f\u00fcr das Paketmanagement und TY f\u00fcr die Typpr\u00fcfung.<\/p>\n<p>Ende 2025 und Anfang 2026 war die Konvergenz abgeschlossen. Der <a href=\"https:\/\/learn.scientific-python.org\/development\/guides\/security\/\" target=\"_blank\" rel=\"nofollow noopener\">Scientific Python-Entwicklungshandbuch<\/a> Jetzt offiziell Empfiehlt Ruff f\u00fcr Style-Checks und TY f\u00fcr die Typpr\u00fcfung. Scipy und Pandas haben Ruff adoptiert. UV hat die Poesie bei der Akzeptanz unter wissenschaftlichen Computerteams \u00fcberholt. Der alte Stapel ist nicht tot &#8211; er funktioniert immer noch -, ist aber nicht mehr der Standard f\u00fcr neue Projekte.<\/p>\n<h3>Warum pyproject.toml wichtig ist<\/h3>\n<p>Eine der gr\u00f6\u00dften praktischen \u00c4nderungen ist das Konfigurationsmodell. Der alte Stack verstreut die Konfiguration \u00fcber f\u00fcnf oder mehr Dateien:<\/p>\n<ul>\n<li><code>.flake8<\/code> f\u00fcr Fussregeln<\/li>\n<li><code>.isort.cfg<\/code> zur Importsortierung<\/li>\n<li><code>mypy.ini<\/code> f\u00fcr das Verhalten der Typpr\u00fcfung<\/li>\n<li><code>setup.cfg<\/code> f\u00fcr Paketmetadaten<\/li>\n<li><code>pyproject.toml<\/code> (teilweise f\u00fcr Build-Systeme)<\/li>\n<\/ul>\n<p>Modernes Tooling zentralisiert alles in <code>pyproject.toml<\/code>. Eine einzelne Datei definiert das Paket, die Abh\u00e4ngigkeiten, die Dev-Tools und die Werkzeugkonfiguration. Dies erleichtert das Teilen, Klonen und Pflegen von Projekten &#8211; genau das, was Forschungsteams ben\u00f6tigen, wenn sie Code ver\u00f6ffentlichen oder neue Studenten an Bord nehmen.<\/p>\n<h2>UV: Paketverwaltung, die tats\u00e4chlich funktioniert<\/h2>\n<p><code>uv<\/code> ist ein rostbasierter Paketmanager, der von Astral erstellt wurde. Es ersetzt PIP, PIP-Tools, PIPX, PYENV und VirtualEnv in einer einzigen schnellen Bin\u00e4rdatei. Im Gegensatz zu PIP erfordert <code>uv<\/code> nicht die Installation von Python. Es kann einen Python-Interpreter bootstrapen und Versionen neben Abh\u00e4ngigkeiten verwalten.<\/p>\n<h3>Warum Forscher wechseln<\/h3>\n<p>Die Hauptgr\u00fcnde, warum Forscher und Entwickler <code>uv<\/code> w\u00e4hlen:<\/p>\n<ol>\n<li><strong>Geschwindigkeit<\/strong>. <code>uv<\/code> Installiert Pakete 10 bis 100 Mal schneller als PIP, haupts\u00e4chlich durch parallele Aufl\u00f6sung und aggressives Caching. Dies ist in CI-Pipelines von Bedeutung, bei denen die Installationszeit direkt die Turnaround-Entwickler beeinflusst.<\/li>\n<li><strong>Sperrdateien<\/strong>. Eine einzelne <code>uv.lock<\/code> Datei zeichnet exakte aufgel\u00f6ste Versionen jeder Abh\u00e4ngigkeit auf, einschlie\u00dflich der Unterabh\u00e4ngigkeit. Durch das Festschreiben dieser Datei an Git wird Ihre Umgebung vollst\u00e4ndig reproduzierbar &#8211; eine Anforderung f\u00fcr ver\u00f6ffentlichte Simulationen.<\/li>\n<li><strong>Python-Versionsverwaltung<\/strong>. <code>uv<\/code> kann Python-Interpreter herunterladen und verwalten, sodass keine separaten Tools wie Pyenv erforderlich sind.<\/li>\n<li><strong>PIP-Kompatibilit\u00e4t<\/strong>. Befehle wie <code>uv pip install<\/code> arbeiten mit <code>requirements.txt<\/code>, was die Migration von bestehenden Projekten vereinfacht.<\/li>\n<\/ol>\n<h3>UV-Einrichtung<\/h3>\n<p>Der typische Workflow f\u00fcr ein neues wissenschaftliches Python-Projekt sieht folgenderma\u00dfen aus:<\/p>\n<pre><code class=\"language-bash\"># Install uv (curl pipe to sh, cross-platform)\ncurl -LsSf https:\/\/astral.sh\/uv\/install.sh | sh\n\n# Create a project with a specific Python version\nuv init my-simulation --python 3.11\ncd my-simulation\n\n# Add core scientific dependencies\nuv add numpy scipy matplotlib\n\n# Add domain-specific libraries\nuv add fipy mpmath\n\n# Add development tools\nuv add --group dev pytest ruff ty\n\n# Generate and commit a lockfile\nuv lock\ngit add pyproject.toml uv.lock\ngit commit -m \"Initial project with pinned dependencies\"\n<\/code><\/pre>\n<p><code>uv sync<\/code> wird aus dem Lockfile installiert, um deterministische Reproduktionen zu gew\u00e4hrleisten. Jeder, der das Repository klont und <code>uv sync<\/code> ausf\u00fchrt, erh\u00e4lt genau die gleichen aufgel\u00f6sten Versionen.<\/p>\n<h3>Die Bytecode-Kompilierungs-Quirk<\/h3>\n<p>Hier verh\u00e4lt sich <code>uv<\/code> anders als PIP und wissenschaftliche Rechnerteams haben unerwartete W\u00e4nde getroffen.<\/p>\n<p><code>uv<\/code> Verschiebt die Bytecode-Kompilierung auf den ersten Lauf. Wenn <code>uv<\/code> ein Paket installiert, speichert es den vorkompilierten Bytecode in einem Cache, kompiliert jedoch nicht jede Datei sofort. Dadurch werden <code>uv<\/code>-Installationen etwa 3- bis 4-mal schneller als PIP. Der erste Import einer Bibliothek (insbesondere numpy oder scipy) kann jedoch etwa 2,5-mal langsamer sein als eine von PIP installierte Kopie, da der Bytecode zum Importzeitpunkt kompiliert wird.<\/p>\n<p>F\u00fcr die interaktive Entwicklung ist diese Verlangsamung normalerweise nicht wahrnehmbar. F\u00fcr CI-Pipelines, HPC-Job-Skripts oder Produktionsserver, die bei jedem Lauf numpy oder scipy importieren, ist die Quirk wichtig. Der Fix ist einfach: F\u00fcgen Sie Ihrem Synchronisierungsbefehl <code>--compile-bytecode<\/code> hinzu.<\/p>\n<p><em>Kontext in der realen Welt: Das Datenteam von Plotly hat genau dieses Problem dokumentiert, nachdem es <code>uv<\/code> in der Produktion \u00fcbernommen wurde. Ihre Produktionsserver sahen merklich langsamere Importe von Numpy, bis sie die Flagge hinzugef\u00fcgt hatten. Die vollst\u00e4ndige technische Aufschl\u00fcsselung finden Sie im <a href=\"https:\/\/plotly.com\/blog\/uv-python-package-manager-quirks\/\" target=\"_blank\" rel=\"nofollow noopener\">Blogbeitrag von Plotly zu UV-Quirks<\/a>.<\/em><\/p>\n<h3>Das exklusive Indexverhalten<\/h3>\n<p><code>uv<\/code> behandelt die Eintr\u00e4ge <code>--extra-index-url<\/code> standardm\u00e4\u00dfig als exklusiv nach PEP 0708. Wenn ein Paket in Ihrem prim\u00e4ren Index vorhanden ist, wird <code>uv<\/code> niemals den zus\u00e4tzlichen Index daf\u00fcr \u00fcberpr\u00fcfen. Dies sch\u00fctzt vor Abh\u00e4ngigkeitsattacken \u2013 ein b\u00f6swilliger Akteur kann ein Paket, das auf einem bekannten Index gehostet wird, nicht durch einen kompromittierten Spiegel ersetzen. Es werden jedoch auch vorhandene <code>requirements.txt<\/code>-Pipelines durchbrochen, die von zus\u00e4tzlichen Indizes f\u00fcr Fallback-Pakete abh\u00e4ngen.<\/p>\n<p>Wenn Ihr Labor einen privaten Paketindex oder einen conda-kompatiblen Index verwendet, m\u00fcssen Sie den <code>index-strategy<\/code> explizit in <code>pyproject.toml<\/code> konfigurieren. Ohne diese Konfiguration kann <code>uv<\/code> die Pakete nicht aufl\u00f6sen, die auf dem zus\u00e4tzlichen Index zu finden ist.<\/p>\n<h3>Wenn UV nicht ausreicht<\/h3>\n<p><code>uv<\/code> verwaltet Python-Pakete und Python-Dolmetscher. Es werden keine Systemabh\u00e4ngigkeiten von Python-Systemen verwaltet: C- und C++-Bibliotheken, Fortran-Compiler, MPI, CUDA-Toolkits, HDF5-, FFTW- oder Grafikbibliotheken.<\/p>\n<p>F\u00fcr diese Abh\u00e4ngigkeiten bleibt Conda der Standard. Das empfohlene Muster ist die Verwendung von <code>uv<\/code> f\u00fcr Python-Pakete und Conda (oder Pixi) f\u00fcr Abh\u00e4ngigkeiten auf Systemebene. Viele wissenschaftliche Teams koppeln die beiden Werkzeuge &#8211; Conda f\u00fcr den Systemstack, <code>uv<\/code> f\u00fcr die Python-Ebene.<\/p>\n<p>Wenn es sich bei Ihrem Projekt um Nicht-Python-Abh\u00e4ngigkeiten wie MPI, CUDA oder HDF5 handelt, lesen Sie den zugeh\u00f6rigen Leitfaden zu <a href=\"https:\/\/matforge.org\/managing-dependencies-scientific-python-lockfiles-environments\/\" target=\"_blank\" rel=\"nofollow noopener\">Verwaltung von Abh\u00e4ngigkeiten in wissenschaftlichem Python <\/a>, das Conda, Lockfiles und wann jedes Tool verwendet werden soll.<\/p>\n<h2>Ruff: Der Linter, der sechs Werkzeuge ersetzt<\/h2>\n<p>Ruff ist ein rostbasierter Linter und Formatierer von Astral. Es ersetzt Schwarz (Formatierung), iSort (Import Sorting), Flake8 (Style Checks), Pyupgrade (Entfernung von Dead-Code) und Autoflake (nicht verwendete Variablenentfernung) in einer einzigen Bin\u00e4rdatei, die 10 bis 100 Mal schneller abl\u00e4uft als der kombinierte alte Stapel.<\/p>\n<p>Das macht es besonders attraktiv f\u00fcr das wissenschaftliche Rechnen, bei dem gro\u00dfe Codebasen mit gemischten Python-Versionen und Legacy-Modulen mit den traditionellen Tools einige Sekunden dauern k\u00f6nnen, bis sie sich verfeinern. Ruff macht es in Millisekunden.<\/p>\n<h3>Wissenschaftliche Bibliotheken verwenden bereits Ruff<\/h3>\n<p>Ruff ist nicht mehr nur ein Web-Framework-Linter. Wichtige wissenschaftliche Bibliotheken haben es \u00fcbernommen:<\/p>\n<ul>\n<li><strong>Scipy<\/strong> \u2013 Das Kernteam der numerischen Methodenbibliothek ist auf Ruff migriert.<\/li>\n<li><strong>Pandas<\/strong> \u2013 Verwendet Ruff zur Style-Durchsetzung in der gesamten Codebasis.<\/li>\n<li><strong>FastAPI<\/strong> und <strong>umarmendes Gesicht<\/strong> &#8211; beide verwenden Ruff als einzige Formatierer und Linter.<\/li>\n<\/ul>\n<p>Diese Adoption ist wichtig, da Ruff die kantigen F\u00e4lle von wissenschaftlichem Code behandelt &#8211; lange DocStrings, komplexe Typanmerkungen, \u00e4ltere Python-2-Importe &#8211; ohne dabei zu verlieren oder Formatierungsfehler einzuf\u00fchren. Die offizielle Ruff-Dokumentation listet alle drei Bibliotheken als Adopter auf. Die vollst\u00e4ndige Liste finden Sie in den <a href=\"https:\/\/astral.sh\/ruff\/\" target=\"_blank\" rel=\"nofollow noopener\"> offizielle Ruff-Dokumente <\/a>.<\/p>\n<h3>Konfiguration<\/h3>\n<p>Ruff konfiguriert vollst\u00e4ndig aus <code>pyproject.toml<\/code>:<\/p>\n<pre><code class=\"language-toml\">[tool.ruff]\nline-length = 88\ntarget-version = \"py311\"\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"I\", \"N\", \"W\", \"UP\", \"RUF\"]\nignore = [\"E501\"]\n\n[tool.ruff.format]\nquote-style = \"double\"\n<\/code><\/pre>\n<p>Das Array <code>select<\/code> gibt an, welche Regels\u00e4tze aktiviert werden sollen. <code>E<\/code> und <code>F<\/code> decken PEP 8-Fehler und Pyflakes-Pr\u00fcfungen ab. <code>I<\/code> behandelt die Importsortierung (Ersetzen von ISORT). <code>N<\/code> Erzwingt Namenskonventionen. <code>UP<\/code> f\u00fchrt eine Modernisierung im Pyupgrade-Stil aus. <code>RUF<\/code> F\u00fcgt Ruff-spezifische Regeln hinzu. Die Zeile <code>ignore<\/code> entfernt E501 (zu langer Linie), da Ruff die Zeilenl\u00e4nge an den Formatierer delegiert und so den Linter schnell h\u00e4lt.<\/p>\n<h3>Migration von Black + Isort + Flake8<\/h3>\n<p>Das Entfernen des alten Stapels ist unkompliziert. Nach der Installation von Ruff k\u00f6nnen Sie die Befehle ersetzen:<\/p>\n<pre><code class=\"language-bash\"># OLD stack\nblack .\nisort .\nflake8 .\npyupgrade --py38 src\/\n\n# NEW stack\nruff check .\nruff format .\n<\/code><\/pre>\n<p><code>ruff check<\/code> behandelt alle Stilpr\u00fcfungen. <code>ruff format<\/code> behandelt alle Formatierungen. Das sind zwei statt vier Befehle, die eine Bin\u00e4rdatei statt vier separate ausf\u00fchren.<\/p>\n<p>Der wissenschaftliche Python-Entwicklungsleitfaden empfiehlt ausdr\u00fccklich, f\u00fcr Stilpr\u00fcfungen von Flake8 zu Ruff zu migrieren. Die offizielle Empfehlung finden Sie in <a href=\"https:\/\/learn.scientific-python.org\/development\/guides\/security\/\" target=\"_blank\" rel=\"nofollow noopener\"> ihren Sicherheits- und Entwicklungshandbuch <\/a>.<\/p>\n<h2>Ty: Typenkontrolle ohne Schmerzen<\/h2>\n<p><code>ty<\/code> ist der im Dezember 2025 ver\u00f6ffentlichte Typ-Checker der n\u00e4chsten Generation von Astral. Es ersetzt myPy als empfohlenen statischen Typpr\u00fcfer im Astral-\u00d6kosystem. Es ist in Rost geschrieben und so konzipiert, dass es schnell, strikt und mit nicht kommentiertem Code kompatibel ist.<\/p>\n<h3>Der Geschwindigkeitsgewinn<\/h3>\n<p>Der dramatischste Vorteil von Ty ist die Geschwindigkeit. In einem realen Benchmark eines Benutzers, der auf einer tats\u00e4chlichen wissenschaftlichen Python-Codebasis von mypy zu TY migriert ist, hat mypy <strong> 46 Sekunden&lt;<\/strong> gedauert, und TY hat den gleichen Check in <strong>2,19 Sekunden<\/strong> durchgef\u00fchrt &#8211; ungef\u00e4hr 20 Mal schneller. Siehe den vollst\u00e4ndigen Benchmark in <a href=\"https:\/\/blog.stackademic.com\/i-switched-from-mypy-to-ty-and-my-ci-type-checks-went-from-46-seconds-to-2-9a8cb1b11170\" target=\"_blank\" rel=\"nofollow noopener\"> der stackademische Migrationspost <\/a>.<\/p>\n<p>Dies ist wichtig, da die Typpr\u00fcfung h\u00e4ufig der l\u00e4ngste CI-Schritt in einem Python-Workflow ist. Wenn Sie 46 Sekunden auf 2,2 Sekunden verk\u00fcrzen, verk\u00fcrzen Sie die CI-Warteschlangenzeiten, k\u00f6nnen Entwickler schneller Feedback erhalten und eine vollst\u00e4ndige Typpr\u00fcfung in Zweigen erm\u00f6glichen, in denen selbst langsame Typenpr\u00fcfer \u00fcbersprungen worden w\u00e4ren.<\/p>\n<h3>Die schrittweise Garantie<\/h3>\n<p>Im Gegensatz zu myPy implementiert TY eine <strong>graduale Garantie<\/strong>: Es werden keine Fehler bei Code angezeigt, der keine Anmerkungen enth\u00e4lt. Wenn ein Modul <code>def calculate(x, y): return x + y<\/code> ohne Typhinweise enth\u00e4lt, behandelt TY es als untypisiert und beschwert sich nicht \u00fcber fehlende Anmerkungen. Dies ist ideal f\u00fcr die Migration von wissenschaftlichen Codebasen mit teilweise getippten Modulen &#8211; ein h\u00e4ufiges Muster im Forschungscode, bei dem die Kernsimulations-Engine getippt wird, Helfer-Skripte und -Notebooks jedoch nicht.<\/p>\n<p><a href=\"https:\/\/pydevtools.com\/handbook\/topics\/ty\/\" target=\"_blank\" rel=\"nofollow noopener\">Das offizielle TY-Handbuch <\/a> erl\u00e4utert die schrittweise Garantie im Detail. Der entscheidende Punkt ist, dass das Hinzuf\u00fcgen von Typannotationen zu einem Modul nicht dazu f\u00fchrt, dass TY Fehler in diesem Modul meldet &#8211; es meldet nur Fehler in bereits getipptem Code. mypy macht das Gegenteil: Es meldet Fehler bei jeder nicht kommentierten Funktion, auf die es trifft, die vorhandene Codebasen bricht, die keine vollst\u00e4ndigen Anmerkungen haben.<\/p>\n<h3>Spezifikationskonformit\u00e4t: Der Kompromiss<\/h3>\n<p>Hier ist der Kompromiss, den Sie verstehen m\u00fcssen, bevor Sie TY in CI setzen.<\/p>\n<p>Laut <a href=\"https:\/\/www.resumelens.org\/blog\/python\/python-type-checkers-compared\" target=\"_blank\" rel=\"nofollow noopener\">einem umfassenden Vergleich von MyPy, Pyright, Ty und Pyre<\/a> liegt die Python-Typisierungsspezifikation von Ty bei ca. <strong>53 Prozent<\/strong>, w\u00e4hrend Pyright etwa <strong>98 Prozent<\/strong> erreicht und mypy erreicht ungef\u00e4hr <strong>58 Prozent<\/strong>. Dies bedeutet, dass TY nur die H\u00e4lfte der Typisierungsspezifikationen abdeckt, und es kann Randf\u00e4lle \u00fcbersehen, die Pyright erfasst.<\/p>\n<p>Bis Ty Version 1.0 erreicht, ist die empfohlene CI-Strategie ein zweischichtiger Ansatz:<\/p>\n<ol>\n<li><strong>Lokale Entwicklung<\/strong>: Verwenden Sie TY f\u00fcr schnelles Feedback (2-Sekunden-Checks).<\/li>\n<li><strong>CI-Pipelines<\/strong>: Verwenden Sie PyRight f\u00fcr die vollst\u00e4ndige Spezifikationsabdeckung (f\u00e4ngt ty Misses).<\/li>\n<\/ol>\n<p>Dies gibt Ihnen sowohl Geschwindigkeit als auch Richtigkeit. Sobald Ty 1,0 erreicht und seine Spezifikationskonformit\u00e4t verbessert wird, k\u00f6nnen Sie sich f\u00fcr CI auf TY verlassen.<\/p>\n<h3>Konfiguration<\/h3>\n<p>Ty konfiguriert ab <code>pyproject.toml<\/code>:<\/p>\n<pre><code class=\"language-toml\">[tool.typer]\npython-version = \"3.11\"\nstrict = true\n<\/code><\/pre>\n<p>Das Flag <code>strict<\/code> aktiviert alle strengen Moduspr\u00fcfungen (implizite Spalte, no-untyped-def usw.). Die vollst\u00e4ndige Konfigurationsreferenz finden Sie in <a href=\"https:\/\/pydevtools.com\/handbook\/topics\/ty\/\" target=\"_blank\" rel=\"nofollow noopener\">das TY-Handbuch<\/a>.<\/p>\n<h2>Migrationshandbuch: Vom alten Stack zum neuen<\/h2>\n<p>Hier der praktische Vorher-Nachher-Vergleich. Wenn Sie derzeit PIP, VENV, BLACK, ISort, Flake8 und MYPY verwenden, zeigt diese Tabelle genau, was jedes Werkzeug ersetzt.<\/p>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Aufgabe<\/th>\n<th>Alter Stapel (2023 und fr\u00fcher)<\/th>\n<th>Moderner Stapel (2025-2026)<\/th>\n<th>Notizen<\/th>\n<\/tr>\n<tr>\n<td>Paketmanager<\/td>\n<td>Pip<\/td>\n<td>UV<\/td>\n<td>10-100 \u00d7 schnellere Installationen, Lockfiles enthalten<\/td>\n<\/tr>\n<tr>\n<td>Virtuelle Umgebungen<\/td>\n<td>Venv \/ virtualenv<\/td>\n<td>In UV eingebaut<\/td>\n<td>UV verwaltet Venvs automatisch<\/td>\n<\/tr>\n<tr>\n<td>Python-Versionsverwaltung<\/td>\n<td>pyenv \/ pyenv-virtualenv<\/td>\n<td>In UV eingebaut<\/td>\n<td>UV-Downloads Dolmetscher auf Anfrage<\/td>\n<\/tr>\n<tr>\n<td>Stilfusse<\/td>\n<td>Flake8, pydocstyle<\/td>\n<td>Halskrause<\/td>\n<td>Ruff ersetzt beide in einer Bin\u00e4rdatei<\/td>\n<\/tr>\n<tr>\n<td>Formatierung<\/td>\n<td>Schwarz<\/td>\n<td>Ruff (Ruff-Format)<\/td>\n<td>Gleiche Ausgabe wie Schwarz in den meisten F\u00e4llen<\/td>\n<\/tr>\n<tr>\n<td>Sortierung importieren<\/td>\n<td>iSort<\/td>\n<td>Ruff (Ruff-Check &#8211;fix)<\/td>\n<td>In Ruffs Fusselregeln eingebaut<\/td>\n<\/tr>\n<tr>\n<td>Typpr\u00fcfung<\/td>\n<td>mypy<\/td>\n<td>Ty (lokal), Pyright (CI)<\/td>\n<td>Ty ist 20 \u00d7 schneller; Pyright f\u00e4ngt Ty Misses<\/td>\n<\/tr>\n<tr>\n<td>Konfiguration<\/td>\n<td>5+ verstreute Konfigurationsdateien<\/td>\n<td>single pyproject.toml<\/td>\n<td>Alle Tools aus einer Datei gelesen<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Schritt-f\u00fcr-Schritt-Migration<\/h3>\n<p>Hier ist der konkrete Migrationspfad f\u00fcr ein bestehendes Projekt:<\/p>\n<pre><code class=\"language-bash\"># 1. Install uv and Ruff\nuv pip install uv ruff\n\n# 2. Create pyproject.toml (replacing setup.cfg)\ncat &gt;&gt; pyproject.toml &lt;&lt;EOF\n[build-system]\nrequires = [\"setuptools\"]\nbuild-backend = \"setuptools.backends._deprecated\"\n\n[project]\nname = \"my-simulation\"\nversion = \"0.1.0\"\ndependencies = [\n    \"numpy\",\n    \"scipy\",\n    \"fipy\",\n]\nEOF\n\n# 3. Add Ruff config\ncat &gt;&gt; pyproject.toml &lt;&lt;EOF\n\n[tool.ruff]\nline-length = 88\ntarget-version = \"py311\"\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"I\", \"N\", \"W\", \"UP\"]\nignore = [\"E501\"]\nEOF\n\n# 4. Add ty config\ncat &gt;&gt; pyproject.toml &lt;&lt;EOF\n\n[tool.typer]\npython-version = \"3.11\"\nstrict = true\nEOF\n\n# 5. Run uv sync to manage dependencies\nuv sync\n\n# 6. Run Ruff to check and format existing code\nruff check .\nruff format .\n\n# 7. Run ty locally for fast type feedback\nty check .\n<\/code><\/pre>\n<p>Dieser Pfad funktioniert, weil die Ausgabe von Ruff nahezu identisch mit dem Formatierungsstil von Schwarz ist, sodass der formatierte Code bekannt ist. Die allm\u00e4hliche Garantie von TY bedeutet, dass w\u00e4hrend der Migration keine nicht kommentierten Module gebrochen werden. Sie k\u00f6nnen Typanmerkungen inkrementell hinzuf\u00fcgen, ohne bef\u00fcrchten Sie, dass Ty-Oberfl\u00e4chenfehler auf dem Code, den Sie noch nicht eingegeben haben, eingegeben werden.<\/p>\n<p>Wenn Ihr Projekt auf <code>requirements.txt<\/code> angewiesen ist, beachten Sie, dass <code>uv<\/code> \u00fcber <code>uv pip install -r requirements.txt<\/code> installiert werden kann. Generieren Sie jedoch f\u00fcr eine langfristige Reproduzierbarkeit eine <code>uv.lock<\/code>-Datei und wechseln Sie von <code>requirements.txt<\/code>. Weitere Informationen zu Lockfiles und Reproduzierbarkeit finden Sie im zugeh\u00f6rigen Handbuch zu <a href=\"https:\/\/matforge.org\/managing-dependencies-scientific-python-lockfiles-environments\/\" target=\"_blank\" rel=\"nofollow noopener\">Abh\u00e4ngigkeiten in wissenschaftlichen Python verwalten<\/a>.<\/p>\n<h2>Was wir empfehlen: ein Entscheidungsrahmen<\/h2>\n<p>Nicht jedes Team sollte alle drei Werkzeuge gleichzeitig \u00fcbernehmen. Der richtige Stapel h\u00e4ngt von den Anforderungen Ihres Projekts ab. Verwenden Sie diesen Entscheidungsrahmen, um Folgendes zu w\u00e4hlen:<\/p>\n<ol>\n<li><strong>Ben\u00f6tigen Sie keine Python-Abh\u00e4ngigkeiten?<\/strong> (MPI, CUDA, HDF5, C++-Bibliotheken, Fortran-Compiler)\n<ul>\n<li><strong>Ja<\/strong>: Verwenden Sie Conda f\u00fcr diese Abh\u00e4ngigkeiten. Sie k\u00f6nnen neben Conda weiterhin <code>uv<\/code> f\u00fcr die Python-Pakete verwenden.<\/li>\n<li><strong>Nein<\/strong>: Fahren Sie mit der n\u00e4chsten Frage fort.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Publieren Sie ein Python-Paket f\u00fcr Pypi?<\/strong>\n<ul>\n<li><strong>Ja<\/strong>: Erw\u00e4gen Sie Gedichte f\u00fcr ausgereifte Ver\u00f6ffentlichungsworkflows oder <code>uv<\/code> f\u00fcr schnellere Installationen w\u00e4hrend der Entwicklung. Beide unterst\u00fctzen Pypi Publishing.<\/li>\n<li><strong>Nein<\/strong>: <code>uv<\/code> ist die Standardauswahl f\u00fcr neue Forschungsprojekte.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Arbeiten Sie in CI\/CD-Pipelines, wo die Installationszeit wichtig ist?<\/strong>\n<ul>\n<li><strong>Ja<\/strong>: Verwenden Sie <code>uv<\/code>. Die Geschwindigkeitsgewinne (10-100 \u00d7 \u00fcber PIP) verk\u00fcrzen die CI-Warteschlangenzeiten direkt.<\/li>\n<li><strong>Nein<\/strong>: Entweder <code>uv<\/code> oder Gedichte k\u00f6nnen je nach Teamkenntnis funktionieren.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Wie wichtig ist die vollst\u00e4ndige Abdeckung der Typpr\u00fcfung in CI? <\/strong>\n<ul>\n<li> <strong> hoch <\/strong>: Verwenden Sie Pyright f\u00fcr CI, TY f\u00fcr die lokale Entwicklung. Dies gibt Ihnen sowohl Geschwindigkeit als auch Richtigkeit. <\/li>\n<li> <strong> low <\/strong>: Ty allein reicht f\u00fcr die meisten Forschungscodebasen aus. <\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>F\u00fcr die meisten neuen Forschungsprojekte ist der empfohlene Stack:<\/p>\n<ul>\n<li><strong>UV<\/strong> f\u00fcr Paketverwaltung und Lockfiles<\/li>\n<li><strong>Ruff<\/strong> zum Fusseln und Formatieren<\/li>\n<li><strong>Ty<\/strong> f\u00fcr die lokale Typpr\u00fcfung (schnelles Feedback)<\/li>\n<li><strong>Pyright<\/strong> zur CI-Typpr\u00fcfung (vollst\u00e4ndige Spezifikationsabdeckung)<\/li>\n<\/ul>\n<p>Diese Kombination gibt Ihnen Geschwindigkeit, Korrektheit und Reproduzierbarkeit &#8211; die drei S\u00e4ulen der Forschungssoftwarequalit\u00e4t.<\/p>\n<h2>Einschr\u00e4nkungen: Wann bleiben Sie bei den alten Werkzeugen?<\/h2>\n<p>Der moderne Stapel ist leistungsstark, aber kein universeller Ersatz. Hier sollten Sie die alten Werkzeuge behalten:<\/p>\n<h3>Conda f\u00fcr Nicht-Python-Abh\u00e4ngigkeiten<\/h3>\n<p>UV verwaltet Python-Pakete und Python-Dolmetscher. Es verarbeitet keine kompilierten C-Bibliotheken, Fortran-Compiler, MPI-, CUDA-Toolkits, HDF5-, FFTW- oder Grafikbibliotheken. F\u00fcr diese bleibt Conda (oder Pixi) der Standard f\u00fcr das wissenschaftliche Rechnen. Viele Teams verwenden Conda f\u00fcr Systemabh\u00e4ngigkeiten und <code>uv<\/code> f\u00fcr Python-Pakete in derselben Umgebung.<\/p>\n<h3>mypy f\u00fcr die vollst\u00e4ndige Spezifikationsabdeckung<\/h3>\n<p>Bis Ty Version 1.0 erreicht und seine Spezifikations-Konformit\u00e4tsl\u00fccke schlie\u00dft, ist MyPy oder Pyright die sicherere Wahl f\u00fcr CI-Umgebungen, die eine vollst\u00e4ndige Typpr\u00fcfung ben\u00f6tigen. Verwenden Sie ty f\u00fcr die lokale Entwicklung, bei der Geschwindigkeit wichtig ist, und Pyright (oder mypy) f\u00fcr CI, wenn die Richtigkeit wichtig ist.<\/p>\n<h3>Poesie f\u00fcr Pypi Publishing<\/h3>\n<p>Wenn Sie wissenschaftliche Python-Pakete in Pypi ver\u00f6ffentlichen, verf\u00fcgt Poetry immer noch \u00fcber ausgereifte Ver\u00f6ffentlichungsworkflows, Abh\u00e4ngigkeitsgruppen und eine gut dokumentierte Build-Pipeline. <code>uv<\/code> unterst\u00fctzt Pypi-Publishing, aber seine Workflows sind neuer und weniger dokumentiert als die Poesie. Wenn Ihr Team etablierte Dokumentationen und lange Produktionsbilanzen sch\u00e4tzt, ist Poesie m\u00f6glicherweise immer noch die bessere Wahl f\u00fcr die Ver\u00f6ffentlichungsseite Ihres Workflows.<\/p>\n<h2>Zusammenfassung und n\u00e4chste Schritte<\/h2>\n<p>Die wissenschaftliche Python-Toolchain ist gereift. Der rostgetriebene Stapel &#8211; UV, Ruff und TY &#8211; ersetzt die alten fragmentierten Werkzeuge durch etwas schnelleres, einfacheres und besser integriertes. Hier sind die Imbisser:<\/p>\n<ol>\n<li><strong>UV<\/strong> ist der Standard-Paketmanager f\u00fcr neue Projekte. Verwenden Sie <code>--compile-bytecode<\/code> auf Servern und CI-Pipelines. Verwenden Sie daneben Conda f\u00fcr Nicht-Python-Abh\u00e4ngigkeiten.<\/li>\n<li><strong>RUFF<\/strong> ersetzt Black, iSort, Flake8, Pyupgrade und Autoflake. Scipy und Pandas verwenden es bereits. Konfigurieren Sie alles aus <code>pyproject.toml<\/code>.<\/li>\n<li><strong>Ty<\/strong> ist der schnellste verf\u00fcgbare Typ Checker \u2013 20 mal schneller als myPy. Verwenden Sie es lokal. Verwenden Sie Pyright f\u00fcr CI, bis Ty 1,0 erreicht.<\/li>\n<li><strong>pyproject.toml<\/strong> ist die einzige Konfigurationsquelle. Alle drei Werkzeuge lesen daraus. Keine verstreuten Konfigurationsdateien mehr.<\/li>\n<\/ol>\n<p>Wenn Sie ein neues Simulationsprojekt starten, \u00fcbernehmen Sie vom ersten Tag an den modernen Stapel. Wenn Sie ein vorhandenes Projekt migrieren, folgen Sie dem Schritt-f\u00fcr-Schritt-Pfad oben \u2013 die Formatierungsausgabe von Ruff ist nahezu identisch mit der von Black, und die schrittweise Garantie von TY bedeutet, dass Sie den vorhandenen Code w\u00e4hrend des \u00dcbergangs nicht brechen.<\/p>\n<p>Weitere Informationen zum wissenschaftlichen Python-Bibliotheksstapel finden Sie im <a href=\"https:\/\/matforge.org\/scientific-python-ecosystem-navigating-scipy-numpy-sympy-2\/\" target=\"_blank\" rel=\"nofollow noopener\">Scientific Python Ecosystem Guide<\/a>, der numpy, scipy, sympy, matplotlib abdeckt, Jupyter und Scikit-Learn. Eine tiefere Abdeckung des Abh\u00e4ngigkeitsmanagements und der Lockfiles finden Sie in der Anleitung <a href=\"https:\/\/matforge.org\/managing-dependencies-scientific-python-lockfiles-environments\/\" target=\"_blank\" rel=\"nofollow noopener\">Verwalten von Abh\u00e4ngigkeiten in der wissenschaftlichen Python<\/a>-Anleitung. Lesen Sie die Best Practices f\u00fcr die Wartung, die gut mit der modernen Toolchain \u00fcbereinstimmen, die <a href=\"https:\/\/matforge.org\/best-practices-for-maintaining-scientific-code\/\" target=\"_blank\" rel=\"nofollow noopener\">Best Practices f\u00fcr die Aufrechterhaltung des wissenschaftlichen Codes<\/a>.<\/p>\n<p>Das wissenschaftliche Python-\u00d6kosystem geht nirgendwo hin. Die Art und Weise, wie Sie damit arbeiten, hat sich ge\u00e4ndert, und die \u00dcbernahme des modernen Stacks bietet Ihnen schnellere Builds, eine einfachere Konfiguration und eine bessere Reproduzierbarkeit &#8211; alles ohne die Bibliotheken zu \u00e4ndern, die Sie f\u00fcr die Berechnung verwenden.<\/p>\n<p><!-- Referenzen und Weiterlesen --><\/p>\n<h2>Referenzen und Weiterlesen<\/h2>\n<ul>\n<li><a href=\"https:\/\/astral.sh\/ruff\/\" target=\"_blank\" rel=\"nofollow noopener\"> Ruff-Dokumentation <\/a> &#8211; Offizielle Anleitung f\u00fcr den rostbasierten Linter und Formatierer.<\/li>\n<li><a href=\"https:\/\/github.com\/astral-sh\/uv\" target=\"_blank\" rel=\"nofollow noopener\"> UV-GitHub-Repository <\/a> &#8211; Offizieller Quellcode und Feature-Dokumentation.<\/li>\n<li><a href=\"https:\/\/medium.com\/fhinkel\/python-packaging-in-2025-introducing-uv-a-speedy-new-contender-cbf408726687\" target=\"_blank\" rel=\"nofollow noopener\">Python-Verpackung im Jahr 2025: Einf\u00fchrung in UV<\/a> \u2014 Franziska Hinkelmanns technischer \u00dcberblick \u00fcber das Design und die Philosophie von UV.<\/li>\n<li><a href=\"https:\/\/plotly.com\/blog\/uv-python-package-manager-quirks\/\" target=\"_blank\" rel=\"nofollow noopener\"> UV-Python-Paketmanager: Macken und Lessons <\/a> &#8211; Plelys reale Adoptionserfahrung mit UV.<\/li>\n<li><a href=\"https:\/\/www.kdnuggets.com\/python-project-setup-2026-uv-ruff-ty-polars\" target=\"_blank\" rel=\"nofollow noopener\">Python-Projekt-Setup 2026: UV, Ruff, TY, Polars <\/a> &#8211; Schritt-f\u00fcr-Schritt-Einrichtungshandbuch f\u00fcr den modernen Stapel.<\/li>\n<li><a href=\"https:\/\/pydevtools.com\/handbook\/topics\/ty\/\" target=\"_blank\" rel=\"nofollow noopener\">TY-Handbuch<\/a> \u2014 Offizielles Handbuch zur Leistungsf\u00e4higkeit von TY, schrittweise Garantie und VS-Code-Integration.<\/li>\n<li><a href=\"https:\/\/www.resumelens.org\/blog\/python\/python-type-checkers-compared\" target=\"_blank\" rel=\"nofollow noopener\">Python-Typ-Checker im Vergleich<\/a> \u2014 umfassend Vergleich von myPy, Pyright, Ty und Pyre mit Spezifikationskonformit\u00e4tsdaten.<\/li>\n<li><a. href=\"https:\/\/blog.stackademic.com\/i-switched-from-mypy-to-ty-and-my-ci-type-checks-went-from-46-seconds-to-2-9a8cb1b11170\" target=\"_blank\" rel=\"nofollow noopener\"> Ich habe von mypy zu ty (46s \u2192 2.19s)  gewechselt &#8211; &#8211; realer Typ-Checking-Benchmark auf einer wissenschaftlichen Python-Codebasis.<\/a.><\/li>\n<li><a href=\"https:\/\/learn.scientific-python.org\/development\/guides\/security\/\" target=\"_blank\" rel=\"nofollow noopener\">Wissenschaftliches Python-Entwicklungshandbuch<\/a> \u2014 Offizielle Community Empfehlungen f\u00fcr Ruff und Ty.<\/li>\n<\/ul>\n","protected":false,"raw":"<h2>Schl\u00fcssel zum Mitnehmen<\/h2>\n<ul>\n<li><strong>UV<\/strong> ist der Standard-Python-Paketmanager f\u00fcr wissenschaftliches Rechnen geworden \u2013 10- bis 100-mal schneller als PIP, mit deterministischen Lockfiles, die Forschungs-Workflows reproduzierbar machen.<\/li>\n<li><strong>Ruff<\/strong> Ersetzt Black, Isort, Flake8, Pyupgrade und Autoflake in einer einzigen rostbasierten Bin\u00e4rdatei. Scipy, Pandas und andere wichtige wissenschaftliche Bibliotheken verwenden es heute.<\/li>\n<li><strong>Ty<\/strong> (ver\u00f6ffentlicht Dezember 2025) ist 20- bis 100-mal schneller als MYPY und verwendet eine schrittweise Garantie, die nicht den nicht kommentierten Code bricht - ideal f\u00fcr die Migration von Forschungscodebasen.<\/li>\n<li><strong>pyproject.toml<\/strong> ist jetzt die einzige Konfigurationsquelle f\u00fcr die gesamte Toolchain und ersetzt verstreute Konfigurationsdateien wie <code>.flake8<\/code>, <code>.isort.cfg<\/code> und <code>mypy.ini<\/code>.<\/li>\n<li><strong> speziell f\u00fcr das wissenschaftliche Rechnen<\/strong>, Conda bleibt f\u00fcr Nicht-Python-Abh\u00e4ngigkeiten (MPI, CUDA, HDF5) erforderlich, und Pyright ist nach wie vor die sicherere CI-Wahl, bis TY Version 1.0 erreicht.<\/li>\n<\/ul>\n<p>Wenn Sie 2026 wissenschaftliche Python-Workflows ausf\u00fchren, hat sich Ihre Toolchain grundlegend ge\u00e4ndert. Die Pakete, die Sie f\u00fcr die Berechnung verwenden - Numpy, Scipy, Fipy und der Rest - sind identisch. Wie Sie sie installieren, verwalten, fusseln und \u00fcberpr\u00fcfen, unterscheidet sich jedoch von den meisten Tutorials, \u00e4lteren Anleitungen und Notebooks f\u00fcr das Universit\u00e4tslabor.<\/p>\n<p>Astral, das Unternehmen hinter Pythons beliebtester Linter (Ruff), hat drei Tools entwickelt, die jetzt den gesamten Entwickler-Workflow abdecken: <strong>UV<\/strong> f\u00fcr die Paketverwaltung, <strong>ruff<\/strong> f\u00fcr das Flinten und Formatieren und <strong>ty<\/strong> f\u00fcr den Typ \u00dcberpr\u00fcfung. Zusammen ersetzen sie PIP, VENV, BLACK, ISort, Flake8 und myPy. Das sind sechs Werkzeuge, die in drei zusammengefasst sind, alle aus einer einzigen <code>pyproject.toml<\/code>-Datei konfiguriert.<\/p>\n<p>Dieser Artikel behandelt die moderne wissenschaftliche Python-Toolchain im Jahr 2026. Er erkl\u00e4rt, was jedes Werkzeug tut, warum die Verschiebung stattgefunden hat und wie alles eingerichtet werden kann - einschlie\u00dflich der Macken und Einschr\u00e4nkungen, die f\u00fcr das wissenschaftliche Rechnen wichtig sind. Wenn Sie ein neues Simulationsprojekt einrichten, eine vorhandene Codebasis migrieren oder nach dem Leitfaden \"Scientific Python Ecosystem\" aufholen (siehe Artikel <a href=\"https:\/\/matforge.org\/scientific-python-ecosystem-navigating-scipy-numpy-sympy-2\/\"> # 364 <\/a>), dies ist das praktische Update, das Sie ben\u00f6tigen.<\/p>\n<h2>Die moderne Werkzeuglandschaft<\/h2>\n<p>Bis etwa 2024 sah der wissenschaftliche Python-Entwickler-Workflow folgenderma\u00dfen aus:<\/p>\n<ul>\n<li><strong>Paketmanagement<\/strong>: Pip mit Pip-Tools oder Poesie<\/li>\n<li><strong>Virtual Environments<\/strong>: Venv oder VirtualEv<\/li>\n<li><strong>Python-Versionsverwaltung<\/strong>: Pyenv oder Pyenv-VirtualEnv<\/li>\n<li><strong>Fusseln<\/strong>: Flake8, dann PydocStyle plus Pylint f\u00fcr Style-Checks<\/li>\n<li><strong>Formatierung<\/strong>: schwarz und isort (und sp\u00e4ter AutoPEP8 und Pyupgrade)<\/li>\n<li><strong>Typpr\u00fcfung<\/strong>: mypy<\/li>\n<\/ul>\n<p>Das bedeutete, sechs separate Python-Pakete zu installieren, separate Konfigurationsdateien zu verwalten und durch sequentielle Aufl\u00f6sungsschritte zu warten. Eine einfache <code>pip install<\/code> kann Minuten dauern. Schwarz laufen, dann isort, dann flocke8, dann k\u00f6nnte mypy noch l\u00e4nger dauern.<\/p>\n<p>Die Verschiebung begann, als Astral Ruff im Jahr 2023 ver\u00f6ffentlichte. Ruff wurde in Rust geschrieben, um Black, Isort, Flake8, Pyupgrade und Autoflake gleichzeitig zu ersetzen, und lief um Gr\u00f6\u00dfenordnungen schneller als die Python-basierten Alternativen. Dieser Adoptionserfolg gab Astral den Schwung, ein vollst\u00e4ndiges \u00d6kosystem aufzubauen: UV f\u00fcr das Paketmanagement und TY f\u00fcr die Typpr\u00fcfung.<\/p>\n<p>Ende 2025 und Anfang 2026 war die Konvergenz abgeschlossen. Der <a href=\"https:\/\/learn.scientific-python.org\/development\/guides\/security\/\" target=\"_blank\" rel=\"nofollow noopener\">Scientific Python-Entwicklungshandbuch<\/a> Jetzt offiziell Empfiehlt Ruff f\u00fcr Style-Checks und TY f\u00fcr die Typpr\u00fcfung. Scipy und Pandas haben Ruff adoptiert. UV hat die Poesie bei der Akzeptanz unter wissenschaftlichen Computerteams \u00fcberholt. Der alte Stapel ist nicht tot - er funktioniert immer noch -, ist aber nicht mehr der Standard f\u00fcr neue Projekte.<\/p>\n<h3>Warum pyproject.toml wichtig ist<\/h3>\n<p>Eine der gr\u00f6\u00dften praktischen \u00c4nderungen ist das Konfigurationsmodell. Der alte Stack verstreut die Konfiguration \u00fcber f\u00fcnf oder mehr Dateien:<\/p>\n<ul>\n<li><code>.flake8<\/code> f\u00fcr Fussregeln<\/li>\n<li><code>.isort.cfg<\/code> zur Importsortierung<\/li>\n<li><code>mypy.ini<\/code> f\u00fcr das Verhalten der Typpr\u00fcfung<\/li>\n<li><code>setup.cfg<\/code> f\u00fcr Paketmetadaten<\/li>\n<li><code>pyproject.toml<\/code> (teilweise f\u00fcr Build-Systeme)<\/li>\n<\/ul>\n<p>Modernes Tooling zentralisiert alles in <code>pyproject.toml<\/code>. Eine einzelne Datei definiert das Paket, die Abh\u00e4ngigkeiten, die Dev-Tools und die Werkzeugkonfiguration. Dies erleichtert das Teilen, Klonen und Pflegen von Projekten - genau das, was Forschungsteams ben\u00f6tigen, wenn sie Code ver\u00f6ffentlichen oder neue Studenten an Bord nehmen.<\/p>\n<h2>UV: Paketverwaltung, die tats\u00e4chlich funktioniert<\/h2>\n<p><code>uv<\/code> ist ein rostbasierter Paketmanager, der von Astral erstellt wurde. Es ersetzt PIP, PIP-Tools, PIPX, PYENV und VirtualEnv in einer einzigen schnellen Bin\u00e4rdatei. Im Gegensatz zu PIP erfordert <code>uv<\/code> nicht die Installation von Python. Es kann einen Python-Interpreter bootstrapen und Versionen neben Abh\u00e4ngigkeiten verwalten.<\/p>\n<h3>Warum Forscher wechseln<\/h3>\n<p>Die Hauptgr\u00fcnde, warum Forscher und Entwickler <code>uv<\/code> w\u00e4hlen:<\/p>\n<ol>\n<li><strong>Geschwindigkeit<\/strong>. <code>uv<\/code> Installiert Pakete 10 bis 100 Mal schneller als PIP, haupts\u00e4chlich durch parallele Aufl\u00f6sung und aggressives Caching. Dies ist in CI-Pipelines von Bedeutung, bei denen die Installationszeit direkt die Turnaround-Entwickler beeinflusst.<\/li>\n<li><strong>Sperrdateien<\/strong>. Eine einzelne <code>uv.lock<\/code> Datei zeichnet exakte aufgel\u00f6ste Versionen jeder Abh\u00e4ngigkeit auf, einschlie\u00dflich der Unterabh\u00e4ngigkeit. Durch das Festschreiben dieser Datei an Git wird Ihre Umgebung vollst\u00e4ndig reproduzierbar - eine Anforderung f\u00fcr ver\u00f6ffentlichte Simulationen.<\/li>\n<li><strong>Python-Versionsverwaltung<\/strong>. <code>uv<\/code> kann Python-Interpreter herunterladen und verwalten, sodass keine separaten Tools wie Pyenv erforderlich sind.<\/li>\n<li><strong>PIP-Kompatibilit\u00e4t<\/strong>. Befehle wie <code>uv pip install<\/code> arbeiten mit <code>requirements.txt<\/code>, was die Migration von bestehenden Projekten vereinfacht.<\/li>\n<\/ol>\n<h3>UV-Einrichtung<\/h3>\n<p>Der typische Workflow f\u00fcr ein neues wissenschaftliches Python-Projekt sieht folgenderma\u00dfen aus:<\/p>\n<pre><code class=\"language-bash\"># Install uv (curl pipe to sh, cross-platform)\ncurl -LsSf https:\/\/astral.sh\/uv\/install.sh | sh\n\n# Create a project with a specific Python version\nuv init my-simulation --python 3.11\ncd my-simulation\n\n# Add core scientific dependencies\nuv add numpy scipy matplotlib\n\n# Add domain-specific libraries\nuv add fipy mpmath\n\n# Add development tools\nuv add --group dev pytest ruff ty\n\n# Generate and commit a lockfile\nuv lock\ngit add pyproject.toml uv.lock\ngit commit -m \"Initial project with pinned dependencies\"\n<\/code><\/pre>\n<p><code>uv sync<\/code> wird aus dem Lockfile installiert, um deterministische Reproduktionen zu gew\u00e4hrleisten. Jeder, der das Repository klont und <code>uv sync<\/code> ausf\u00fchrt, erh\u00e4lt genau die gleichen aufgel\u00f6sten Versionen.<\/p>\n<h3>Die Bytecode-Kompilierungs-Quirk<\/h3>\n<p>Hier verh\u00e4lt sich <code>uv<\/code> anders als PIP und wissenschaftliche Rechnerteams haben unerwartete W\u00e4nde getroffen.<\/p>\n<p><code>uv<\/code> Verschiebt die Bytecode-Kompilierung auf den ersten Lauf. Wenn <code>uv<\/code> ein Paket installiert, speichert es den vorkompilierten Bytecode in einem Cache, kompiliert jedoch nicht jede Datei sofort. Dadurch werden <code>uv<\/code>-Installationen etwa 3- bis 4-mal schneller als PIP. Der erste Import einer Bibliothek (insbesondere numpy oder scipy) kann jedoch etwa 2,5-mal langsamer sein als eine von PIP installierte Kopie, da der Bytecode zum Importzeitpunkt kompiliert wird.<\/p>\n<p>F\u00fcr die interaktive Entwicklung ist diese Verlangsamung normalerweise nicht wahrnehmbar. F\u00fcr CI-Pipelines, HPC-Job-Skripts oder Produktionsserver, die bei jedem Lauf numpy oder scipy importieren, ist die Quirk wichtig. Der Fix ist einfach: F\u00fcgen Sie Ihrem Synchronisierungsbefehl <code>--compile-bytecode<\/code> hinzu.<\/p>\n<p><em>Kontext in der realen Welt: Das Datenteam von Plotly hat genau dieses Problem dokumentiert, nachdem es <code>uv<\/code> in der Produktion \u00fcbernommen wurde. Ihre Produktionsserver sahen merklich langsamere Importe von Numpy, bis sie die Flagge hinzugef\u00fcgt hatten. Die vollst\u00e4ndige technische Aufschl\u00fcsselung finden Sie im <a href=\"https:\/\/plotly.com\/blog\/uv-python-package-manager-quirks\/\" target=\"_blank\" rel=\"nofollow noopener\">Blogbeitrag von Plotly zu UV-Quirks<\/a>.<\/em><\/p>\n<h3>Das exklusive Indexverhalten<\/h3>\n<p><code>uv<\/code> behandelt die Eintr\u00e4ge <code>--extra-index-url<\/code> standardm\u00e4\u00dfig als exklusiv nach PEP 0708. Wenn ein Paket in Ihrem prim\u00e4ren Index vorhanden ist, wird <code>uv<\/code> niemals den zus\u00e4tzlichen Index daf\u00fcr \u00fcberpr\u00fcfen. Dies sch\u00fctzt vor Abh\u00e4ngigkeitsattacken \u2013 ein b\u00f6swilliger Akteur kann ein Paket, das auf einem bekannten Index gehostet wird, nicht durch einen kompromittierten Spiegel ersetzen. Es werden jedoch auch vorhandene <code>requirements.txt<\/code>-Pipelines durchbrochen, die von zus\u00e4tzlichen Indizes f\u00fcr Fallback-Pakete abh\u00e4ngen.<\/p>\n<p>Wenn Ihr Labor einen privaten Paketindex oder einen conda-kompatiblen Index verwendet, m\u00fcssen Sie den <code>index-strategy<\/code> explizit in <code>pyproject.toml<\/code> konfigurieren. Ohne diese Konfiguration kann <code>uv<\/code> die Pakete nicht aufl\u00f6sen, die auf dem zus\u00e4tzlichen Index zu finden ist.<\/p>\n<h3>Wenn UV nicht ausreicht<\/h3>\n<p><code>uv<\/code> verwaltet Python-Pakete und Python-Dolmetscher. Es werden keine Systemabh\u00e4ngigkeiten von Python-Systemen verwaltet: C- und C++-Bibliotheken, Fortran-Compiler, MPI, CUDA-Toolkits, HDF5-, FFTW- oder Grafikbibliotheken.<\/p>\n<p>F\u00fcr diese Abh\u00e4ngigkeiten bleibt Conda der Standard. Das empfohlene Muster ist die Verwendung von <code>uv<\/code> f\u00fcr Python-Pakete und Conda (oder Pixi) f\u00fcr Abh\u00e4ngigkeiten auf Systemebene. Viele wissenschaftliche Teams koppeln die beiden Werkzeuge - Conda f\u00fcr den Systemstack, <code>uv<\/code> f\u00fcr die Python-Ebene.<\/p>\n<p>Wenn es sich bei Ihrem Projekt um Nicht-Python-Abh\u00e4ngigkeiten wie MPI, CUDA oder HDF5 handelt, lesen Sie den zugeh\u00f6rigen Leitfaden zu <a href=\"https:\/\/matforge.org\/managing-dependencies-scientific-python-lockfiles-environments\/\" target=\"_blank\" rel=\"nofollow noopener\">Verwaltung von Abh\u00e4ngigkeiten in wissenschaftlichem Python <\/a>, das Conda, Lockfiles und wann jedes Tool verwendet werden soll.<\/p>\n<h2>Ruff: Der Linter, der sechs Werkzeuge ersetzt<\/h2>\n<p>Ruff ist ein rostbasierter Linter und Formatierer von Astral. Es ersetzt Schwarz (Formatierung), iSort (Import Sorting), Flake8 (Style Checks), Pyupgrade (Entfernung von Dead-Code) und Autoflake (nicht verwendete Variablenentfernung) in einer einzigen Bin\u00e4rdatei, die 10 bis 100 Mal schneller abl\u00e4uft als der kombinierte alte Stapel.<\/p>\n<p>Das macht es besonders attraktiv f\u00fcr das wissenschaftliche Rechnen, bei dem gro\u00dfe Codebasen mit gemischten Python-Versionen und Legacy-Modulen mit den traditionellen Tools einige Sekunden dauern k\u00f6nnen, bis sie sich verfeinern. Ruff macht es in Millisekunden.<\/p>\n<h3>Wissenschaftliche Bibliotheken verwenden bereits Ruff<\/h3>\n<p>Ruff ist nicht mehr nur ein Web-Framework-Linter. Wichtige wissenschaftliche Bibliotheken haben es \u00fcbernommen:<\/p>\n<ul>\n<li><strong>Scipy<\/strong> \u2013 Das Kernteam der numerischen Methodenbibliothek ist auf Ruff migriert.<\/li>\n<li><strong>Pandas<\/strong> \u2013 Verwendet Ruff zur Style-Durchsetzung in der gesamten Codebasis.<\/li>\n<li><strong>FastAPI<\/strong> und <strong>umarmendes Gesicht<\/strong> - beide verwenden Ruff als einzige Formatierer und Linter.<\/li>\n<\/ul>\n<p>Diese Adoption ist wichtig, da Ruff die kantigen F\u00e4lle von wissenschaftlichem Code behandelt - lange DocStrings, komplexe Typanmerkungen, \u00e4ltere Python-2-Importe - ohne dabei zu verlieren oder Formatierungsfehler einzuf\u00fchren. Die offizielle Ruff-Dokumentation listet alle drei Bibliotheken als Adopter auf. Die vollst\u00e4ndige Liste finden Sie in den <a href=\"https:\/\/astral.sh\/ruff\/\" target=\"_blank\" rel=\"nofollow noopener\"> offizielle Ruff-Dokumente <\/a>.<\/p>\n<h3>Konfiguration<\/h3>\n<p>Ruff konfiguriert vollst\u00e4ndig aus <code>pyproject.toml<\/code>:<\/p>\n<pre><code class=\"language-toml\">[tool.ruff]\nline-length = 88\ntarget-version = \"py311\"\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"I\", \"N\", \"W\", \"UP\", \"RUF\"]\nignore = [\"E501\"]\n\n[tool.ruff.format]\nquote-style = \"double\"\n<\/code><\/pre>\n<p>Das Array <code>select<\/code> gibt an, welche Regels\u00e4tze aktiviert werden sollen. <code>E<\/code> und <code>F<\/code> decken PEP 8-Fehler und Pyflakes-Pr\u00fcfungen ab. <code>I<\/code> behandelt die Importsortierung (Ersetzen von ISORT). <code>N<\/code> Erzwingt Namenskonventionen. <code>UP<\/code> f\u00fchrt eine Modernisierung im Pyupgrade-Stil aus. <code>RUF<\/code> F\u00fcgt Ruff-spezifische Regeln hinzu. Die Zeile <code>ignore<\/code> entfernt E501 (zu langer Linie), da Ruff die Zeilenl\u00e4nge an den Formatierer delegiert und so den Linter schnell h\u00e4lt.<\/p>\n<h3>Migration von Black + Isort + Flake8<\/h3>\n<p>Das Entfernen des alten Stapels ist unkompliziert. Nach der Installation von Ruff k\u00f6nnen Sie die Befehle ersetzen:<\/p>\n<pre><code class=\"language-bash\"># OLD stack\nblack .\nisort .\nflake8 .\npyupgrade --py38 src\/\n\n# NEW stack\nruff check .\nruff format .\n<\/code><\/pre>\n<p><code>ruff check<\/code> behandelt alle Stilpr\u00fcfungen. <code>ruff format<\/code> behandelt alle Formatierungen. Das sind zwei statt vier Befehle, die eine Bin\u00e4rdatei statt vier separate ausf\u00fchren.<\/p>\n<p>Der wissenschaftliche Python-Entwicklungsleitfaden empfiehlt ausdr\u00fccklich, f\u00fcr Stilpr\u00fcfungen von Flake8 zu Ruff zu migrieren. Die offizielle Empfehlung finden Sie in <a href=\"https:\/\/learn.scientific-python.org\/development\/guides\/security\/\" target=\"_blank\" rel=\"nofollow noopener\"> ihren Sicherheits- und Entwicklungshandbuch <\/a>.<\/p>\n<h2>Ty: Typenkontrolle ohne Schmerzen<\/h2>\n<p><code>ty<\/code> ist der im Dezember 2025 ver\u00f6ffentlichte Typ-Checker der n\u00e4chsten Generation von Astral. Es ersetzt myPy als empfohlenen statischen Typpr\u00fcfer im Astral-\u00d6kosystem. Es ist in Rost geschrieben und so konzipiert, dass es schnell, strikt und mit nicht kommentiertem Code kompatibel ist.<\/p>\n<h3>Der Geschwindigkeitsgewinn<\/h3>\n<p>Der dramatischste Vorteil von Ty ist die Geschwindigkeit. In einem realen Benchmark eines Benutzers, der auf einer tats\u00e4chlichen wissenschaftlichen Python-Codebasis von mypy zu TY migriert ist, hat mypy <strong> 46 Sekunden&lt;<\/strong> gedauert, und TY hat den gleichen Check in <strong>2,19 Sekunden<\/strong> durchgef\u00fchrt - ungef\u00e4hr 20 Mal schneller. Siehe den vollst\u00e4ndigen Benchmark in <a href=\"https:\/\/blog.stackademic.com\/i-switched-from-mypy-to-ty-and-my-ci-type-checks-went-from-46-seconds-to-2-9a8cb1b11170\" target=\"_blank\" rel=\"nofollow noopener\"> der stackademische Migrationspost <\/a>.<\/p>\n<p>Dies ist wichtig, da die Typpr\u00fcfung h\u00e4ufig der l\u00e4ngste CI-Schritt in einem Python-Workflow ist. Wenn Sie 46 Sekunden auf 2,2 Sekunden verk\u00fcrzen, verk\u00fcrzen Sie die CI-Warteschlangenzeiten, k\u00f6nnen Entwickler schneller Feedback erhalten und eine vollst\u00e4ndige Typpr\u00fcfung in Zweigen erm\u00f6glichen, in denen selbst langsame Typenpr\u00fcfer \u00fcbersprungen worden w\u00e4ren.<\/p>\n<h3>Die schrittweise Garantie<\/h3>\n<p>Im Gegensatz zu myPy implementiert TY eine <strong>graduale Garantie<\/strong>: Es werden keine Fehler bei Code angezeigt, der keine Anmerkungen enth\u00e4lt. Wenn ein Modul <code>def calculate(x, y): return x + y<\/code> ohne Typhinweise enth\u00e4lt, behandelt TY es als untypisiert und beschwert sich nicht \u00fcber fehlende Anmerkungen. Dies ist ideal f\u00fcr die Migration von wissenschaftlichen Codebasen mit teilweise getippten Modulen - ein h\u00e4ufiges Muster im Forschungscode, bei dem die Kernsimulations-Engine getippt wird, Helfer-Skripte und -Notebooks jedoch nicht.<\/p>\n<p><a href=\"https:\/\/pydevtools.com\/handbook\/topics\/ty\/\" target=\"_blank\" rel=\"nofollow noopener\">Das offizielle TY-Handbuch <\/a> erl\u00e4utert die schrittweise Garantie im Detail. Der entscheidende Punkt ist, dass das Hinzuf\u00fcgen von Typannotationen zu einem Modul nicht dazu f\u00fchrt, dass TY Fehler in diesem Modul meldet - es meldet nur Fehler in bereits getipptem Code. mypy macht das Gegenteil: Es meldet Fehler bei jeder nicht kommentierten Funktion, auf die es trifft, die vorhandene Codebasen bricht, die keine vollst\u00e4ndigen Anmerkungen haben.<\/p>\n<h3>Spezifikationskonformit\u00e4t: Der Kompromiss<\/h3>\n<p>Hier ist der Kompromiss, den Sie verstehen m\u00fcssen, bevor Sie TY in CI setzen.<\/p>\n<p>Laut <a href=\"https:\/\/www.resumelens.org\/blog\/python\/python-type-checkers-compared\" target=\"_blank\" rel=\"nofollow noopener\">einem umfassenden Vergleich von MyPy, Pyright, Ty und Pyre<\/a> liegt die Python-Typisierungsspezifikation von Ty bei ca. <strong>53 Prozent<\/strong>, w\u00e4hrend Pyright etwa <strong>98 Prozent<\/strong> erreicht und mypy erreicht ungef\u00e4hr <strong>58 Prozent<\/strong>. Dies bedeutet, dass TY nur die H\u00e4lfte der Typisierungsspezifikationen abdeckt, und es kann Randf\u00e4lle \u00fcbersehen, die Pyright erfasst.<\/p>\n<p>Bis Ty Version 1.0 erreicht, ist die empfohlene CI-Strategie ein zweischichtiger Ansatz:<\/p>\n<ol>\n<li><strong>Lokale Entwicklung<\/strong>: Verwenden Sie TY f\u00fcr schnelles Feedback (2-Sekunden-Checks).<\/li>\n<li><strong>CI-Pipelines<\/strong>: Verwenden Sie PyRight f\u00fcr die vollst\u00e4ndige Spezifikationsabdeckung (f\u00e4ngt ty Misses).<\/li>\n<\/ol>\n<p>Dies gibt Ihnen sowohl Geschwindigkeit als auch Richtigkeit. Sobald Ty 1,0 erreicht und seine Spezifikationskonformit\u00e4t verbessert wird, k\u00f6nnen Sie sich f\u00fcr CI auf TY verlassen.<\/p>\n<h3>Konfiguration<\/h3>\n<p>Ty konfiguriert ab <code>pyproject.toml<\/code>:<\/p>\n<pre><code class=\"language-toml\">[tool.typer]\npython-version = \"3.11\"\nstrict = true\n<\/code><\/pre>\n<p>Das Flag <code>strict<\/code> aktiviert alle strengen Moduspr\u00fcfungen (implizite Spalte, no-untyped-def usw.). Die vollst\u00e4ndige Konfigurationsreferenz finden Sie in <a href=\"https:\/\/pydevtools.com\/handbook\/topics\/ty\/\" target=\"_blank\" rel=\"nofollow noopener\">das TY-Handbuch<\/a>.<\/p>\n<h2>Migrationshandbuch: Vom alten Stack zum neuen<\/h2>\n<p>Hier der praktische Vorher-Nachher-Vergleich. Wenn Sie derzeit PIP, VENV, BLACK, ISort, Flake8 und MYPY verwenden, zeigt diese Tabelle genau, was jedes Werkzeug ersetzt.<\/p>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Aufgabe<\/th>\n<th>Alter Stapel (2023 und fr\u00fcher)<\/th>\n<th>Moderner Stapel (2025-2026)<\/th>\n<th>Notizen<\/th>\n<\/tr>\n<tr>\n<td>Paketmanager<\/td>\n<td>Pip<\/td>\n<td>UV<\/td>\n<td>10-100 \u00d7 schnellere Installationen, Lockfiles enthalten<\/td>\n<\/tr>\n<tr>\n<td>Virtuelle Umgebungen<\/td>\n<td>Venv \/ virtualenv<\/td>\n<td>In UV eingebaut<\/td>\n<td>UV verwaltet Venvs automatisch<\/td>\n<\/tr>\n<tr>\n<td>Python-Versionsverwaltung<\/td>\n<td>pyenv \/ pyenv-virtualenv<\/td>\n<td>In UV eingebaut<\/td>\n<td>UV-Downloads Dolmetscher auf Anfrage<\/td>\n<\/tr>\n<tr>\n<td>Stilfusse<\/td>\n<td>Flake8, pydocstyle<\/td>\n<td>Halskrause<\/td>\n<td>Ruff ersetzt beide in einer Bin\u00e4rdatei<\/td>\n<\/tr>\n<tr>\n<td>Formatierung<\/td>\n<td>Schwarz<\/td>\n<td>Ruff (Ruff-Format)<\/td>\n<td>Gleiche Ausgabe wie Schwarz in den meisten F\u00e4llen<\/td>\n<\/tr>\n<tr>\n<td>Sortierung importieren<\/td>\n<td>iSort<\/td>\n<td>Ruff (Ruff-Check --fix)<\/td>\n<td>In Ruffs Fusselregeln eingebaut<\/td>\n<\/tr>\n<tr>\n<td>Typpr\u00fcfung<\/td>\n<td>mypy<\/td>\n<td>Ty (lokal), Pyright (CI)<\/td>\n<td>Ty ist 20 \u00d7 schneller; Pyright f\u00e4ngt Ty Misses<\/td>\n<\/tr>\n<tr>\n<td>Konfiguration<\/td>\n<td>5+ verstreute Konfigurationsdateien<\/td>\n<td>single pyproject.toml<\/td>\n<td>Alle Tools aus einer Datei gelesen<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Schritt-f\u00fcr-Schritt-Migration<\/h3>\n<p>Hier ist der konkrete Migrationspfad f\u00fcr ein bestehendes Projekt:<\/p>\n<pre><code class=\"language-bash\"># 1. Install uv and Ruff\nuv pip install uv ruff\n\n# 2. Create pyproject.toml (replacing setup.cfg)\ncat &gt;&gt; pyproject.toml &lt;&lt;EOF\n[build-system]\nrequires = [\"setuptools\"]\nbuild-backend = \"setuptools.backends._deprecated\"\n\n[project]\nname = \"my-simulation\"\nversion = \"0.1.0\"\ndependencies = [\n    \"numpy\",\n    \"scipy\",\n    \"fipy\",\n]\nEOF\n\n# 3. Add Ruff config\ncat &gt;&gt; pyproject.toml &lt;&lt;EOF\n\n[tool.ruff]\nline-length = 88\ntarget-version = \"py311\"\n\n[tool.ruff.lint]\nselect = [\"E\", \"F\", \"I\", \"N\", \"W\", \"UP\"]\nignore = [\"E501\"]\nEOF\n\n# 4. Add ty config\ncat &gt;&gt; pyproject.toml &lt;&lt;EOF\n\n[tool.typer]\npython-version = \"3.11\"\nstrict = true\nEOF\n\n# 5. Run uv sync to manage dependencies\nuv sync\n\n# 6. Run Ruff to check and format existing code\nruff check .\nruff format .\n\n# 7. Run ty locally for fast type feedback\nty check .\n<\/code><\/pre>\n<p>Dieser Pfad funktioniert, weil die Ausgabe von Ruff nahezu identisch mit dem Formatierungsstil von Schwarz ist, sodass der formatierte Code bekannt ist. Die allm\u00e4hliche Garantie von TY bedeutet, dass w\u00e4hrend der Migration keine nicht kommentierten Module gebrochen werden. Sie k\u00f6nnen Typanmerkungen inkrementell hinzuf\u00fcgen, ohne bef\u00fcrchten Sie, dass Ty-Oberfl\u00e4chenfehler auf dem Code, den Sie noch nicht eingegeben haben, eingegeben werden.<\/p>\n<p>Wenn Ihr Projekt auf <code>requirements.txt<\/code> angewiesen ist, beachten Sie, dass <code>uv<\/code> \u00fcber <code>uv pip install -r requirements.txt<\/code> installiert werden kann. Generieren Sie jedoch f\u00fcr eine langfristige Reproduzierbarkeit eine <code>uv.lock<\/code>-Datei und wechseln Sie von <code>requirements.txt<\/code>. Weitere Informationen zu Lockfiles und Reproduzierbarkeit finden Sie im zugeh\u00f6rigen Handbuch zu <a href=\"https:\/\/matforge.org\/managing-dependencies-scientific-python-lockfiles-environments\/\" target=\"_blank\" rel=\"nofollow noopener\">Abh\u00e4ngigkeiten in wissenschaftlichen Python verwalten<\/a>.<\/p>\n<h2>Was wir empfehlen: ein Entscheidungsrahmen<\/h2>\n<p>Nicht jedes Team sollte alle drei Werkzeuge gleichzeitig \u00fcbernehmen. Der richtige Stapel h\u00e4ngt von den Anforderungen Ihres Projekts ab. Verwenden Sie diesen Entscheidungsrahmen, um Folgendes zu w\u00e4hlen:<\/p>\n<ol>\n<li><strong>Ben\u00f6tigen Sie keine Python-Abh\u00e4ngigkeiten?<\/strong> (MPI, CUDA, HDF5, C++-Bibliotheken, Fortran-Compiler) <ul> <li><strong>Ja<\/strong>: Verwenden Sie Conda f\u00fcr diese Abh\u00e4ngigkeiten. Sie k\u00f6nnen neben Conda weiterhin <code>uv<\/code> f\u00fcr die Python-Pakete verwenden.<\/li> <li><strong>Nein<\/strong>: Fahren Sie mit der n\u00e4chsten Frage fort.<\/li> <\/ul><\/li>\n<li><strong>Publieren Sie ein Python-Paket f\u00fcr Pypi?<\/strong> <ul> <li><strong>Ja<\/strong>: Erw\u00e4gen Sie Gedichte f\u00fcr ausgereifte Ver\u00f6ffentlichungsworkflows oder <code>uv<\/code> f\u00fcr schnellere Installationen w\u00e4hrend der Entwicklung. Beide unterst\u00fctzen Pypi Publishing.<\/li> <li><strong>Nein<\/strong>: <code>uv<\/code> ist die Standardauswahl f\u00fcr neue Forschungsprojekte.<\/li> <\/ul><\/li>\n<li><strong>Arbeiten Sie in CI\/CD-Pipelines, wo die Installationszeit wichtig ist?<\/strong> <ul> <li><strong>Ja<\/strong>: Verwenden Sie <code>uv<\/code>. Die Geschwindigkeitsgewinne (10-100 \u00d7 \u00fcber PIP) verk\u00fcrzen die CI-Warteschlangenzeiten direkt.<\/li> <li><strong>Nein<\/strong>: Entweder <code>uv<\/code> oder Gedichte k\u00f6nnen je nach Teamkenntnis funktionieren.<\/li> <\/ul><\/li>\n<li><strong>Wie wichtig ist die vollst\u00e4ndige Abdeckung der Typpr\u00fcfung in CI? <\/strong> <ul> <li> <strong> hoch <\/strong>: Verwenden Sie Pyright f\u00fcr CI, TY f\u00fcr die lokale Entwicklung. Dies gibt Ihnen sowohl Geschwindigkeit als auch Richtigkeit. <\/li> <li> <strong> low <\/strong>: Ty allein reicht f\u00fcr die meisten Forschungscodebasen aus. <\/li> <\/ul><\/li>\n<\/ol>\n<p>F\u00fcr die meisten neuen Forschungsprojekte ist der empfohlene Stack:<\/p>\n<ul>\n<li><strong>UV<\/strong> f\u00fcr Paketverwaltung und Lockfiles<\/li>\n<li><strong>Ruff<\/strong> zum Fusseln und Formatieren<\/li>\n<li><strong>Ty<\/strong> f\u00fcr die lokale Typpr\u00fcfung (schnelles Feedback)<\/li>\n<li><strong>Pyright<\/strong> zur CI-Typpr\u00fcfung (vollst\u00e4ndige Spezifikationsabdeckung)<\/li>\n<\/ul>\n<p>Diese Kombination gibt Ihnen Geschwindigkeit, Korrektheit und Reproduzierbarkeit - die drei S\u00e4ulen der Forschungssoftwarequalit\u00e4t.<\/p>\n<h2>Einschr\u00e4nkungen: Wann bleiben Sie bei den alten Werkzeugen?<\/h2>\n<p>Der moderne Stapel ist leistungsstark, aber kein universeller Ersatz. Hier sollten Sie die alten Werkzeuge behalten:<\/p>\n<h3>Conda f\u00fcr Nicht-Python-Abh\u00e4ngigkeiten<\/h3>\n<p>UV verwaltet Python-Pakete und Python-Dolmetscher. Es verarbeitet keine kompilierten C-Bibliotheken, Fortran-Compiler, MPI-, CUDA-Toolkits, HDF5-, FFTW- oder Grafikbibliotheken. F\u00fcr diese bleibt Conda (oder Pixi) der Standard f\u00fcr das wissenschaftliche Rechnen. Viele Teams verwenden Conda f\u00fcr Systemabh\u00e4ngigkeiten und <code>uv<\/code> f\u00fcr Python-Pakete in derselben Umgebung.<\/p>\n<h3>mypy f\u00fcr die vollst\u00e4ndige Spezifikationsabdeckung<\/h3>\n<p>Bis Ty Version 1.0 erreicht und seine Spezifikations-Konformit\u00e4tsl\u00fccke schlie\u00dft, ist MyPy oder Pyright die sicherere Wahl f\u00fcr CI-Umgebungen, die eine vollst\u00e4ndige Typpr\u00fcfung ben\u00f6tigen. Verwenden Sie ty f\u00fcr die lokale Entwicklung, bei der Geschwindigkeit wichtig ist, und Pyright (oder mypy) f\u00fcr CI, wenn die Richtigkeit wichtig ist.<\/p>\n<h3>Poesie f\u00fcr Pypi Publishing<\/h3>\n<p>Wenn Sie wissenschaftliche Python-Pakete in Pypi ver\u00f6ffentlichen, verf\u00fcgt Poetry immer noch \u00fcber ausgereifte Ver\u00f6ffentlichungsworkflows, Abh\u00e4ngigkeitsgruppen und eine gut dokumentierte Build-Pipeline. <code>uv<\/code> unterst\u00fctzt Pypi-Publishing, aber seine Workflows sind neuer und weniger dokumentiert als die Poesie. Wenn Ihr Team etablierte Dokumentationen und lange Produktionsbilanzen sch\u00e4tzt, ist Poesie m\u00f6glicherweise immer noch die bessere Wahl f\u00fcr die Ver\u00f6ffentlichungsseite Ihres Workflows.<\/p>\n<h2>Zusammenfassung und n\u00e4chste Schritte<\/h2>\n<p>Die wissenschaftliche Python-Toolchain ist gereift. Der rostgetriebene Stapel - UV, Ruff und TY - ersetzt die alten fragmentierten Werkzeuge durch etwas schnelleres, einfacheres und besser integriertes. Hier sind die Imbisser:<\/p>\n<ol>\n<li><strong>UV<\/strong> ist der Standard-Paketmanager f\u00fcr neue Projekte. Verwenden Sie <code>--compile-bytecode<\/code> auf Servern und CI-Pipelines. Verwenden Sie daneben Conda f\u00fcr Nicht-Python-Abh\u00e4ngigkeiten.<\/li>\n<li><strong>RUFF<\/strong> ersetzt Black, iSort, Flake8, Pyupgrade und Autoflake. Scipy und Pandas verwenden es bereits. Konfigurieren Sie alles aus <code>pyproject.toml<\/code>.<\/li>\n<li><strong>Ty<\/strong> ist der schnellste verf\u00fcgbare Typ Checker \u2013 20 mal schneller als myPy. Verwenden Sie es lokal. Verwenden Sie Pyright f\u00fcr CI, bis Ty 1,0 erreicht.<\/li>\n<li><strong>pyproject.toml<\/strong> ist die einzige Konfigurationsquelle. Alle drei Werkzeuge lesen daraus. Keine verstreuten Konfigurationsdateien mehr.<\/li>\n<\/ol>\n<p>Wenn Sie ein neues Simulationsprojekt starten, \u00fcbernehmen Sie vom ersten Tag an den modernen Stapel. Wenn Sie ein vorhandenes Projekt migrieren, folgen Sie dem Schritt-f\u00fcr-Schritt-Pfad oben \u2013 die Formatierungsausgabe von Ruff ist nahezu identisch mit der von Black, und die schrittweise Garantie von TY bedeutet, dass Sie den vorhandenen Code w\u00e4hrend des \u00dcbergangs nicht brechen.<\/p>\n<p>Weitere Informationen zum wissenschaftlichen Python-Bibliotheksstapel finden Sie im <a href=\"https:\/\/matforge.org\/scientific-python-ecosystem-navigating-scipy-numpy-sympy-2\/\" target=\"_blank\" rel=\"nofollow noopener\">Scientific Python Ecosystem Guide<\/a>, der numpy, scipy, sympy, matplotlib abdeckt, Jupyter und Scikit-Learn. Eine tiefere Abdeckung des Abh\u00e4ngigkeitsmanagements und der Lockfiles finden Sie in der Anleitung <a href=\"https:\/\/matforge.org\/managing-dependencies-scientific-python-lockfiles-environments\/\" target=\"_blank\" rel=\"nofollow noopener\">Verwalten von Abh\u00e4ngigkeiten in der wissenschaftlichen Python<\/a>-Anleitung. Lesen Sie die Best Practices f\u00fcr die Wartung, die gut mit der modernen Toolchain \u00fcbereinstimmen, die <a href=\"https:\/\/matforge.org\/best-practices-for-maintaining-scientific-code\/\" target=\"_blank\" rel=\"nofollow noopener\">Best Practices f\u00fcr die Aufrechterhaltung des wissenschaftlichen Codes<\/a>.<\/p>\n<p>Das wissenschaftliche Python-\u00d6kosystem geht nirgendwo hin. Die Art und Weise, wie Sie damit arbeiten, hat sich ge\u00e4ndert, und die \u00dcbernahme des modernen Stacks bietet Ihnen schnellere Builds, eine einfachere Konfiguration und eine bessere Reproduzierbarkeit - alles ohne die Bibliotheken zu \u00e4ndern, die Sie f\u00fcr die Berechnung verwenden.<\/p>\n<p><!-- Referenzen und Weiterlesen --><\/p>\n<h2>Referenzen und Weiterlesen<\/h2>\n<ul>\n<li><a href=\"https:\/\/astral.sh\/ruff\/\" target=\"_blank\" rel=\"nofollow noopener\"> Ruff-Dokumentation <\/a> - Offizielle Anleitung f\u00fcr den rostbasierten Linter und Formatierer.<\/li>\n<li><a href=\"https:\/\/github.com\/astral-sh\/uv\" target=\"_blank\" rel=\"nofollow noopener\"> UV-GitHub-Repository <\/a> - Offizieller Quellcode und Feature-Dokumentation.<\/li>\n<li><a href=\"https:\/\/medium.com\/fhinkel\/python-packaging-in-2025-introducing-uv-a-speedy-new-contender-cbf408726687\" target=\"_blank\" rel=\"nofollow noopener\">Python-Verpackung im Jahr 2025: Einf\u00fchrung in UV<\/a> \u2014 Franziska Hinkelmanns technischer \u00dcberblick \u00fcber das Design und die Philosophie von UV.<\/li>\n<li><a href=\"https:\/\/plotly.com\/blog\/uv-python-package-manager-quirks\/\" target=\"_blank\" rel=\"nofollow noopener\"> UV-Python-Paketmanager: Macken und Lessons <\/a> - Plelys reale Adoptionserfahrung mit UV.<\/li>\n<li><a href=\"https:\/\/www.kdnuggets.com\/python-project-setup-2026-uv-ruff-ty-polars\" target=\"_blank\" rel=\"nofollow noopener\">Python-Projekt-Setup 2026: UV, Ruff, TY, Polars <\/a> - Schritt-f\u00fcr-Schritt-Einrichtungshandbuch f\u00fcr den modernen Stapel.<\/li>\n<li><a href=\"https:\/\/pydevtools.com\/handbook\/topics\/ty\/\" target=\"_blank\" rel=\"nofollow noopener\">TY-Handbuch<\/a> \u2014 Offizielles Handbuch zur Leistungsf\u00e4higkeit von TY, schrittweise Garantie und VS-Code-Integration.<\/li>\n<li><a href=\"https:\/\/www.resumelens.org\/blog\/python\/python-type-checkers-compared\" target=\"_blank\" rel=\"nofollow noopener\">Python-Typ-Checker im Vergleich<\/a> \u2014 umfassend Vergleich von myPy, Pyright, Ty und Pyre mit Spezifikationskonformit\u00e4tsdaten.<\/li>\n<li><a. href=\"https:\/\/blog.stackademic.com\/i-switched-from-mypy-to-ty-and-my-ci-type-checks-went-from-46-seconds-to-2-9a8cb1b11170\" target=\"_blank\" rel=\"nofollow noopener\"> Ich habe von mypy zu ty (46s \u2192 2.19s)  gewechselt - - realer Typ-Checking-Benchmark auf einer wissenschaftlichen Python-Codebasis.<\/a.><\/li>\n<li><a href=\"https:\/\/learn.scientific-python.org\/development\/guides\/security\/\" target=\"_blank\" rel=\"nofollow noopener\">Wissenschaftliches Python-Entwicklungshandbuch<\/a> \u2014 Offizielle Community Empfehlungen f\u00fcr Ruff und Ty.<\/li>\n<\/ul>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 11<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Erfahren Sie die moderne wissenschaftliche Python-Toolchain &#8211; UV f\u00fcr Paketmanagement, Ruff f\u00fcr Fusseln und TY f\u00fcr Typenpr\u00fcfung. Aktualisiert f\u00fcr 2026 mit Benchmarks und Migrationshandb\u00fcchern.<\/p>\n","protected":false,"raw":"Erfahren Sie die moderne wissenschaftliche Python-Toolchain - UV f\u00fcr Paketmanagement, Ruff f\u00fcr Fusseln und TY f\u00fcr Typenpr\u00fcfung. Aktualisiert f\u00fcr 2026 mit Benchmarks und Migrationshandb\u00fcchern."},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"de_DE","_original_post":"https:\/\/matforge.org\/?p=1051","iawp_total_views":2,"footnotes":""},"categories":[1],"tags":[72,73,71,68,16,70,69],"class_list":["post-1119","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","tag-astral","tag-python-package-manager","tag-python-tooling","tag-ruff","tag-scientific-python","tag-type-checking","tag-uv","de-DE"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  11 minutesErfahren Sie die moderne wissenschaftliche Python-Toolchain - UV f\u00fcr Paketmanagement, Ruff f\u00fcr Fusseln und TY f\u00fcr Typenpr\u00fcfung. Aktualisiert f\u00fcr 2026 mit Benchmarks und Migrationshandb\u00fcchern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-19T09:48:31+00:00\" \/>\n<meta name=\"author\" content=\"steven\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"steven\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/\"},\"author\":{\"name\":\"steven\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"headline\":\"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY\",\"datePublished\":\"2026-08-19T09:48:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/\"},\"wordCount\":3115,\"commentCount\":0,\"keywords\":[\"Astral\",\"Python package manager\",\"Python tooling\",\"Ruff\",\"scientific python\",\"type checking\",\"uv\"],\"articleSection\":[\"Simulation & amp; Modellierungsprojekte\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/\",\"name\":\"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-19T09:48:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/de\\\/modern-scientific-python-tooling-uv-ruff-type-checking\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\",\"name\":\"steven\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"caption\":\"steven\"},\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/steven\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/","og_locale":"de_DE","og_type":"article","og_title":"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY - matforge.org","og_description":"Reading Time:  11 minutesErfahren Sie die moderne wissenschaftliche Python-Toolchain - UV f\u00fcr Paketmanagement, Ruff f\u00fcr Fusseln und TY f\u00fcr Typenpr\u00fcfung. Aktualisiert f\u00fcr 2026 mit Benchmarks und Migrationshandb\u00fcchern.","og_url":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/","og_site_name":"matforge.org","article_published_time":"2026-08-19T09:48:31+00:00","author":"steven","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"steven","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/"},"author":{"name":"steven","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"headline":"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY","datePublished":"2026-08-19T09:48:31+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/"},"wordCount":3115,"commentCount":0,"keywords":["Astral","Python package manager","Python tooling","Ruff","scientific python","type checking","uv"],"articleSection":["Simulation & amp; Modellierungsprojekte"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/","url":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/","name":"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-19T09:48:31+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"breadcrumb":{"@id":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/de\/modern-scientific-python-tooling-uv-ruff-type-checking\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/de\/"},{"@type":"ListItem","position":2,"name":"Moderne wissenschaftliche Python-Werkzeuge im Jahr 2026: UV, Ruff und TY"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03","name":"steven","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","caption":"steven"},"url":"https:\/\/matforge.org\/author\/steven\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1119"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1119\/revisions"}],"predecessor-version":[{"id":1138,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1119\/revisions\/1138"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}