Macを新しく買い替えた時、M1Chipを選択しました。人柱になるつもりでそうしましたが、やはり各所で色々と不具合が報告されていますね。
python3をインストールし、pytestを実施したのですが、次のようなエラーに遭遇しました。
mach-o file, but is an incompatible architecture (have ‘arm64’, need ‘x86_64’)
これをどうやって解決していいかわからずかなり立ち往生したので解決方法を記録しておこうと思います。
※もし間違っていたらお問い合わせからご指摘お願いします。。
目次
mach-o file, but is an incompatible architectureのエラーの詳細
私がpytestを実施したときは具体的にはこのようなエラーが出ました。
ImportError: dlopen(/レポジトリ/プロジェクト名/.venv/lib/python3.10/site-packages/_cffi_backend.cpython-310-darwin.so, 0x0002): tried: ‘/レポジトリ/プロジェクト名/.venv/lib/python3.10/site-packages/_cffi_backend.cpython-310-darwin.so’ (mach-o file, but is an incompatible architecture (have ‘arm64’, need ‘x86_64’))
have ‘arm64’, need ‘x86_64’の部分で、arm64を持っているけどx86_64がいるよと言われています。
スポンサーリンク
mach-o file, but is an incompatible architectureのエラーの原因
このエラーが出てしまう原因はIntelプロセッサ搭載Mac用に開発されたものをM1chipで使おうとしているためです。
まずM1chipは基本的にarmを採用しています。x86はM1chip以前のMacで使われたアーキテクチャです。
大まかな対応方針は以下の通りです。
・ロゼッタを入れてない場合はロゼッタを入れる
・一度エラーが出ているモジュールはアンインストールする
・必要なアーキテクチャで再インストールする
スポンサーリンク
mach-o file, but is an incompatible architectureのエラーの対処法
それでは具体的な対処法を見ていきましょう。
softwareupdate –install-rosetta
python3 -m pip uninstall cffi
arch -x86_64 python3 -m pip install cffi
softwareupdate –install-rosettaですが
Appleシリコンを搭載したMacでも、Intelプロセッサ搭載Mac用に開発されたAppを使えるようにするにはロゼッタを
ロゼッタをインストール必要があります。(Rossetta2)
参考:https://support.apple.com/ja-jp/HT211861
次に、python3 -m pip uninstall cffiの部分ですが、
アーキテクチャが違うと言われているので、まずアンインストールをします。
それからarch -x86_64 python3 -m pip install cffiの部分は
arch -x86_64という接頭辞を入れて、x86_64のアーキテクチャを指定して再度モジュールをダウンロードします。
cffiに限らず、「cpython-310-darwin.so」がエラー文中にありかつ、mach-o file, but is an incompatible architecture (have ‘arm64’, need ‘x86_64’)の場合はアンインストールからのneedの方のアーキテクチャを指定して、再インストールをしましょう。
例えばblackだと
ImportError: dlopen(/レポジトリ/プロジェクト名/.venv/lib/python3.10/site-packages/black/__init__.cpython-310-darwin.so, 0x0002): tried: ‘/レポジトリ/プロジェクト名/.venv/lib/python3.10/site-packages/__init__.cpython-310-darwin.so’ (mach-o file, but is an incompatible architecture (have ‘arm64’, need ‘x86_64’))
みたいな感じのエラーが出ていました。この場合も同様に
python3 -m pip uninstall black
arch -x86_64 python3 -m pip install black
最後に
M1chipでの不具合が色々とレポートされていますが、これから改善されていくことを願います。
この記事が誰かの役にたてば幸いです。