Zenn
💡

Python 3.13でpydantic-coreのインストールに失敗する問題と解決策

2025/03/06に公開

問題の概要

Python 3.13環境でpydanticfastapiなどの依存関係をインストールしようとすると、pydantic-coreのビルド時に以下のようなエラーが発生します:

Building wheel for pydantic-core (pyproject.toml) ... error
error: subprocess-exited-with-error

× Building wheel for pydantic-core (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [30 lines of output]
    ...
    Traceback (most recent call last):
      File ".../generate_self_schema.py", line 192, in eval_forward_ref
        return type_._evaluate(core_schema.__dict__, None, set())
               ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: ForwardRef._evaluate() missing 1 required keyword-only argument: 'recursive_guard'
    ...

問題の原因

この問題は、Python 3.13でtyping.ForwardRef._evaluate()メソッドの引数が変更されたことが原因です。Python 3.13では、recursive_guardという新しい必須のキーワード引数が追加されましたが、pydantic-coreのビルドスクリプトはこの変更に対応していません。

具体的には、pydantic-coreのビルド時に実行されるgenerate_self_schema.pyスクリプトが、古い引数形式でForwardRef._evaluate()を呼び出そうとしているため、エラーが発生しています。

解決策

この問題を解決するには、以下の方法があります:

方法1: Python 3.12を使用する(推奨)

Python 3.13はまだ新しいバージョンであり、多くのライブラリがまだ完全に対応していません。Python 3.12を使用することで、この問題を回避できます。

手順:

  1. Python 3.12をインストールする(Macの場合):

    brew install python@3.12
    
  2. Python 3.12のシンボリックリンクを作成する:

    brew link --overwrite python@3.12
    
  3. パスを設定する:

    echo 'export PATH="/usr/local/opt/python@3.12/libexec/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc
    
  4. Python 3.12が使用されていることを確認する:

    python --version  # Python 3.12.x と表示されるはず
    python3 --version  # Python 3.12.x と表示されるはず
    
  5. 新しい仮想環境を作成する:

    python -m venv venv
    source venv/bin/activate
    
  6. 依存関係をインストールする:

    pip install -r requirements.txt
    

方法2: pydanticの特定バージョンを使用する

将来的には、pydanticの開発者がPython 3.13に対応したバージョンをリリースする可能性があります。その場合は、以下のコマンドで最新バージョンをインストールできます:

pip install pydantic --upgrade

ただし、記事執筆時点では、Python 3.13に完全に対応したpydanticのバージョンはまだリリースされていません。

まとめ

Python 3.13はまだ新しいバージョンであり、一部のライブラリがまだ完全に対応していません。特にpydantic-coreのようなRustで書かれた拡張モジュールは、Python内部の変更に敏感です。

当面は、Python 3.12を使用することで、これらの互換性の問題を回避できます。Python 3.13への移行は、主要なライブラリがすべて対応した後に検討することをお勧めします。

この問題は、新しいPythonバージョンがリリースされた直後によく見られる現象です。時間が経つにつれて、ライブラリの開発者がコードを更新し、新しいPythonバージョンに対応していくでしょう。

Discussion

ログインするとコメントできます