環境
まあバージョンはあまり関係ないと思いますが。
- Fedora 31 (WSL1)
- Homebrew 2.5.2
- Python 3.8.5
- docker-compose 1.27.3
問題発生
Homebrew、Macは手元にないので Linuxbrew ですけど、で入れた docker-compose で次のエラーがでました。
ModuleNotFoundError: No module named 'invoke'
これは ~/.ssh/config の Match で exec が使用されていると発生します。
原因
paramiko でいくつかの依存パッケージがオプショナルになっており Match exec を使うためには invoke が必要なためです。
Linuxbrew で pyinvoke を入れれば大丈夫なのかと思ったのですが、ダメでした。
brew install pyinvoke
Python のことはよくわからないですが、それぞれ別の virtualenv だから、とかなのでしょうか。たぶん。
解決
docker-compose をインストールしたときに依存で入った python3 の pip3 で invoke をインストールすれば大丈夫です。
念のため python3 や pip3 が Linuxbrew のものになっているか確認します。
which python3 pip3
もしこれが /usr/bin/python3
や /usr/bin/pip3
になるなら invoke のインストールための pip コマンドは絶対パスで指定すると良いでしょう。
/home/linuxbrew/.linuxbrew/bin/pip3 install invoke
さいごに
~/.ssh/config で Match の exec とか使う人あまりいないのでしょうか。。。ちなみに Github の Releases からバイナリをダウンロードしたときは発生しません。これは pyinstaller というものでワンバイナリになっているようなのですが、何が違うんでしょう? 謎。