はじめに
フリーズする理由はいろいろあるかもしれないが、今回Keyringへのアクセスでフリーズするという分かりにくい現象に遭遇したので、メモを残す。
環境
$ uname -srvm Linux 6.8.0-35-generic #35-Ubuntu SMP PREEMPT_DYNAMIC Mon May 20 15:51:52 UTC 2024 x86_64 $ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 24.04 LTS" $ python3 --version Python 3.12.3 $ poetry --version Poetry (version 1.8.3)
結論
環境変数PYTHON_KEYRING_BACKENDを以下のように引き渡して実行することで解決。
$ PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring poetry add [パッケージ名]
調査メモ
以下を実行したところ、永遠に終了しない。
$ poetry add [パッケージ名]
以下のようにキャッシュを消して再実行したが、永遠に終了しない。
# rm -rf ~/.cache/pypoetry/ $ poetry add [パッケージ名]
そのため、デバッグ情報を出力して再実行。
$ poetry -vvv add [パッケージ名] (中略) Checking if keyring is available [keyring:keyring.backend] Loading KWallet [keyring:keyring.backend] Loading SecretService [keyring:keyring.backend] Loading Windows [keyring:keyring.backend] Loading chainer [keyring:keyring.backend] Loading libsecret [keyring:keyring.backend] Loading macOS Using keyring backend 'SecretService Keyring'
Keying(あるいはその後)の処理でフリーズしているよう。 なので、poetry keyringというキーワードでググると、該当しそうな情報を発見。
コメントを確認すると、環境変数PYTHON_KEYRING_BACKENDをpoetryに引き渡すことで回避できるとある。 Issueは2020年にオープンされているが、今まで踏まなかったのが謎。