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 で検索してみる。

github.com

似たような問題を発見。これの下の方を読んでるとキャッシュ消したら解決したという情報が。

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 に限らず、インストールで問題が起きたらとりあえずキャッシュを消してみるといいかもしれない。