PrismaとそのPythonクライアントprisma-client-pyが気になっていたので触ってみたところ、prismaコマンド実行で少し躓いたのでメモ。
作業内容自体はQuickstartに沿ったものです。
その中でprisma generate
の実行時に下記のエラーに遭遇しました。
このエラー自体はApple siliconのmacOSに固有のエラーだと思います。
$ python3 -m venv venv
$ . venv/bin/activate
(venv) $ pip install prisma
# ここでQuickstartに沿ってschema.prismaを用意する
(venv)$ prisma generate
Prisma schema loaded from schema.prisma
Error: Generator at prisma-client-py could not start:
Traceback (most recent call last):
File "/Users/rhoboro/go/src/github.com/rhoboro/async-prisma/env/bin/prisma-client-py", line 5, in <module>
from prisma.cli import main
File "/Users/rhoboro/go/src/github.com/rhoboro/async-prisma/env/lib/python3.10/site-packages/prisma/__init__.py", line 11, in <module>
from ._config import config as config
File "/Users/rhoboro/go/src/github.com/rhoboro/async-prisma/env/lib/python3.10/site-packages/prisma/_config.py", line 8, in <module>
from pydantic import BaseSettings, Extra, Field
ImportError: dlopen(/Users/rhoboro/go/src/github.com/rhoboro/async-prisma/env/lib/python3.10/site-packages/pydantic/__init__.cpython-310-darwin.so, 0x0002): tried: '/Users/rhoboro/go/src/github.com/rhoboro/async-prisma/env/lib/python3.10/site-packages/pydantic/__init__.cpython-310-darwin.so' (mach-o file, but is an incompatible architecture (have (arm64), need (x86_64)))
Apple siliconはarm64なのでインストールされているバイナリは正しそうですが、なぜかx86_64のバイナリを求められている様子。 PyPI上にあるprisma-client-pyはwheelが提供されているが、これは py3-none-any でアーキテクチャに依存しないもの。
この辺りに不整合がありそうなので、prismaインストール時にローカルでビルドするよう指定したところうまくいきました。
(venv) $ deactivate
$ rm -rf venv
$ python3 -m venv venv
$ . venv/bin/activate
(venv) $ pip install prisma --no-binary :all:
(venv)$ prisma generate
Prisma schema loaded from schema.prisma
✔ Generated Prisma Client Python (v0.7.0) to ./venv/lib/python3.10/site-packages/prisma in 121ms
Prismaは初めて触ってみましたが、型がしっかり聞いていて結構よさそうな印象。 使い込んでみたいですね。
prisma-client-py自体はこの辺りのRustで作られた各種Engine(バイナリ)のWrapperになっていて、prisma generate
ではjinja2でスキーマファイル(schema.prisma)に対応する.pyファイル作ってるみたいですね。
マイグレーション周りが特定のプログラミング言語に依存しないのは個人的に嬉しいポイント。