【Tips】Mac OS X El CapitanでpipでのAWS CLIのインストール/アップデートが失敗するときの対処法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

森永です。

El Capitanにしてからハマったので備忘として記述しておきます。

問題

El Capitanにしてから、AWS CLIをアップデートしました。
するとエラーが…

$ sudo pip install --upgrade awscli
...
(略)
...
Installing collected packages: six, python-dateutil, botocore, s3transfer, colorama, awscli
  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 317, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 736, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 742, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
    os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/tmp/pip-xZKz8y-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'

エラーを読んでみると、

sixというパッケージが1.4で古いので、1.5にアップデートするね!
→ 1.4はアンインストールしちゃうぞ!
→ 1.4アンインストール出来なかったよ…
→ インストール失敗

という流れのようです。

解決方法

sixをアップデートすればいいのかと思ってましたが、AWSのドキュメントに以下の記載がありました。

On OS X, if you see an error regarding the version of six that came with distutils in El Capitan, use the --ignore-installed option:

$ sudo pip install awscli --ignore-installed six

--ignore-installed sixということでsixは無視しちゃっていいようです。

上記はインストール時ですが、アップデート時は以下のように実行すれば正常にアップデートできました。

$ sudo pip install --upgrade awscli  --ignore-installed six

ちなみに、EB CLIも同じエラーが出ますので、同様の方法で回避できます。

$ sudo pip install --upgrade awsebcli --ignore-installed six

さいごに

Macならhomebrewでもいけるようなのでそちらを使うのもありですが、最新版を使いたいという場合はpipじゃないと対応していない可能性がありますので注意が必要です。
楽しいCLIライフを!