Warum der SciPy-Build für Python 3.12 fast ein Wunder ist
- Vor Kurzem wurde Python 3.12 veröffentlicht.
- Dass wichtige Pakete umgehend Releases veröffentlichen, die mit einer neuen Python-Version kompatibel sind, ist normalerweise üblich.
- Dass SciPy einen mit Python 3.12 kompatiblen Build veröffentlicht hat, war das glückliche Ergebnis mehrerer zusammenfallender Zeitpläne.
Die Rolle von Fortran und Compilern
- Fortran ist seit den 1950er-Jahren eine wichtige Programmiersprache, und viel wissenschaftlicher Code wurde in Fortran geschrieben.
- Es gab verschiedene Fortran-Compiler, diese waren jedoch alle proprietär.
- Ein Compiler wandelt den von Programmierern geschriebenen Code in eine Form um, die ein Computer ausführen kann.
- GCC ist ein frei nutzbarer Compiler, der verschiedene CPU-Architekturen und Betriebssysteme unterstützt.
Python und das Performance-Problem
- Python lässt sich ohne Compiler verwenden, ist aber langsamer als kompilierte Sprachen.
- Wenn Performance wichtig ist, ist es eine gute Lösung, kompilierten Code zu verwenden und ihn mit einer Python-Schnittstelle zu umhüllen.
- NumPy und SciPy verwenden aus Performance-Gründen Fortran-Code, wodurch Nutzer bei der Paketinstallation einen Compiler benötigen.
Probleme beim Python-Packaging
- Python-Packaging musste wegen seiner Komplexität immer wieder neu erfunden werden.
- Wer den Quellcode direkt herunterlädt, hat Probleme wie die nötige Compiler-Konfiguration für Nutzer und lange Build-Zeiten.
- Das Format "wheel" verbesserte dies, indem es die für ein Paket benötigten Bibliotheken in die Distribution aufnimmt.
Das Aufkommen von conda und conda-forge
- conda bietet einen umfassenderen Ansatz, der alles enthält, was für Packaging nötig ist.
- conda-forge ist ein gemeinschaftlich getragener Channel, der die Integrationsarbeit für Pakete übernimmt.
- conda-forge versucht, alle gängigen Plattformen zu unterstützen, und wird von Freiwilligen betrieben.
SciPys Wahl von Meson als Build-Tool
- SciPy entschied sich für Meson als Build-Tool.
- Meson bietet eine Oberfläche im Python-Stil und ist weniger komplex als CMake.
- Meson folgt der Designphilosophie, Nicht-Experten keine falschen Arbeitsweisen zu erlauben.
Die Wiederbelebung von Fortran und LLVM
- Das Interesse an Fortran ist in den letzten Jahren gestiegen.
- Die Entwicklung neuer Fortran-Compiler auf LLVM-Basis hat Fahrt aufgenommen.
- LLVM stellt eine Compiler-Infrastruktur bereit, die auf verschiedenen Architekturen und Plattformen funktioniert.
SciPys Meson-Umstellung und die Probleme bei conda-forge
- SciPy wechselte zu Meson, hatte aber Probleme wegen des Fehlens eines Fortran-Compilers für Windows.
- conda-forge musste für die Migration auf Python 3.12 alle relevanten Pakete neu bauen.
Die Bedeutung der "Yukatastrophe" und die Meinung von GN⁺
- Da die SciPy-Testsuite zu 100 % erfolgreich lief, wurde ein mit Python 3.12 kompatibler SciPy-Build in conda-forge möglich.
- Das war das Ergebnis des Zusammenspiels vieler Anstrengungen und glücklicher Zufälle und bringt der Python-Community großen Nutzen.
- Meinung von GN⁺: Dieser Artikel zeigt, wie die Anstrengungen und die Zusammenarbeit der Python-Community komplexe technische Probleme lösen können. Dass SciPy erfolgreich einen mit Python 3.12 kompatiblen Build veröffentlicht hat, ist ein wichtiger Fortschritt im wissenschaftlichen Rechnen und steht sinnbildlich für die Stärke von Open Source Software und die Kraft der Community.
3 Kommentare
Hacker-News-Kommentare
Die Free-Software-Community sollte die Unterstützung für das Betriebssystem von Microsoft einstellen und Dinge wie SciPy von ihnen selbst portieren lassen
Dass Python-Paketierung komplex ist, liegt an den nicht standardisierten C/C++/Fortran-Build-Tools und dem riesigen Ökosystem, nicht an Python selbst
Dass das Meson-Build-Tool die Kombination aus MSVC+gfortran ablehnt, wirkt wie ein Bug
Viele Leute lösen das Problem mit WSL2, und es stellt sich die Frage, warum man überhaupt versucht, eine native Windows-Version zu bauen
Die besten BLAS-Bibliotheken sind größtenteils in C geschrieben, und es stellt sich die Frage, wie weit man nur mit C und Python kommen könnte
Eine naive Frage dazu, ob sich Fortran wegen seiner Semantik, die sich stark von C unterscheidet, nicht erst in C umwandeln und dann mit einem C-Compiler kompilieren ließe, und ob eine Wartung in C möglich wäre
Es ist schwer, mit den Änderungen an Pythons Build-System Schritt zu halten
Die Frage, ob "aarch64" und "arm64" dasselbe sind
Fortran war in IT-Abteilungen oft Ziel von Witzen, hat in den letzten Jahren aber eine dramatische Wiederbelebung erlebt
Eine Frage zum Unterschied zwischen "arm64" und "aarch64" in der Compiler-/Architektur-Tabelle
Das ist ein Fall, in dem schonungslos offengelegt wird, wie sehr man von binär kompilierten Sprachen verdammt noch mal abhängig ist.
Hat Python das Problem gelöst, andere Ökosysteme aber nicht? Deshalb wird man wohl vorab kompilierte Binärdateien bereitstellen.