WHLパッケージ形式
効率的なパッケージ分布が重要なPython開発エコシステムでは、WHL(ホイール)ファイルがPythonパッケージを確実かつ迅速に配布およびインストールするための標準ソリューションになりました。
Pythonホイールアーカイブ情報
WHLは、事前にコンパイルされた状態にインストールするために必要なすべてのファイルを含むPython用の組み込みパッケージ形式です。本質的に、WHLファイルは、特別なディレクトリ構造とネーミングコンベンションを備えた ZIP Archive であり、Pythonのパッケージマネージャーは、ビルドプロセスをエンドユーザーシステムで実行する必要なくソフトウェアをインストールできます。より良いインストール速度と信頼性のため、この形式は通常、多くのPython製品の古い.egg形式とソース分布(.tar.gz)に取って代わりました。
WHLファイルの進化
2012年、PEP 427は、以前の卵形式の拡張として、「ホイール」と正式に「ホイール」と呼ばれるWHL形式を発表しました。 Daniel Holthは、Pythonパッケージエコシステムに関する多くの問題を修正するために作成しました。 PythonのパッケージインストーラーであるPipが、2013年初頭に利用可能になったバージョン1.4のホイールインストール機能を含めた場合、この形式では大幅に使用されていました。 2014年までに、主要なPythonパッケージはホイールファイルの配布を開始し、今日ではPythonパッケージ配信の事実上の標準になりました。 Pythonパッケージングエコシステムの進歩により、形式は進化し続けています。最新の標準は、PEP 600およびPEP 621で概説されています。
WHLファイルの構造
WHLファイルは、基本的に、Pythonパッケージの仕様に従う特定の内部構造を持つZIPアーカイブです。 WHLファイル内には、コンパイルされたPythonモジュール(.Pycファイル)、パッケージに関するメタデータ、およびパッケージが機能するために必要なバイナリ拡張機能があります。ファイル名自体は、パッケージ名、バージョン、Python互換性タグ、ターゲットアーキテクチャなど、重要な情報をエンコードする厳格な慣習に従います。この構造化されたアプローチにより、Pythonのパッケージマネージャーは、コンテンツを抽出する必要なく、ホイールがターゲットシステムと互換性があるかどうかを迅速に判断できます。
WHL圧縮の方法
WHLファイルは、基本的にzipアーカイブであるため、通常のzipファイルと同じ圧縮方法を使用しています。圧縮比と減圧速度のバランスをとるデフレートアルゴリズムは、WHLファイルの内容を圧縮するために最も頻繁に使用されます。この方法では、配布に適したファイルサイズを維持しながら、パッケージを迅速にインストールできることが保証されます。これらのファイルは、 aspose.zip のようなライブラリと互換性があります。これは、deflate、deflate64tm、 bzip2 などのさまざまな圧縮技術を使用して、whlパッケージの抽出と生成を促進します。
WHLアーカイブサポート操作
python .netのaspose.zip などのツールを使用して、開発者はさまざまな方法でWHLファイルを操作できます。ホイールパッケージを作成したり、コンテンツを検査したり、インストールなしでファイルをWHLから抽出したり、メタデータを変更したり、修正ホイールを再パッケージ化できます。問題をデバッグしたり、ユニークなコンテキストにパッケージを適応させたり、依存関係を調べたりする必要があるPythonパッケージメンテナーは、これらのアクションが特に役立つことがわかります。 WHLファイルをインストールし、ソース分布のホイールへの変換、およびホイールパッケージの検証のための追加コマンドは、Pythonの標準ツールチェーンに含まれています。
WHLファイル - 内部構造
WHLファイルは、基本的に、Pythonパッケージの仕様に従う特定の内部構造を持つZIPアーカイブです。 WHLファイル内には、
が見つかります
- **コンパイルされたPythonモジュール:**コンパイルなしで直接読み込むことができる.Pycファイル
- **パッケージメタデータ:**パッケージ著者、バージョン、依存関係、および要件に関する情報
- **バイナリ拡張機能:**パッケージ機能に必要なプラットフォーム固有のコンパイルされたライブラリ
- **構造化された命名規則:**重要な情報をエンコードするファイル名:
- パッケージ名
- バージョン番号
- Python互換性タグ
- ターゲットアーキテクチャ(win_amd64、manylinux1_x86_64)
この標準化された内部組織には、
が含まれます
- **ルートパッケージの内容:**実際のPythonコードとリソース
- **。distinfoディレクトリ:**メタデータ、ホイール、レコードなどのメタデータファイルが含まれています
- **。データディレクトリ(オプション):**非Pythonデータファイルとリソースを保持します
この構造化されたアプローチにより、ハッシュ検証を通じてセキュリティを維持しながら、パッケージの迅速な検証とインストールが可能になります。
WHLファイルとサポートの人気
その有効性と信頼性のため、WHLはPythonパッケージの優先分布方法として浮上しています。ホイールファイルは、Pythonパッケージインデックス(PYPI)にリストされているほぼすべてのパッケージにアクセスできるようになりました。この形式は、Pythonエコシステムによって完全にサポートされており、PIPなどのユーティリティが利用可能なソース分布よりもホイールを優先しています。プログラミング環境に関係なく、Python開発者は、Windows、MacOS、Linuxを含むすべての主要なオペレーティングシステムで動作するため、常にこの形式を使用しています。
WHLファイルを使用する例
WHLファイルは、パッケージを効率的に配布およびインストールしようとするPython開発者にとって不可欠です。 WHLファイルをプログラム的に操作することで、開発者はパッケージ管理ワークフローをカスタマイズできます。次のコードの例では、ライブラリを使用してWHLファイルを作成および抽出する方法を調べ、パッケージ検査と変更の手法を実証します。これらの例は、よりスムーズな依存関係の管理と展開のために、Python開発プロジェクトでWHLファイルを活用する方法を理解するのに役立ちます。
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);
}
}
}
![]() | ![]() | ![]() |
---|
zip-archivesに関する追加情報
人々は尋ねてきました
1. PythonにWHLファイルをインストールするにはどうすればよいですか?
WHLファイルをインストールするには、pipコマンドを使用します。 pip install filename.whl
。このコマンドはすべてのプラットフォームで動作し、Pythonにホイールパッケージをインストールする標準的な方法です。仮想環境で作業している場合は、最初にアクティブ化されていることを確認してください。
2. 配布用の独自のWHLファイルを作成できますか?
はい、Pythonのビルドツールを使用してWHLファイルを作成できます。まず、プロジェクトに適切なsetup.pyまたはpyproject.tomlファイルがあることを確認し、プロジェクトディレクトリで python -m build -wheel
を実行します。これにより、DIST/ディレクトリにWHLファイルが生成され、PYPIに配布またはアップロードできます。
3. WHLファイルはプラットフォーム固有ですか?
パッケージのコンテンツに依存します。 「Pure Python」ホイール(「PY3」タグでマークされた)は、すべてのプラットフォームで動作します。ただし、コンパイルされたエクステンションを含むホイール(「win_amd64」や「manylinux」などのプラットフォーム固有のタグでマークされています)は、プラットフォーム固有であり、マッチングシステムのみで機能します。これが、一部のパッケージが異なるプラットフォームに複数のホイールファイルを提供する理由です。