2022年7月6日での構築方法
M1チップ上ではsnowflake-connector-python
を普通にインストールする場合には動かないケースがある。
結論として
- venv(もしくはpipenv)でPython環境を作成する
-
pip install cffi==1.15.0
でcffiのversionを落とす
以上をすることで、M1 Macで動作させる事ができる。
発生したエラー1
MemoryError: Cannot allocate write+execute memory for ffi.callback(). You might be running on a system that prevents this. For more information, see https://cffi.readthedocs.io/en/latest/using.html#callbacks
Conda環境下やbrewでインストールしたPython環境下でpip install snowflake-connector-python
すると、上記のPyOpenSSLのエラーが発生します。
内容は以下のissueが該当します。
https://github.com/pyca/pyopenssl/issues/873
まだ解決されているわけではありませんが、venvを使った環境構築だとこのエラーが発生しないようです。
私は最初minicondaで構築していましたが、venvに変えると上記のエラーは発生しなくなりました。(謎)
python3 -m venv snowflake_env
のあとにsource snowflake_env/bin/activate
でさっと環境は作れます
発生したエラー2
venvで構築したら次のようなエラーに変わります。
ImportError: dlopen(/-----/-----/snowflake/lib/python3.8/site-packages/_cffi_backend.cpython-38-darwin.so, 0x0002): Library not loaded: @rpath/libffi.8.dylib
Referenced from: /----/----/snowflake/lib/python3.8/site-packages/_cffi_backend.cpython-38-darwin.so
これはcffiが参照するファイルが存在しないことで発生しています。
この問題はcffiのversionが1.15.0であれば発生しないことがわかってます。
(たまたま環境を移行する前に1.15.0でやっていました)
cffiは1.15.0でM1チップに対応していて、1.15.1へのアプデで不具合が出てるみたいですね。
まとめ
- venv(もしくはpipenv)でPython環境を作成する
-
pip install cffi==1.15.0
でcffiのversionを落とす
両者とも綺麗な解決策ではないですが、、この時期に同様のエラーに遭遇したユーザーの手助けになるようにおいておきます。