はじまる

適当な事を適当に書く

AWS CLI で利用する Python を変更する

動機

aws cli をアップデートしたら動かなくなってしまった(確か)

経緯はうろ覚えだけど、動かなくなってしまった。バタバタしてて放置してたんだけど、さすがに必要になったので、対応する

~ ❯ python --version
Python 2.7.15
~ ❯ which python
/usr/local/bin/python
~ ❯ aws
zsh: /usr/local/bin/aws: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory
~ ❯

aws コマンドがみにいくpython の場所を変えられればいいのだが。

ちなみにマシンはだいたいこんな感じ

~ ❯ uname -rsvp
Darwin 17.5.0 Darwin Kernel Version 17.5.0: Mon Mar  5 22:24:32 PST 2018; root:xnu-4570.51.1~1/RELEASE_X86_64 i386

そもそも AWS CLI どうやってインストールしたんだっけ

aws cli は pip でインストールしたように記憶している。確認したら pip (python2系の方)だった。

~ ❯ pip list|grep aws
awscli                        1.16.43

pip3 にはいない

~ ❯ pip3 list
Package    Version
---------- -------
nose       1.3.7
numpy      1.15.2
pip        18.0
setuptools 40.4.3
wheel      0.32.0

python は homebrew でインストールしていたやつのようだ

~ ❯ ls -al /usr/local/bin/python
lrwxr-xr-x  1 ore  admin  38 10 22 14:49 /usr/local/bin/python -> ../Cellar/python@2/2.7.15_1/bin/python

なんか2個ある。python が3系で python@2 が2系の様子。

~ ❯ brew list |grep python
python
python@2

AWS CLI で利用する Python を変更する

普通にアンインストールする

アンインストールしてインストールしなおしちゃえ

~ ❯ pip uninstall awscli
Uninstalling awscli-1.16.43:
  Would remove:
    /Users/ore/Library/Python/2.7/bin/aws
    /Users/ore/Library/Python/2.7/bin/aws.cmd
    /Users/ore/Library/Python/2.7/bin/aws_bash_completer
    /Users/ore/Library/Python/2.7/bin/aws_completer
    /Users/ore/Library/Python/2.7/bin/aws_zsh_completer.sh
    /Users/ore/Library/Python/2.7/lib/python/site-packages/awscli-1.16.43.dist-info/*
    /Users/ore/Library/Python/2.7/lib/python/site-packages/awscli/*
Proceed (y/n)? y
  Successfully uninstalled awscli-1.16.43

/Users/ore/Library/Python/2.7/bin/ のしたは消えたけど、bin のしたは残ったまま

~ ❯ which aws
/usr/local/bin/aws
~ ❯ aws
zsh: /usr/local/bin/aws: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory

お前は誰なんだ

~ ❯ ls /usr/local/opt/python
Frameworks            INSTALL_RECEIPT.json  Python Launcher 3.app bin                   libexec
IDLE 3.app            LICENSE               README.rst            lib                   share
~ ❯ cd bin
bin ❯ ls
digdag pack
bin ❯

お前は誰なんだ2

bin ❯ ll /usr/local/bin/|grep aws
-rwxr-xr-x    1 ore  admin       834  6 18 14:06 aws
-rwxr-xr-x    1 ore  admin      1432  6 18 14:06 aws.cmd
-rwxr-xr-x    1 ore  admin       204  6 18 14:06 aws_bash_completer
-rwxr-xr-x    1 ore  admin      1155  6 18 14:06 aws_completer
-rwxr-xr-x    1 ore  admin      1807  6 18 14:06 aws_zsh_completer.sh

おりゃー!

bin ❯ sudo rm /usr/local/bin/aws*
Password:
bin ❯ ll /usr/local/bin/|grep aws
bin ❯ aws
zsh: command not found: aws
bin ❯

AWS CLI を再インストール

macOS で AWS Command Line Interface をインストールする - AWS Command Line Interface 上記をみながら再インストール。前回は pip 経由でインストールしたようだが(あまり覚えていない)、今回はバンドルインストーラ(昔はなかった)でインストールしたい。リンク先はpyhton3推奨のような書き方になっているが、自分が python は2系を利用したいので、そこだけ変更する。といっても、/usr/local/bin/pythonが2系を向いているので、awsコマンドがちゃんとそこを参照できるようになればいいだけ。

とりあえずダウンロード&解凍

~ ❯ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10.5M  100 10.5M    0     0   320k      0  0:00:33  0:00:33 --:--:--  628k
~ ❯ unzip awscli-bundle.zip
Archive:  awscli-bundle.zip
  inflating: awscli-bundle/install
  inflating: awscli-bundle/packages/docutils-0.14.tar.gz
  inflating: awscli-bundle/packages/python-dateutil-2.6.1.tar.gz
  inflating: awscli-bundle/packages/awscli-1.16.57.tar.gz
  inflating: awscli-bundle/packages/urllib3-1.24.1.tar.gz
  inflating: awscli-bundle/packages/jmespath-0.9.3.tar.gz
  inflating: awscli-bundle/packages/argparse-1.2.1.tar.gz
  inflating: awscli-bundle/packages/ordereddict-1.1.tar.gz
  inflating: awscli-bundle/packages/six-1.11.0.tar.gz
  inflating: awscli-bundle/packages/simplejson-3.3.0.tar.gz
  inflating: awscli-bundle/packages/colorama-0.3.9.tar.gz
  inflating: awscli-bundle/packages/python-dateutil-2.7.5.tar.gz
  inflating: awscli-bundle/packages/virtualenv-15.1.0.tar.gz
  inflating: awscli-bundle/packages/futures-3.2.0.tar.gz
  inflating: awscli-bundle/packages/s3transfer-0.1.13.tar.gz
  inflating: awscli-bundle/packages/urllib3-1.22.tar.gz
  inflating: awscli-bundle/packages/rsa-3.4.2.tar.gz
  inflating: awscli-bundle/packages/PyYAML-3.13.tar.gz
  inflating: awscli-bundle/packages/botocore-1.12.47.tar.gz
  inflating: awscli-bundle/packages/pyasn1-0.4.4.tar.gz
  inflating: awscli-bundle/packages/setup/setuptools_scm-1.15.7.tar.gz

いけー

~ ❯ sudo /usr/local/bin/python awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Password:
Running cmd: /usr/local/opt/python@2/bin/python2.7 virtualenv.py --no-download --python /usr/local/opt/python@2/bin/python2.7 /usr/local/aws
Running cmd: /usr/local/aws/bin/pip install --no-cache-dir --no-index --find-links file:///Users/ore/awscli-bundle/packages/setup setuptools_scm-1.15.7.tar.gz
Running cmd: /usr/local/aws/bin/pip install --no-cache-dir --no-index --find-links file:///Users/ore/awscli-bundle/packages awscli-1.16.57.tar.gz
You can now run: /usr/local/bin/aws --version

えいっ

~ ❯ aws --version
aws-cli/1.16.57 Python/2.7.15 Darwin/17.5.0 botocore/1.12.47

なおったーよかったー。ちなみに、AWS CLI が利用するpyhtonは、AWS CLI のインストール時に指定するので(作用際はリンク先のAWSの記事参照)、アンインストール&再インストールが正解。

注記

デフォルトでは、インストールスクリプトはシステムのデフォルトバージョンの Python で実行されます。別のバージョンの Python がインストールされており、それを使用して AWS CLI をインストールする場合は、Python の実行可能ファイルへの絶対パスを指定してそのバージョンでインストールスクリプトを実行します。以下に例を示します。

$ sudo /usr/local/bin/python2.7 awscli-bundle/install -i /usr/local/aws -b /usr/local/b