3 Punkte von GN⁺ 2023-11-09 | 3 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2023-11-09
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

    • Wer Linux braucht, findet es in WSL2
    • Microsoft sollte wie alle anderen Betriebssystemanbieter in den letzten 60 Jahren einen Compiler in das Betriebssystem integrieren
  • Dass Python-Paketierung komplex ist, liegt an den nicht standardisierten C/C++/Fortran-Build-Tools und dem riesigen Ökosystem, nicht an Python selbst

    • Ein Teil dieser Komplexität lässt sich nicht reduzieren
    • Dass das Python-Paketierungssystem überhaupt funktioniert, ist ein Wunder
  • Dass das Meson-Build-Tool die Kombination aus MSVC+gfortran ablehnt, wirkt wie ein Bug

    • Der Zweck eines Build-Tools ist es, die vom Nutzer angegebenen Befehle auszuführen, nicht sie dem Nutzer zu verweigern
  • 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

    • Fortran ist womöglich unvermeidbar, aber es ist positiv, dass Verbesserungen bei den Fortran-Tools unter Windows beginnen
  • 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

    • Vermutlich gibt es nicht viele Fortran-Experten, die alte Bibliotheken pflegen, und Wartung ist nötig
  • Es ist schwer, mit den Änderungen an Pythons Build-System Schritt zu halten

    • Neugier auf Leistungswerte unter Windows ist vorhanden, aber ernsthafte Arbeit dürfte meist auf Linux-Maschinen laufen
  • Die Frage, ob "aarch64" und "arm64" dasselbe sind

    • Wikipedia leitet ARM64 auf AArch64 weiter
  • Fortran war in IT-Abteilungen oft Ziel von Witzen, hat in den letzten Jahren aber eine dramatische Wiederbelebung erlebt

    • Der Grund für diese Wiederbelebung ist nicht klar, lässt sich aber über die verlinkten Inhalte besser verstehen
  • Eine Frage zum Unterschied zwischen "arm64" und "aarch64" in der Compiler-/Architektur-Tabelle

    • Erwähnung, dass der Wikipedia-Artikel zu ARM64 auf AArch64 weiterleitet
 
ahwjdekf 2023-11-10

Das ist ein Fall, in dem schonungslos offengelegt wird, wie sehr man von binär kompilierten Sprachen verdammt noch mal abhängig ist.

 
kayws426 2023-11-10

Hat Python das Problem gelöst, andere Ökosysteme aber nicht? Deshalb wird man wohl vorab kompilierte Binärdateien bereitstellen.