AWS CLIをpipインストールした際にエラーとなった時の対処方法について
小ネタアンド備忘録です。
手元の環境で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関係ないんじゃないか、単純に環境変数の設定部分だけでも対応出来たんじゃねぇかみたいな感じもしますが気にしない事にします。こちらの対応方法がどなたかのお役に立ちましたら幸いです。こちらからは以上です。