この記事は公開されてから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ライフを!