Das .whl-Dateiformat, das für „Wheel“ steht, ist ein ZIP-basiertes Archivformat, das für die Verteilung und Installation von Python-Paketen entwickelt wurde. Es wurde in PEP 427 als Ersatz für das ältere .egg-Format eingeführt. Das .whl-Format bietet eine effizientere, schnellere und plattformunabhängige Möglichkeit zur Verteilung von Python-Paketen im Vergleich zu Quellverteilungen.
Eine .whl-Datei ist im Wesentlichen ein ZIP-Archiv, das einer bestimmten Verzeichnisstruktur und Namenskonvention folgt. Das Archiv enthält den Quellcode des Python-Pakets, kompilierten Bytecode und Metadatendateien, die für die Installation erforderlich sind. Das .whl-Format ermöglicht eine schnellere Installation, da es die Ausführung von setup.py und die Kompilierung des Pakets während der Installation überflüssig macht.
Die Namenskonvention für .whl-Dateien folgt einem bestimmten Muster: {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl. Lassen Sie uns jede Komponente aufschlüsseln: - {distribution}: Der Name des Python-Pakets. - {version}: Die Versionsnummer des Pakets. - {build tag} (optional): Ein Tag, das einen bestimmten Build des Pakets angibt. - {python tag}: Gibt die Python-Implementierung und -Version an, z. B. cp38 für CPython 3.8. - {abi tag}: Gibt die Application Binary Interface (ABI) an, z. B. cp38m für CPython 3.8 mit Unicode UCS-4. - {platform tag}: Gibt die Zielplattform an, z. B. win_amd64 für 64-Bit-Windows. Beispielsweise stellt eine .whl-Datei mit dem Namen mypackage-1.0.0-cp38-cp38-win_amd64.whl Version 1.0.0 von „mypackage“ dar, das für CPython 3.8 unter 64-Bit-Windows erstellt wurde.
Die Verzeichnisstruktur innerhalb eines .whl-Archivs folgt einem bestimmten Layout. Auf der obersten Ebene befindet sich ein Verzeichnis „{distribution}-{version}.dist-info“, das Metadatendateien enthält. Der eigentliche Paketcode und die Ressourcen werden in einem separaten Verzeichnis mit dem Namen „{distribution}-{version}.data“ gespeichert.
Im Verzeichnis „.dist-info“ finden Sie normalerweise die folgenden Dateien: - METADATA: Enthält Paketmetadaten wie Name, Version, Autor und Abhängigkeiten. - WHEEL: Gibt die Version der Wheel-Spezifikation und die Kompatibilitätstags des Pakets an. - RECORD: Eine Liste aller im .whl-Archiv enthaltenen Dateien zusammen mit ihren Hashes zur Integritätsprüfung. - entry_points.txt (optional): Definiert Einstiegspunkte für das Paket, z. B. Konsolenskripte oder Plugins. - LICENSE.txt (optional): Enthält die Lizenzinformationen des Pakets. Das Verzeichnis „.data“ enthält den eigentlichen Paketcode und die Ressourcen, die gemäß der internen Struktur des Pakets organisiert sind.
Um eine .whl-Datei zu erstellen, verwenden Sie normalerweise ein Tool wie setuptools oder pip. Diese Tools generieren automatisch die erforderlichen Metadatendateien und packen den Code basierend auf der setup.py-Datei des Pakets oder der pyproject.toml-Konfiguration in das .whl-Format. Wenn Sie beispielsweise „python setup.py bdist_wheel“ oder „pip wheel .“ im Verzeichnis des Pakets ausführen, wird eine .whl-Datei im Verzeichnis „dist“ generiert.
Bei der Installation eines Pakets aus einer .whl-Datei übernehmen Tools wie pip den Installationsprozess. Sie extrahieren den Inhalt des .whl-Archivs, überprüfen die Integrität der Dateien anhand der Informationen in der RECORD-Datei und installieren das Paket am entsprechenden Ort in der Python-Umgebung. Die Metadatendateien im Verzeichnis „.dist-info“ werden verwendet, um das installierte Paket und seine Abhängigkeiten zu verfolgen.
Einer der Hauptvorteile des .whl-Formats ist seine Fähigkeit, vorgefertigte, plattformspezifische Pakete bereitzustellen. Dies bedeutet, dass Benutzer Pakete installieren können, ohne eine kompatible Build-Umgebung zu benötigen oder das Paket aus der Quelle zu kompilieren. .whl-Dateien können für verschiedene Plattformen und Python-Versionen erstellt und verteilt werden, was die Verteilung von Paketen an eine Vielzahl von Benutzern erleichtert.
Ein weiterer Vorteil des .whl-Formats ist seine schnellere Installationsgeschwindigkeit im Vergleich zu Quellverteilungen. Da .whl-Dateien vorkompilierten Bytecode enthalten und während der Installation keine Ausführung von setup.py erfordern, ist der Installationsprozess deutlich schneller. Dies ist besonders bei Paketen mit komplexen Build-Prozessen oder Abhängigkeiten bemerkbar.
Das .whl-Format unterstützt außerdem verschiedene Funktionen und Erweiterungen. Beispielsweise ermöglicht es die Einbeziehung kompilierter Erweiterungen (z. B. C-Erweiterungen) in das Archiv, wodurch die Verteilung von Paketen mit nativem Code vereinfacht wird. Es unterstützt auch das Konzept der „direkten URL-Referenzen“ (PEP 610), das die Angabe von URLs für Paketabhängigkeiten ermöglicht und flexiblere Verteilungsmechanismen ermöglicht.
Zusammenfassend lässt sich sagen, dass das .whl-Archivformat eine standardisierte und effiziente Möglichkeit zur Verteilung von Python-Paketen darstellt. Es bietet einen plattformunabhängigen und schnelleren Installationsprozess im Vergleich zu Quellverteilungen. Durch die Einhaltung einer bestimmten Verzeichnisstruktur und Namenskonvention kapseln .whl-Dateien den Paketcode, die Metadaten und die Abhängigkeiten in einem einzigen Archiv. Die weit verbreitete Einführung des .whl-Formats hat die Verteilung und Installation von Python-Paketen erheblich vereinfacht und es Entwicklern erleichtert, ihre Bibliotheken zu teilen, und Benutzern, sie nahtlos zu installieren.
Die Dateikomprimierung reduziert Redundanzen, damit dieselben Informationen mit weniger Bits auskommen. Die Obergrenze wird von der Informationstheorie gesetzt: Bei verlustfreier Komprimierung bestimmt die Entropie der Quelle das Limit (siehe Shannons Source-Coding-Theorem und seinen ursprünglichen Aufsatz von 1948 „A Mathematical Theory of Communication“). Bei verlustbehafteter Komprimierung beschreibt die Rate-Distortion-Theorie den Kompromiss zwischen Bitrate und Qualität.
Die meisten Kompressoren arbeiten in zwei Phasen. Zuerst sagt ein Modell Struktur in den Daten voraus oder legt sie frei. Danach wandelt ein Coder diese Vorhersagen in nahezu optimale Bitmuster um. Eine klassische Modellfamilie ist Lempel–Ziv LZ77 (1977) und LZ78 (1978) entdecken wiederholte Teilstrings und geben Referenzen statt Rohbytes aus. Auf der Codierungsseite weist die Huffman-Codierung (den Originalartikel finden Sie 1952) wahrscheinlicheren Symbolen kürzere Codes zu. Arithmetische Codierung und Range Coding arbeiten noch feiner und rücken näher an die Entropiegrenze, während moderne Asymmetric Numeral Systems (ANS) ähnliche Raten mit tabellengesteuerten Implementierungen erreichen.
DEFLATE (verwendet von gzip, zlib und ZIP) kombiniert LZ77 mit Huffman-Codierung. Die Spezifikationen sind öffentlich: DEFLATE RFC 1951, der zlib-Wrapper RFC 1950und das gzip-Dateiformat RFC 1952. Gzip ist für Streaming ausgelegt und garantiert ausdrücklich keinen zufälligen Zugriff. PNG-Bilder standardisieren DEFLATE als einzige Komprimierungsmethode (mit maximal 32 KiB Fenster) laut der PNG-Spezifikation „Compression method 0… deflate/inflate… at most 32768 bytes“ und W3C/ISO PNG 2nd Edition.
Zstandard (zstd): ein neuer Allzweckkompressor für hohe Raten bei sehr schneller Dekompression. Das Format ist dokumentiert in RFC 8878 (und dem HTML-Spiegel) sowie der Referenzspezifikation auf GitHub. Wie gzip zielt der Basis-Frame nicht auf zufälligen Zugriff. Eine der Superkräfte von zstd sind Wörterbücher: kleine Proben aus Ihrem Korpus, die viele kleine oder ähnliche Dateien deutlich besser komprimieren (siehe python-zstandard Wörterbuch-Dokumentation und Nigel Taos Beispiel). Implementierungen akzeptieren sowohl „unstrukturierte“ als auch „strukturierte“ Wörterbücher (Diskussion).
Brotli: optimiert für Web-Inhalte (z. B. WOFF2-Fonts, HTTP). Es kombiniert ein statisches Wörterbuch mit einem DEFLATE-ähnlichen LZ+Entropie-Kern. Die Spezifikation ist RFC 7932, der auch ein Gleitfenster von 2WBITS−16 mit WBITS in [10, 24] (1 KiB−16 B bis 16 MiB−16 B) beschreibt und festhält, dass es keinen zufälligen Zugriff bereitstellt. Brotli schlägt gzip bei Webtext oft und dekodiert trotzdem schnell.
ZIP-Container: ZIP ist ein Datei-Archiv, das Einträge mit verschiedenen Komprimierungsmethoden (deflate, store, zstd usw.) speichern kann. Der De-facto-Standard ist PKWAREs APPNOTE (siehe APPNOTE-Portal, eine gehostete Kopieund die LC-Überblicke ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 zielt auf pure Geschwindigkeit bei moderaten Raten. Siehe die Projektseite („extremely fast compression“) und das Frame-Format. Ideal für In-Memory-Caches, Telemetrie oder Hot Paths, in denen Dekompression nahezu RAM-Geschwindigkeit erreichen muss.
XZ / LZMA strebt hohe Dichte (große Raten) mit relativ langsamer Kompression an. XZ ist ein Container; die Schwerarbeit leisten typischerweise LZMA/LZMA2 (LZ77-ähnliche Modellierung + Range Coding). Siehe .xz-Dateiformat, die LZMA-Spezifikation (Pavlov)und Linux-Hinweise zu XZ Embedded. XZ komprimiert meist besser als gzip und konkurriert oft mit modernen Hochratencodecs, braucht aber längere Encode-Zeiten.
bzip2 setzt auf die Burrows–Wheeler-Transformation (BWT), Move-to-Front, RLE und Huffman-Codierung. Typisch kleiner als gzip, aber langsamer; siehe das offizielle Handbuch und die Manpages (Linux).
Die „Fenstergröße“ zählt. DEFLATE-Referenzen können nur 32 KiB zurückblicken (RFC 1951) sowie das PNG-Limit von 32 KiB hier erläutert. Brotli deckt Fenster von etwa 1 KiB bis 16 MiB ab (RFC 7932). Zstd passt Fenster und Suchtiefe über die Level an (RFC 8878). Basis-Streams von gzip/zstd/brotli sind für sequentielles Dekodieren gebaut; die Grundformate versprechen keinen zufälligen Zugriff, obwohl Container (z. B. Tar-Indizes, Chunked Framing oder format-spezifische Indizes) ihn nachrüsten können.
Die oben genannten Formate sind verlustfrei: Sie rekonstruieren exakt dieselben Bytes. Medien-Codecs sind oft verlustbehaftet: Sie verwerfen unmerkliche Details, um niedrigere Bitraten zu erreichen. Bei Bildern ist klassisches JPEG (DCT, Quantisierung, Entropiecodierung) in ITU-T T.81 / ISO/IEC 10918-1standardisiert. In Audio nutzen MP3 (MPEG-1 Layer III) und AAC (MPEG-2/4) Wahrnehmungsmodelle und MDCT-Transformationen (siehe ISO/IEC 11172-3, ISO/IEC 13818-7und eine MDCT-Übersicht hier). Verlustbehaftet und verlustfrei können koexistieren (z. B. PNG für UI-Assets; Web-Codecs für Bilder/Video/Audio).
Theorie Shannon 1948 · Rate–distortion · Codierung Huffman 1952 · Arithmetische Codierung · Range Coding · ANS. Formate DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · XZ format. BWT-Stack Burrows–Wheeler (1994) · bzip2 manual. Medien JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Fazit: Wählen Sie einen Kompressor, der zu Ihren Daten und Randbedingungen passt, messen Sie auf echten Eingaben und vergessen Sie nicht die Gewinne durch Wörterbücher und clevere Frames. Mit der richtigen Kombination erhalten Sie kleinere Dateien, schnellere Übertragungen und reaktionsschnellere Apps – ohne Korrektheit oder Portabilität zu opfern.
Dateikompression ist ein Prozess, der die Größe einer Datei oder Dateien reduziert, normalerweise um Speicherplatz zu sparen oder die Übertragung über ein Netzwerk zu beschleunigen.
Die Dateikompression funktioniert, indem sie Redundanzen in den Daten identifiziert und entfernt. Sie verwendet Algorithmen, um die ursprünglichen Daten in einem kleineren Raum zu kodieren.
Die beiden primären Arten der Dateikompression sind verlustfreie und verlustbehaftete Kompression. Verlustfreie Kompression ermöglicht die perfekte Wiederherstellung der Originaldatei, während verlustbehaftete Kompression eine größere Größenreduktion ermöglicht, dies jedoch auf Kosten eines Qualitätsverlusts bei den Daten.
Ein populäres Beispiel für ein Dateikompressionstool ist WinZip, das mehrere Kompressionsformate unterstützt, darunter ZIP und RAR.
Bei verlustfreier Kompression bleibt die Qualität unverändert. Bei verlustbehafteter Kompression kann es jedoch zu einem spürbaren Qualitätsverlust kommen, da weniger wichtige Daten zur Reduzierung der Dateigröße stärker eliminiert werden.
Ja, die Dateikompression ist sicher in Bezug auf die Datenintegrität, insbesondere bei der verlustfreien Kompression. Wie alle Dateien können jedoch auch komprimierte Dateien von Malware oder Viren angegriffen werden. Daher ist es immer wichtig, eine seriöse Sicherheitssoftware zu haben.
Fast alle Arten von Dateien können komprimiert werden, einschließlich Textdateien, Bilder, Audio, Video und Softwaredateien. Das erreichbare Kompressionsniveau kann jedoch zwischen den Dateitypen erheblich variieren.
Eine ZIP-Datei ist ein Dateiformat, das verlustfreie Kompression verwendet, um die Größe einer oder mehrerer Dateien zu reduzieren. Mehrere Dateien in einer ZIP-Datei werden effektiv zu einer einzigen Datei gebündelt, was das Teilen einfacher macht.
Technisch ja, obwohl die zusätzliche Größenreduktion minimal oder sogar kontraproduktiv sein könnte. Das Komprimieren einer bereits komprimierten Datei kann manchmal deren Größe erhöhen, aufgrund der durch den Kompressionsalgorithmus hinzugefügten Metadaten.
Um eine Datei zu dekomprimieren, benötigen Sie in der Regel ein Dekompressions- oder Entzip-Tool, wie WinZip oder 7-Zip. Diese Tools können die Originaldateien aus dem komprimierten Format extrahieren.