Poetryでインストール時にTooManyRedirectsが起こるときの対処法
問題
二日前は成功していた pre-commit というライブラリのインストールが失敗するようになった。
$ poetry add -D pre-commit Creating virtualenv demo-py3.7 in /Users/kk6/sandbox/demo/.venv [TooManyRedirects] Exceeded 30 redirects. add [-D|--dev] [--git GIT] [--path PATH] [-E|--extras EXTRAS] [--optional] [--python PYTHON] [--platform PLATFORM] [--allow-prereleases] [--dry-run] [--] <name> (<name>)...
-vvv
を付けて再実行しtracebackを確認すると、どうやら requests
が発生させている例外の模様。ただ、それ以上はよくわからなかった。
$ poetry add -D pre-commit -vvv Using virtualenv: /Users/kk6/sandbox/python/precommit-demo/.venv [TooManyRedirects] Exceeded 30 redirects. Exception trace: /Users/kk6/.poetry/lib/poetry/_vendor/py3.7/cleo/application.py in run() at line 94 status_code = self.do_run(input_, output_) ... /Users/kk6/.poetry/lib/poetry/_vendor/py3.7/requests/sessions.py in resolve_redirects() at line 165 raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects, response=resp)
Issueを探る
とりあえずこういうときはIssueを覗いてみるのが一番。PoetryのIssueで TooManyRedirects
で検索してみる。
似たような問題を発見。これの下の方を読んでるとキャッシュ消したら解決したという情報が。
Poetryのキャッシュを削除する
Poetry でキャッシュを消すには cache:clear [--all] [--] <cache>
を実行する。<cache>
には対象のサーバー名を指定する。PyPIのキャッシュを消したいので以下のようにする。
$ poetry cache:clear pypi --all Delete 297 entries? (yes/no) [no] yes
キャッシュ削除後、ちゃんとインストールできた。
$ poetry add -D pre-commit Using version ^1.13 for pre-commit Updating dependencies Resolving dependencies... (4.8s) Package operations: 17 installs, 0 updates, 0 removals Writing lock file - Installing pyyaml (3.13) - Installing six (1.12.0) - Installing aspy.yaml (1.1.1) - Installing atomicwrites (1.2.1) - Installing attrs (18.2.0) - Installing cached-property (1.5.1) - Installing cfgv (1.1.0) - Installing identify (1.1.7) - Installing importlib-metadata (0.7) - Installing more-itertools (4.3.0) - Installing nodeenv (1.3.3) - Installing pluggy (0.8.0) - Installing py (1.7.0) - Installing toml (0.10.0) - Installing virtualenv (16.1.0) - Installing pre-commit (1.13.0) - Installing pytest (3.10.1)
TooManyRedirects に限らず、インストールで問題が起きたらとりあえずキャッシュを消してみるといいかもしれない。