Poetry install が一生終わらない時

## 問題

既存の Poetry プロジェクトの依存パッケージをインストールしようとしたら、一生終わらなかった。

```sh
$ poetry install -vvv
Loading configuration file /home/kino-ma/.config/pypoetry/config.toml
Using virtualenv: /home/kino-ma/.cache/pypoetry/virtualenvs/***
Updating dependencies
Resolving dependencies...
   1: fact: *** is 0.1.0
   1: derived: ***
   1: fact: *** depends on fastapi (<=103)
   1: fact: *** depends on pydantic-settings (^2.0.3)
   1: fact: *** depends on uvicorn (^0.24.0)
   1: fact: *** depends on python-multipart (^0.0.6)
   1: selecting *** (0.1.0)
   1: derived: python-multipart (>=0.0.6,<0.0.7)
   1: derived: uvicorn (>=0.24.0,<0.25.0)
   1: derived: pydantic-settings (>=2.0.3,<3.0.0)
   1: derived: fastapi (<=103)
[keyring.backend] Loading KWallet
[keyring.backend] Loading SecretService
[keyring.backend] Loading Windows
[keyring.backend] Loading chainer
[keyring.backend] Loading libsecret
[keyring.backend] Loading macOS
# ここで止まる
```

特に CPU を使っている様子もなく、本当にインストール処理が走っているか怪しかった

## 環境

```
$ uname -a
Linux *** 5.4.0-155-generic #172-Ubuntu SMP Fri Jul 7 16:10:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
$ python3 --version
Python 3.8.10
$ pip3 --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip
$ pipx --version
1.2.1
$ poetry --version
Poetry (version 1.7.0)
```

## 解決

Poetry は、パッケージ公開機能を便利にするために OS のキーリングを読むらしい。

本来 install 処理にその挙動は必要ないはずだが、なんでか読みにいってしまい固まっている様子。

https://github.com/python-poetry/poetry/issues/1917#issuecomment-1235998997

上記コメントに解決策 (workaround) が書いてある。  
`PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring` と環境変数を設定すればキーリングを読まずに操作が行えるらしい。

```shell
$ PYTHON_KEYRING_BACKEND=keyring.backends.fail.Keyring poetry install -vvv
Loading configuration file /home/kino-ma/.config/pypoetry/config.toml
Using virtualenv: /home/kino-ma/.cache/pypoetry/virtualenvs/***
Updating dependencies
Resolving dependencies...
   1: fact: *** is 0.1.0
   1: derived: ***
   1: fact: *** depends on fastapi (<=103)
   1: fact: *** depends on pydantic-settings (^2.0.3)
   1: fact: *** depends on uvicorn (^0.24.0)
   1: fact: *** depends on python-multipart (^0.0.6)
   1: selecting *** (0.1.0)
   1: derived: python-multipart (>=0.0.6,<0.0.7)
   1: derived: uvicorn (>=0.24.0,<0.25.0)
   1: derived: pydantic-settings (>=2.0.3,<3.0.0)
   1: derived: fastapi (<=103)
No suitable keyring backend found
No suitable keyring backends were found
Keyring is not available, credentials will be stored and retrieved from configuration files as plaintext.
Creating new session for pypi.org
[urllib3.connectionpool] Starting new HTTPS connection (1): pypi.org:443
[urllib3.connectionpool] https://pypi.org:443 "GET /simple/python-multipart/ HTTP/1.1" 200 1399
[filelock] Attempting to acquire lock 22872701901696 on /home/kino-ma/.cache/pypoetry/cache/repositories/PyPI/_http/8/f/9/7/e/8f97ef75556783011e845ded3fc9022e2cd218389c6cb033450483a6.lock
[filelock] Lock 22872701901696 acquired on /home/kino-ma/.cache/pypoetry/cache/repositories/PyPI/_http/8/f/9/7/e/8f97ef755567830

# 中略...

Installing the current project: *** (0.1.0)
  - Building package *** in editable mode

The current project could not be installed: No file/folder found for package ***
If you do not want to install the current project use --no-root
```

すぐに終わった。

## 他に試したこと

自分には効かなかったが、誰かには効果があるかもしれないので残しておく。

### キャッシュ、 venv の削除

https://github.com/python-poetry/poetry/issues/3352#issuecomment-732761629

効果なし。

また、コメントでは `experimental.new-installer` とやらのコンフィグを削除するよう提案されているが、そもそもそんな機能はないと言って実行できなかった。  
ほかに IPv6 を無効化して解決したコメントも見受けられたが、操作対象ホストは IPv6 アドレスを持っていなかった。

```
$ poetry config experimental.new-installer true

Setting experimental.new-installer does not exist
```

### Poetry のアップグレード

https://github.com/python-poetry/poetry/issues/5490#issuecomment-1113494592

```
python3 -m pip install --upgrade virtualenv
```

効果なし。

そもそも最新版だった。

### ロックファイルの削除

https://qiita.com/ijufumi/items/367a4a0286b341e29b1b

効果なし。

## 余談

Poetry の依存解決が遅いという [issue](https://github.com/python-poetry/poetry/issues/2094) で PyPI の依存解決アルゴリズムがイケてないという指摘からディスカッションが大炎上していて興味深かった。