buildによるビルド
wheelとsdistを作成します
「buildによるビルド」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
ビルドの意味
ソースコードは、pipでインストールできる配布アーティファクトに変換する必要があります。これには最新のツールであるbuildを使い、python -m buildとして実行します。
このコマンドは、ソースディストリビューションとwheelという2種類のファイルを生成します。
sdistとwheel
アーティファクトには2種類あります。
- sdist(.tar.gz):ソースアーカイブ。インストール時にpipがビルドします
- wheel(.whl):ビルド済みのアーカイブ。pipは展開するだけです
wheelはインストールが速く、推奨されます。sdistはフォールバックであり、正式なソースアーカイブです。
ビルドツールのインストール
pip install buildで一度インストールします。これは薄いフロントエンドであり、pyproject.tomlを読み込み、分離された環境を用意して、ビルドバックエンドを呼び出し、アーティファクトを作成します。
バックエンドを直接呼び出すのではなく、buildが処理を調整します。
ビルドの実行
プロジェクトルートからpython -m buildを実行します。デフォルトではsdistとwheelの両方を作成し、新しいdist/ディレクトリに配置します。
どちらか一方だけをビルドするには、--wheelまたは--sdistを使用します。
args = []
targets = []
if '--sdist' in args:
targets.append('sdist')
if '--wheel' in args:
targets.append('wheel')
if not targets:
targets = ['sdist', 'wheel']
print('Will build:', targets)wheelのファイル名
wheelの名前にはメタデータが埋め込まれています。mytool-0.1.0-py3-none-any.whlは、名前がmytool、バージョンが0.1.0、Python 3向け、ABI要件なし、任意のプラットフォーム向けであることを示します。純粋なPythonパッケージにはpy3-none-anyが使われます。
name = 'mytool'
version = '0.1.0'
wheel = name + '-' + version + '-py3-none-any.whl'
print(wheel)
print('Parts:', wheel[:-4].split('-'))ビルドの分離
デフォルトでは、buildは新しい仮想環境を作成し、[build-system]のrequiresに指定されたパッケージをインストールして、その環境でビルドします。これにより、現在の環境にたまたま存在するパッケージにビルドが誤って依存することを防げます。
distフォルダーの確認
ビルド後、dist/にはアーティファクトが含まれます。アップロード前に一覧表示すれば、何が生成されたかを確認できます。これは通常のディレクトリ一覧の表示です。
dist = ['mytool-0.1.0.tar.gz', 'mytool-0.1.0-py3-none-any.whl']
for f in dist:
kind = 'sdist' if f.endswith('.tar.gz') else 'wheel'
print(kind.ljust(6), f)wheelの確認
wheelは単なるZIPアーカイブです。解凍して、モジュールとデータファイルが含まれていること、重要なものが抜けていないことを確認できます。ここでファイルが欠けていれば、インストール後も欠けたままです。
クリーンビルド
build/やdist/に古いファイルが残っていると、結果が分かりにくくなることがあります。リリース用のビルドの前にこれらのディレクトリを削除し、現在のソースから生成されるものだけを公開してください。
stale_dirs = ['build', 'dist', 'mytool.egg-info']
for d in stale_dirs:
print('Remove before clean build:', d)再現可能なビルド
同じソースからは、常に同じアーティファクトがビルドされるべきです。[build-system] requiresでビルドバックエンドのバージョンを固定し、実行中の環境から値を取得しないようにします。再現性があれば、チームメンバーやCIサーバーでも同一の出力を得られます。
クリーンビルドと組み合わせることで、「自分のマシンでは動くのに」という問題をなくせます。
CIでのビルド
ほとんどのプロジェクトでは、ノートパソコンではなく継続的インテグレーションサーバー上でビルドします。CIジョブがコードをチェックアウトし、python -m buildを実行して、アーティファクトを保存します。これにより、毎回、既知のクリーンな状態からリリースできることが保証されます。
ローカルで実行するものとまったく同じコマンドが、CIでも実行されます。
確認テスト
ビルドの知識をテストします。
まとめ
アーティファクトのビルド方法を学びました。
pip install buildを実行し、続いてpython -m buildを実行するdist/にsdist(.tar.gz)とwheel(.whl)が生成される[build-system]のrequiresを使い、分離された環境でビルドされる- リリース前にwheelを確認し、クリーンビルドを行う
よくある質問
「buildによるビルド」レッスンは無料ですか?
はい。「buildによるビルド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「buildによるビルド」で何を学びますか?
wheelとsdistを作成します ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「buildによるビルド」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。