Poetry環境でのnumpyビルドエラーとバージョン制約による解決メモ#
Windows上で、Gitから取得したPythonプロジェクトを poetry install した際に、numpy のビルドに失敗する事象に遭遇した。Poetry環境でのエラーでありながら、原因は numpy のビルド処理にあった。
以下に、再現環境と解決までの経緯を記録しておく。
事象概要#
pyproject.toml に以下のような記述があった。
[tool.poetry.dependencies]
numpy = "^1.26.0"
この指定は SemVer の仕様に基づき、以下の範囲を意味する。
>=1.26.0, <2.0.0
このとき poetry install により、numpy==1.26.4 が選ばれた。しかし、ビルド済みホイール (.whl) が解決されず、Poetry 経由でのインストール時にソースビルドが開始され、Visual C++ Build Tools の導入等を実施しても not supporting PEP 517 builds などのエラーで失敗した。
対応内容#
Poetryの依存定義を以下のように修正:
numpy = "<=2.2.4"
これにより、Poetryは numpy==2.2.x 系のビルド済みバイナリを選択し、ビルド処理が不要となり、エラーが解消した。
背景と考察#
Poetryは pyproject.toml の内容や poetry.lock に基づき依存を解決するが、場合によってはビルド処理を行うパッケージを選択することがある。
numpy 1.26系は、バイナリを配布していた時期はあったはずだが、現状はバイナリ配布がないようで、ビルドが発生。
numpy 2.2系はホイール配布も安定しており、特にWindows環境ではビルドなしで導入できるケースが多い。
^1.26.0 のような記述は保守的であるが、状況によっては逆に問題を引き起こすこともある。
今後の教訓#
同様の問題に遭遇した際は、以下の観点で早期に切り分けを行う:
PEP 517 ビルドなどのお作法の変更に伴うエラーかどうかを確認
必要に応じてバージョンを変更し、より新しい安定版を利用する
補足:numpy の非互換について#
numpy==2.0.0 以降では、一部破壊的変更が入っているため、依存する他ライブラリとの互換性に注意。必要に応じて >=1.26,<2.0 のような上限制約も有効。
記事情報
- 著者:
mtakagishi
- 公開日:
2025-07-26