#19 pipのReadTimeoutError対策 (certbot-auto)

 [公開]
icon incmplt が 2020/06/30 10:47 に投稿 ( icon incmplt が 2020/06/30 10:49 に編集 <更新履歴> )
  投稿を編集(サインイン)
  ストック
  アンケート回答

  目次

Pythonを使用して pipからモジュールをインストールする時、次のようなエラーでインストールが失敗することがある。

raise ReadTimeoutError(self._pool, None, 'Read timed out.')
requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(Host='pypi.python.org', port=443): Read timed out.

このエラーは、Let's Encryptで証明書の取得や更新に使用する certbot-autoで virtualenv から pipをインストールするときにも発生する。

コンソールでインストール失敗の場合には、判りやすいですが Let's Encrypt の自動更新の処理で失敗している事に気がつかないと、いつのまにか証明書が無効になっていたという事故になる。

pip を更新することで問題が解決する場合がありますが、再発するようであれば以下の対策を実施する。

pip ReadTimeoutErrorの対策

pip の ReadTimeoutError は、指定した時間内にモジュールを取得できなかった場合に発生する。

コマンドラインのインストールの場合には、次のようにしてタイムアウトを長くすることができる。

sudo pip --default-timeout=1000 install [MODULE_NAME]

certbot-autoでの対策:常にタイムアウトを長く

certbot-auto など、cronで自動処理する場合には certbot-auto を書き換えるのではなく、実行するユーザーの .bashrc などで次のように環境変数を定義する。

export PIP_DEFAULT_TIMEOUT=100

今回は PIP_DEFAULT_TIMEOUT で 100(秒)を設定した。
処理に失敗しないように確実にインストールしたい場合には、1000(秒)などもっと長いタイムアウトを指定することもできる。

 添付ファイル     - [0]


 コメント追加