M1 MacでODriveを動かすには
エラー内容
新しく買ったM1チップMacbook Pro上でODriveを使おうと,ODrive Documentation:Getting Startedに従って
$ odrivetool
として起動しようとすると以下のようにエラーが出ました.
従来のIntelチップ版ではこのエラーは出ないですし,その解決方法を調べてもほとんど出てこないので,今回試した解決過程を記しておきます.
環境
- 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 [email protected]
としてPython3.8を指定してインストールした方がいいのかもしれないのですが,そうすると逆にM1チップではnumpyのビルドに失敗します.(4/11/2021現時点でMatplotlibは動くので問題ないでしょう このissueで大丈夫だと答えてもらったので問題ないでしょう)
現在のシェルでこのpythonを使うためにはパスを通す必要があります.
pyenvと同じ感じでディレクトリに入ったときにpythonを切り替えられれば理想ですが,それを模して,以下のようなシェルスクリプトを作っておけば便利でしょう.
# use python3.9 installed from homebrew
export PATH=/opt/homebrew/opt/[email protected]/libexec/bin:$PATH
これを実行することで,さっきインストールしたPython3.9が使えるようになります.
$ . ./setup.sh
$ which python
/opt/homebrew/opt/[email protected]/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
を起動することができました!
[Troubleshooting] IPythonのパスが間違っている
たまに,先ほどのエラーとは別に,以下のようなWarningが出ることがあります.
これは,odrive
の中身で起動させるIPython
が,venvの中のものと別のものを起動させてしまっているというWarningです.
試しに
$ which odrivetool
/opt/homebrew/bin/odrivetool
として調べてみると,venvの中でpipで入れたodrive
を差しておらず,別の場所にある(おそらく色々といじっているときに入れたであろうhomebrew以下の)odrive
を叩いてしまったがために,その中身で起動するIPython
もvenv外のものになってしまっています.
これを,venvをactivateしている状態で起動してしまったので,上のようなWarningが出ているのではないかと思います.
これを解消するには,以下のようにrehash
コマンドを打ってコマンドを登録し直しましょう.
$ rehash
そうすると,venv内のodrive
が叩かれるようになり,正しく起動するようになります.
参考サイト
Author And Source
この問題について(M1 MacでODriveを動かすには), 我々は、より多くの情報をここで見つけました https://qiita.com/ketaro-m/items/4f341ff8fa020f72464b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .