猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

bad interpreter: /usr/local/opt/python/bin/python3.7: no such file or directory

f:id:yoshiki_utakata:20201223070102j:plain

先日、 AWS CLI や AWS EB CLI を利用しようとしたらエラーになった。

$ eb list
zsh: /Users/yoshiyuki_sakamoto/Library/Python/3.7/bin/eb: bad interpreter: /usr/local/opt/python/bin/python3.7: no such file or directory

/Users/yoshiyuki_sakamoto/Library/Python/3.7/bin/eb にある eb コマンドが /usr/local/opt/python/bin/python3.7 を参照しようとして死んでいる。

私は .zshrc で PATH を指定している。

export PATH=$PATH:/Users/yoshiyuki_sakamoto/Library/Python/3.7/bin

また、 Python は brew でインストールしているが、 brew のアップデートのタイミングで、 Python のバージョンが 3.7 から 3.9 にアップグレードされたようだ。そのタイミングで Python 3.7 は消えてしまっている。

$ ls /usr/local/opt/python/bin/
2to3@             idle3@            pip3.9*           python3@          python3.9-config@
2to3-3.9@         idle3.9@          pydoc3@           python3-config@   wheel3*
easy_install-3.9* pip3*             pydoc3.9@         python3.9@

対処

まず、Python 3.9 で awscli と awsebcli をインストールし直した。(インストールコマンドは AWS のドキュメントの通り)

最近の Mac だと python コマンドが python3 になっているが、私の Mac は古いので、 python コマンドが python2 、 python3 コマンドが python3 になっている。python3 に対応する pip は pip3 となっているので、 pip3 でインストールする。

$ pip3 install aws
$ pip3 install awsebcli --upgrade --user

Python 3.7 は消えて Python 3.9 になっていたので、PATH の設定を変更した。

export PATH=$PATH:/Users/yoshiyuki_sakamoto/Library/Python/3.9/bin

これで動くようになった。

aws --version
eb --version

補足

aws コマンドについては、 /usr/local/bin/aws が使われている事があり(もしかしたら eb もあるかもしれない)。こいつが Python 3.9 用にアップグレードされていない場合は、引き続き bad interpreter が続く場合がある。

どこの aws コマンドが使われているのかは下記で確認できる。

$ which aws

awscli をインストールし直しても引き続き bad interpreter になる場合は、 pip uninstall して pip install し直してみると良い。 pip uninstall / install のコマンドで /usr/local/bin/aws も更新されると思う。

$ pip3 uninstall awscli
Found existing installation: awscli 1.18.202
Uninstalling awscli-1.18.202:
  Would remove:
    /usr/local/bin/aws
    /usr/local/bin/aws.cmd
    /usr/local/bin/aws_bash_completer
    /usr/local/bin/aws_completer
    /usr/local/bin/aws_zsh_completer.sh
    /usr/local/lib/python3.9/site-packages/awscli-1.18.202.dist-info/*
    /usr/local/lib/python3.9/site-packages/awscli/*
Proceed (y/n)? y
  Successfully uninstalled awscli-1.18.202

もしどうしても更新されない場合は手動で削除したうえで、 pip install しなおす。

rm /usr/local/bin/aws
pip3 install awscli

完全に余談だが、僕の環境、なぜか pip コマンドが無い。なぜ...。

$ which pip
pip not found

$ which pip2
/usr/local/bin/pip2

$ which pip3
/usr/local/bin/pip3