AWS CLIをpipインストールした際にエラーとなった時の対処方法について

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

小ネタアンド備忘録です。

手元の環境でAWS CLIをpipインストール(というかアップグレード)した際にエラーが出て動かせなくなってしまい、下記手順にあるように--ignore-installed sixオプションを付けて再実行してみたものの上手く行かなかった、という環境から復旧した手順について、何かあった時の為にまとめておこうと思います。

経緯

切っ掛けは以下のような形でAWSコマンドを実行した際、以下の様な形で実行時エラーが出てしまっていた事が始まりでした。

$ aws --version
Traceback (most recent call last):
  File "/usr/local/bin/aws", line 19, in <module>
    import awscli.clidriver
  File "/Library/Python/2.7/site-packages/awscli/clidriver.py", line 17, in <module>
    import botocore.session
  File "/Library/Python/2.7/site-packages/botocore/session.py", line 26, in <module>
    import botocore.credentials
  File "/Library/Python/2.7/site-packages/botocore/credentials.py", line 22, in <module>
    from dateutil.parser import parse
  File "/Library/Python/2.7/site-packages/dateutil/parser.py", line 43, in <module>
    from . import tz
  File "/Library/Python/2.7/site-packages/dateutil/tz/__init__.py", line 1, in <module>
    from .tz import *
  File "/Library/Python/2.7/site-packages/dateutil/tz/tz.py", line 23, in <module>
    from ._common import tzname_in_python2, _tzinfo, _total_seconds
  File "/Library/Python/2.7/site-packages/dateutil/tz/_common.py", line 2, in <module>
    from six.moves import _thread
ImportError: cannot import name _thread

以下の様にインストールし直してみたものの結果は変わらず、でした。

$ sudo pip uninstall awscli
$ sudo pip install awscli --ignore-installed six
The directory '/Users/xxxxxxx/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
You are using pip version 7.0.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The directory '/Users/xxxxxxx/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting awscli
  Downloading awscli-1.11.18-py2.py3-none-any.whl (1.0MB)
    100% |████████████████████████████████| 1.0MB 280kB/s 
Collecting six
  Downloading six-1.10.0-py2.py3-none-any.whl
  :
  :
Installing collected packages: futures, jmespath, six, python-dateutil, docutils, botocore, s3transfer, pyasn1, rsa, colorama, awscli
  Running setup.py install for docutils
Successfully installed awscli-1.11.18 botocore-1.4.75 colorama-0.3.7 docutils-0.12 futures-3.0.5 jmespath-0.9.0 pyasn1-0.1.9 python-dateutil-2.6.0 rsa-3.4.2 s3transfer-0.1.9 six-1.10.0

対処方法

まず始めに上記インストール時に出ていたアラート文を解消するところから始めてみました。pipのバージョンが古いよ、最新バージョンが利用可能だよ、という事で、

You are using pip version 7.0.1, however version 9.0.1 is available.

以下のコマンドで最新バージョン9.0.1にアップグレード。pipのバージョンは特にこのままでも問題無く使えてたのであまり気にしてなかったのですが、この機に上げてみました。

$ sudo python -m pip install --upgrade pip
$ pip -V
pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7)

次いで下記のメッセージ。もしsudoでpipを実行してるのならば-Hオプションを付けて実行してね、とあります。

If executing pip with sudo, you may want sudo's -H flag.

という訳でsudoコマンドに-Hを付けて再インストール実施。

$ sudo pip uninstall awscli
$ sudo -H pip install awscli --ignore-installed six

ですが実行時のエラーはまだ出ています。エラー発生時のメッセーで調べてみると以下のエントリを発見。環境変数をEXPORTすれば解決するのでは、という記述が。

という訳で手元の設定ファイルに下記行を追記。

vi .bash_profile
----
export PYTHONPATH="/Library/Python/2.7/site-packages:$PYTHONPATH"
----
$ source .bash_profile

改めてaws cliコマンド実施。今度は上手く行きました。復旧完了です。

$ aws --version
aws-cli/1.11.18 Python/2.7.10 Darwin/14.5.0 botocore/1.4.75

まとめ

という訳でAWS CLI導入時に遭遇した実行エラーに関する対処方法のまとめでした。振り返ってみるとMac OSX関係ないんじゃないか、単純に環境変数の設定部分だけでも対応出来たんじゃねぇかみたいな感じもしますが気にしない事にします。こちらの対応方法がどなたかのお役に立ちましたら幸いです。こちらからは以上です。