はじめに
もう何も怖くない。 nikkieです
FastAPIやLangChainといったライブラリが依存していることでおなじみPydantic!
約2週間前、6月の終わりにv1.10.xからv2へとメジャーバージョンアップしました。
破壊的変更1もあります😰
ですが、他のライブラリのメジャーバージョンアップと比べてそんなに怖くないかもしれません。
※アップグレードを経験中の身でのアウトプットですので、未来の私が全力でテノヒラクルーする可能性はあります
更新履歴
- PyDantic 表記するものと誤解していたことに気づき、Pydantic表記に修正しました (2023/07/17)
目次
- はじめに
- 目次
- Pydantic v2.0🎉
- アップグレードの小さな成功体験
- 大きいコードベースもv2にアップグレードしちゃおう。v1のAPIもサポートされているから
- 移行ツール bump-pydantic ♻️
- 終わりに
Pydantic v2.0🎉
2023/06/30 リリース👏
FastAPIも間髪入れずにPydantic v2をサポートしていますね(v0.100.0〜)
Pydanticのマイグレーションガイドはこちらです✨
脱線:v2で何が変わったの?
Rustの力を得たそうです💪
作者さんが今年のPyCon USで話されてます(積ん読)
アップグレードの小さな成功体験
先日の小さいスクリプト2は、Pydantic v2の環境を用意しても動きました🙌
- Python 3.11.4
- 新しい仮想環境で
pip install pydantic
% pip freeze annotated-types==0.5.0 pydantic==2.0.3 pydantic_core==2.3.0 typing_extensions==4.7.1
% python my_langchain.py Chain(verbose=False) ---- Set verbose True ---- Chain(verbose=True)
大きいコードベースもv2にアップグレードしちゃおう。v1のAPIもサポートされているから
ですが、実プロジェクトでのアップグレードはこんなにたやすくはいかないでしょう。
マイグレーションガイドは長々と続くため、多くの変更が入ったと想像されます。
それでもアップグレードしていきたいと考える理由がこちら
https://github.com/pydantic/pydantic/tree/v2.0.3#pydantic-v110-vs-v2
Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects:
from pydantic import v1 as pydantic_v1
.
pip install -U pydantic
とv2に上げた後、pydantic.v1
の下にはv1のAPIが残っているんですね。
なので、Pydantic自体をv2に上げた後、実装はv1を使うようにして「うちのプロジェクトは最新のPydantic v2を使ってます」とドヤれます3。
光速でドヤるのが目的じゃないと思うので、「you can incrementally upgrade your code base」とあるように小さく小さくv2を使うように移行していきましょう〜
移行ツール bump-pydantic ♻️
FastAPIの作者tiangoloさんがスターされていて存在を知りました。
マイグレーションガイドは重厚ですが、このツールがどう書き換えればいいか教えてくれます。
マイグレーションをサポートするツールを用意したのがめちゃくちゃうまいな〜と思うのです。
ドキュメントを読み解くのは大変ですが、サポートツールが教えてくれたところだけ理解して適用すればよく、作業の大変さがかなり軽減されていると感じます。
素振り案
実プロジェクトより小さい規模でアップグレードを練習できないかな〜と考えて、浮かんだ案を記します。
近日中に手を動かすぞ
- 『ロバストPython』はPydanticを紹介している(14章。パースライブラリとして4)
- 『ロバストPython』のサンプルコードはPydantic v1を想定
- これらを
bump-pydantic
も使ってv2に上げてみたらいいのでは- コード量が実プロジェクトほどあるわけではないですが、Pydanticの機能(v2で変更が入った部分)もある程度使っていそう
終わりに
Pydanticのv2へのメジャーバージョンアップ、以下の理由によりもう何も怖くないと記しました。
pydantic
の下はv2のAPIですが、pydantic.v1
の下にv1のAPIが残っている- このおかげで、とりあえずv2まで上げることができる(v1のAPI使うけど)
- ツール
bump-pydantic
でv1からv2の書き方が指南される- 合わせて読みたい:マイグレーションガイド Migration Guide - Pydantic
v1のAPIを丸々移して残しておく、ドキュメントだけでなくツールでもマイグレーションをサポートする、この2点はOSS開発としてうまいな〜と思いました。