0Pricing
Python Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. プロジェクト構成とpyproject.toml
  2. buildによるビルド
  3. バージョン管理とメタデータ
  4. twineによる公開
← Python Academyに戻る