WHL-Paketformat

Im Python-Entwicklungsökosystem, in dem eine effiziente Paketverteilung entscheidend ist, sind WHL (Wheel)-Dateien zur Standardlösung für die zuverlässige und schnelle Verteilung und Installation von Python-Paketen geworden.

Python Wheel-Archivinfo

WHL ist ein kompiliertes Paketformat für Python, das alle für die Installation notwendigen Dateien in einem vorkompilierten Zustand enthält. Im Wesentlichen ist eine WHL-Datei ein ZIP-Archiv mit einer speziellen Verzeichnisstruktur und Namenskonvention, die es den Paketmanagern von Python ermöglicht, Software zu installieren, ohne dass der Bauprozess auf dem System des Endbenutzers ausgeführt werden muss. Aufgrund seiner besseren Installationsgeschwindigkeit und Zuverlässigkeit hat dieses Format im Allgemeinen das ältere .egg-Format und Quellverteilungen (.tar.gz) für viele Python-Produkte ersetzt.

Entwicklung von WHL-Dateien

Im Jahr 2012 kündigte PEP 427 das WHL-Format an, das offiziell als “Wheel” bezeichnet wird, als Verbesserung des vorherigen Egg-Formats. Daniel Holth entwickelte es, um eine Reihe von Problemen im Python-Paketierungsökosystem zu beheben. Als pip, der Paketinstaller von Python, in Version 1.4, die Anfang 2013 veröffentlicht wurde, die Fähigkeit zur Wheel-Installation einbaute, erlebte das Format einen deutlichen Aufschwung in der Nutzung. Ab 2014 begannen große Python-Pakete, Wheel-Dateien zu verteilen, und heute ist es zum De-facto-Standard für die Python-Paketverteilung geworden. Mit Fortschritten im Python-Verpackungsökosystem entwickelt sich das Format weiter; die neuesten Standards sind in PEP 600 und PEP 621 beschrieben.

Struktur von WHL-Dateien

WHL-Dateien sind im Wesentlichen ZIP-Archive mit einer spezifischen internen Struktur, die den Python-Verpackungsspezifikationen folgt. In einer WHL-Datei finden Sie die kompilierten Python-Module (.pyc-Dateien), Metadaten über das Paket und alle binären Erweiterungen, die für die Funktionalität des Pakets benötigt werden. Der Dateiname selbst folgt einer strengen Konvention, die wichtige Informationen kodiert: Paketname, Version, Python-Kompatibilitäts-Tags und Zielarchitektur. Dieser strukturierte Ansatz ermöglicht es den Paketmanagern von Python, schnell zu bestimmen, ob ein Wheel mit dem Zielsystem kompatibel ist, ohne seinen Inhalt extrahieren zu müssen.

Methoden der WHL-Kompression

WHL-Dateien verwenden die gleichen Kompressionsmethoden wie reguläre ZIP-Dateien, da sie grundsätzlich ZIP-Archive sind. Der Deflate-Algorithmus, der das Verhältnis zwischen Kompressionsrate und Dekompressionsgeschwindigkeit ausgleicht, wird am häufigsten verwendet, um den Inhalt von WHL-Dateien zu komprimieren. Diese Methode garantiert, dass Pakete schnell installiert werden können, während die Dateigröße für die Verteilung angemessen bleibt. Diese Dateien sind mit Bibliotheken wie Aspose.ZIP kompatibel, die die Extraktion und Erzeugung von WHL-Paketen mit verschiedenen Kompressionstechniken wie Deflate, Deflate64TM, Bzip2 und anderen erleichtern.

Unterstützte Operationen für WHL-Archive

Mit Tools wie Aspose.ZIP for Python .NET können Entwickler WHL-Dateien auf verschiedene Weise manipulieren. Wheel-Pakete können erstellt werden, Inhalte können inspiziert werden, Dateien können ohne Installation aus WHL extrahiert werden, Metadaten können geändert werden und modifizierte Wheels können neu verpackt werden. Python-Paketbetreuer, die Probleme debuggen, Pakete für einzigartige Kontexte anpassen oder Abhängigkeiten untersuchen müssen, werden diese Aktionen besonders hilfreich finden. Zusätzliche Befehle zum Installieren von WHL-Dateien, Konvertieren von Quellverteilungen in Wheels und Validieren von Wheel-Paketen sind in der Standard-Toolchain von Python enthalten, die auch pip und Wheel-Tools umfasst.

WHL-Datei - Interne Struktur

WHL-Dateien sind im Wesentlichen ZIP-Archive mit einer spezifischen internen Struktur, die den Python-Verpackungsspezifikationen folgt. In einer WHL-Datei finden Sie:

  • Kompilierte Python-Module: Vorkompilierte .pyc-Dateien, die direkt ohne Kompilierung geladen werden können
  • Paket-Metadaten: Informationen über den Paketautor, Version, Abhängigkeiten und Anforderungen
  • Binäre Erweiterungen: Plattformspezifische kompilierte Bibliotheken, die für die Paketfunktionalität benötigt werden
  • Strukturierte Namenskonvention: Dateiname, der kritische Informationen kodiert:
    • Paketname
    • Versionsnummer
    • Python-Kompatibilitäts-Tags
    • Zielarchitektur (z.B. win_amd64, manylinux1_x86_64)

Diese standardisierte interne Organisation umfasst:

  • Root-Paketinhalte: Der eigentliche Python-Code und Ressourcen
  • .dist-info-Verzeichnis: Enthält Metadaten-Dateien wie METADATA, WHEEL und RECORD
  • .data-Verzeichnis (optional): Enthält Nicht-Python-Datendateien und Ressourcen

Dieser strukturierte Ansatz ermöglicht eine schnelle Validierung und Installation von Paketen bei gleichzeitiger Wahrung der Sicherheit durch Hash-Verifizierung.

WHL-Datei - Interne Struktur

Beliebtheit der WHL-Dateien und Unterstützung

Aufgrund seiner Effizienz und Zuverlässigkeit hat sich WHL als bevorzugte Verteilungsmethode für Python-Pakete etabliert. Wheel-Dateien sind jetzt für fast jedes Paket verfügbar, das im Python Package Index (PyPI) aufgeführt ist. Dieses Format wird vom Python-Ökosystem vollständig unterstützt, wobei Dienstprogramme wie pip Wheels Vorrang vor Quellverteilungen geben, wo sie verfügbar sind. Unabhängig von der Programmierumgebung verwenden Python-Entwickler immer dieses Format, da es mit allen wichtigen Betriebssystemen, einschließlich Windows, macOS und Linux, kompatibel ist.

Beispiele für die Verwendung von WHL-Dateien

WHL-Dateien sind für Python-Entwickler unerlässlich, die Pakete effizient verteilen und installieren möchten. Die programmatische Arbeit mit WHL-Dateien ermöglicht es Entwicklern, ihren Paketmanagement-Workflow anzupassen. In den folgenden Codebeispielen werden wir untersuchen, wie man Bibliotheken verwendet, um WHL-Dateien zu erstellen und zu extrahieren, und Techniken zur Paketinspektion und -modifikation demonstrieren. Diese Beispiele werden Ihnen helfen zu verstehen, wie Sie WHL-Dateien in Ihren Python-Entwicklungsprojekten für ein reibungsloseres Abhängigkeitsmanagement und Deployment nutzen können.

Create WHL via C#

    using (var archive = new Archive())
    {
        archive.CreateEntry("entry_name1.dat", "input_file1.dat");
        archive.CreateEntry("entry_name2.dat", "input_file2.dat");
        archive.Save("result_archive.whl");
    }

Compress and encrypt data file using Archive.Save method via C#

    using (var whlFile = File.Open("EncrypedWithAES256.whl", FileMode.Create)) 
    { 
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read)) 
        { 
            using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$", EcryptionMethod.AES256)))) 
            { 
                archive.CreateEntry("alice29.txt", source); 
                archive.Save(whlFile); 
            } 
        } 
    }

Aspose.Zip offers individual archive processing APIs for popular development environments, listed below:

Aspose.Zip for .NETAspose.Zip via JavaAspose.Zip via Python.NET

Zusätzliche Informationen über Zip-Archive

Häufig gestellte Fragen

1. Wie installiere ich eine WHL-Datei in Python?

Um eine WHL-Datei zu installieren, verwenden Sie den pip-Befehl: pip install filename.whl. Dieser Befehl funktioniert auf allen Plattformen und ist die Standardmethode zur Installation von Wheel-Paketen in Python. Wenn Sie in einer virtuellen Umgebung arbeiten, stellen Sie sicher, dass diese zuerst aktiviert ist.

2. Kann ich meine eigenen WHL-Dateien für die Verteilung erstellen?

Ja, Sie können WHL-Dateien mit den Build-Tools von Python erstellen. Stellen Sie zunächst sicher, dass Ihr Projekt über eine ordnungsgemäße setup.py- oder pyproject.toml-Datei verfügt, und führen Sie dann python -m build --wheel in Ihrem Projektverzeichnis aus. Dies generiert eine WHL-Datei im Verzeichnis dist/, die Sie verteilen oder auf PyPI hochladen können.

3. Sind WHL-Dateien plattformspezifisch?

Es hängt vom Paketinhalt ab. ‘Pure Python’-Wheels (mit ‘py3’-Tag markiert) funktionieren auf allen Plattformen. Wheels, die kompilierte Erweiterungen enthalten (mit plattformspezifischen Tags wie ‘win_amd64’ oder ‘manylinux’ markiert), sind jedoch plattformspezifisch und funktionieren nur auf passenden Systemen. Deshalb bieten einige Pakete mehrere Wheel-Dateien für verschiedene Plattformen an.