cibuildwheelでLinux向けのwheelビルド時につまずいた点と解決策
問題点: 依存関係のエラー
cibuildwheel
を使用してLinux向けのwheelをビルドする際、依存関係のエラーに悩まされました。
最初、CIホスト上で必要なパッケージをインストールしていましたが、ビルド時に依存関係のエラーが解消されず、試行錯誤を繰り返しました。
重要なポイント: コンテナ内での処理
cibuildwheel
はビルドのために独自のコンテナを作成して処理を行います。そのため、CIホスト上でいくら依存パッケージをインストールしても、ビルドには反映されません。
この事実を認識するのに1日以上を費やしてしまいました。
解決策: before-allオプションの活用
cibuildwheel
では、before-all オプションを使用することで、ビルドが開始される前にコンテナ内で必要なパッケージをインストールできます。
CIBW_BEFORE_ALL_LINUX="yum install -y 必要なパッケージ名"
または、pyproject.tomlで以下のように設定を記述する
[tool.cibuildwheel.linux]
before-all = "yum install -y 必要なパッケージ名"
この設定を追加することで、依存関係のエラーを解消し、正常にwheelのビルドができるようになりました。
まとめ
-
cibuildwheel
は コンテナ内 でビルドを行う。 -
CIホストにパッケージをインストールしても無駄。
-
CIBW_BEFORE_ALL_LINUX
を活用して、コンテナ内で依存関係を解決すると、スムーズにビルドができる。
cibuildwheel
を使う際には、この点に注意して効率的にビルドを進めましょう。