先日、 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