LoginSignup
1
0

More than 3 years have passed since last update.

M1 MacでODriveを動かすには

Last updated at Posted at 2021-04-10

エラー内容

新しく買ったM1チップMacbook Pro上でODriveを使おうと,ODrive Documentation:Getting Startedに従って

$ odrivetool

として起動しようとすると以下のようにエラーが出ました.
従来のIntelチップ版ではこのエラーは出ないですし,その解決方法を調べてもほとんど出てこないので,今回試した解決過程を記しておきます.
Screen Shot 2020-05-21 at 5.31.42.png

環境

  • Apple M1 chip Macbook Pro
  • macOS Big Sur 11.2.3

解決法

問題は,odrivetoolを立ち上げる中身でpyusbというライブラリを使用しているのですが,そのときに使用されるlibusbというパッケージが上手く見つけられていないということらしいです.
libusbはHomebrewによって以下のようにインストールするようにドキュメントに書かれているのですが,M1チップとIntelチップではHomebrewのパスが異なる1ので,おそらくこの違いのせいでpyusbから上手く見つけられていないのではないかと思います.

$ brew install libusb

Homebrew経由でインストールしたPythonを使う

Pythonのインストールには様々な方法がありこのサイトによくまとまっています.
Python環境作りのベストプラクティスが何かは分かりませんが,個人的にはpyenv+venvでプロジェクトごとに環境を作っていました.
しかしあくまで推測ですが,今回の問題はHomebrewのパッケージを上手く使えていないということなので,Homebrew経由で,/opt/homebrew以下にインストールしたPythonを使うという方針で行きます.そのPythonなら,opt/homebrew/opt/libusbを見つけられるのではないかという希望を込めて.
このissueにもそのように書かれているので,おそらくはできるのだと思います.

インストールは,以下のコマンドを叩いて最新のPython3.9をインストールすれば良いです.

$ brew install python

ODriveのインストールページには,

As of Oct 2020, Matplotlib (required by odrivetool) had not been updated to work with 3.9, so please use 3.8.6.

と書いてあるので,brew install python@3.8としてPython3.8を指定してインストールした方がいいのかもしれないのですが,そうすると逆にM1チップではnumpyのビルドに失敗します.(4/11/2021現時点でMatplotlibは動くので問題ないでしょう このissueで大丈夫だと答えてもらったので問題ないでしょう)

現在のシェルでこのpythonを使うためにはパスを通す必要があります.
pyenvと同じ感じでディレクトリに入ったときにpythonを切り替えられれば理想ですが,それを模して,以下のようなシェルスクリプトを作っておけば便利でしょう.

setup.sh
# use python3.9 installed from homebrew
export PATH=/opt/homebrew/opt/python@3.9/libexec/bin:$PATH

これを実行することで,さっきインストールしたPython3.9が使えるようになります.

$ . ./setup.sh
$ which python
/opt/homebrew/opt/python@3.9/libexec/bin/python
$ python --version
Python 3.9.4

参考サイト

venvにpipでODriveをインストール

あとは公式ドキュメントの通り進めていくだけです.venvを作って,pipでODriveをインストールしましょう.

$ python -m venv .venv
$ source .venv/bin/activate
(.venv)$ pip install --upgrade odrive

すると,先程のエラーはなくodrivetoolを起動することができました!
Screen Shot 2020-05-21 at 5.31.42.png

[Troubleshooting] IPythonのパスが間違っている

たまに,先ほどのエラーとは別に,以下のようなWarningが出ることがあります.
Screen Shot 2020-05-21 at 5.31.42.png
これは,odriveの中身で起動させるIPythonが,venvの中のものと別のものを起動させてしまっているというWarningです.
試しに

$ which odrivetool
/opt/homebrew/bin/odrivetool

として調べてみると,venvの中でpipで入れたodriveを差しておらず,別の場所にある(おそらく色々といじっているときに入れたであろうhomebrew以下の)odriveを叩いてしまったがために,その中身で起動するIPythonもvenv外のものになってしまっています.
これを,venvをactivateしている状態で起動してしまったので,上のようなWarningが出ているのではないかと思います.

これを解消するには,以下のようにrehashコマンドを打ってコマンドを登録し直しましょう.

$ rehash

そうすると,venv内のodriveが叩かれるようになり,正しく起動するようになります.

参考サイト


  1. M1チップでは/opt/homebrew以下に,Intelチップでは/usr/localにインストールされます.(参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0