Windows で Python の C 拡張をコンパイルする

Windows で Python の C 拡張をコンパイルする

Windows で Python の C 拡張をコンパイルする場合、ビルドには使用中の Python バージョンと互換性のある Microsoft C/C++ コンパイラと Windows SDK が必要です。コンパイラツールまたは SDK ヘッダーのどちらかが不足していると、pip installpython setup.py build、または conda build が、次のようなエラーで失敗することがあります。

Unable to find vcvarsall.bat

これは通常、Python のビルドツールが Visual C++ のビルド環境スクリプトを見つけられないことを意味します。

Visual C++ 2017 をインストールしたところ、このエラーは解消されました。

より確実な解決方法は、Python バージョンに合った Microsoft C++ Build Tools をインストールすることです。Visual Studio Installer で、MSVC コンパイラと Windows SDK を含む C++ ワークロードが選択されていることを確認してください。

インストール後、新しいターミナルを開き、コンパイラが利用できるか確認します。

where cl
cl

それでも cl が見つからない場合は、Visual Studio Developer Command Prompt を起動するか、ビルド前に適切な vcvarsall.bat スクリプトを実行してください。

Cannot open include file: 'io.h'

別の起こり得るエラーは次のとおりです。

c:miniconda3includepyconfig.h(59): fatal error C1083: Cannot open include file: 'io.h': No such file or directory

ヘッダー io.h は Windows SDK / Universal CRT ヘッダーに含まれています。このエラーは通常、SDK ヘッダーがインストールされていない、またはコンパイラ環境から見えていないことを意味します。

Windows 10 SDK をインストールするとこの問題を解決できる可能性がありますが、当時はまだ試していませんでした。

実用的なチェックリストは次のとおりです。

  1. Visual Studio Installer を開く。
  2. インストール済みの Build Tools または Visual Studio インストールを変更する。
  3. C++ Build Tools ワークロードを有効にする。
  4. インストール済みの Windows SDK が選択されていることを確認する。
  5. ターミナルを再起動し、拡張を再ビルドする。

その後、ビルドを再試行します。

python -m pip install .

または、旧式のプロジェクトでは次のようにします。

python setup.py build

プロジェクトで Conda を使用している場合は、有効な環境がビルド対象として意図したものかどうかも確認してください。

where python
python -c "import sys; print(sys.executable); print(sys.version)"

重要なのは、Python、MSVC コンパイラ、Windows SDK のすべてが同じシェルセッションから見えている必要があるという点です。

Leave a Reply