【トラブル】pip install wheelファイル で Read time out が発生する

■ はじめに

 Amazon EMR(外部接続不可) に
wheelファイルを pip install しようとした時に
エラー「Read time out」が発生したので、その際の出来事をメモする

目次

【1】概要
【2】原因
 補足:問題の切り分けに使ったコマンド「--no-deps」
【3】解決案
 補足:boto3をEMRにネットワーク経由せずにインストールするには

【1】概要

 外部接続不可の Amazon EMR に対して、
S3上にある Python の wheelファイルをダウンロードして
(今回の場合、boto3 「boto3-1.17.107-py2.py3-none-any.whl」)
pip install した際にエラー「Read time out」が発生した。

 ローカルファイルにあるものをインストールしているのに
なぜ外部ネットワークに繋ぐって(当初は)思ってしまった。。。

コマンド / エラー内容例

$ aws s3 cp s3://your-bucket-name/xxx/boto3-1.17.107-py2.py3-none-any.whl ./
download: s3://your-bucket-name/xxx/boto3-1.17.107-py2.py3-none-any.whl to ./boto3-1.17.107-py2.py3-none-any.whl

$ sudo pip-3.6 install boto3-1.17.107-py2.py3-none-any.whl
Processing ./boto3-1.17.107-py2.py3-none-any.whl
Collecting botocore<1.21.0> >= 1.20.107 (from boto3==1.17.107)
  Retrying (Retry(total=4, connectNone, read=None, readirect=None, status=None))
 after connection broken by 'ReadTimeoutError("HTTPSConnectionPool
 (host='pypi.python.org', port=443); Read time out. (read timeout=15)",)": /simple/s3transfer/
  Retrying (...

【2】原因

 インストールしたWheelファイルの依存するモジュールが
現状の環境にインストールされていない又は必要バージョン未満だったため。
 => エラーのこの部分「Collecting botocore<1.21.0> >= 1.20.107 (from boto3==1.17.107)」

 その結果、pip install で取得しに行こうとして、
外部ネットワークに繋がらないので、エラーになっていた。

補足:問題の切り分けに使ったコマンド「--no-deps」

 問題の切り分けに、
依存パッケージをインストールしないオプション「--no-deps」
を付加して実行したらすんなりインストールできた。

https://e-tec-memo.herokuapp.com/article/295/

コマンド例

# 「--no-deps」を付加
$ sudo pip-3.6 install --no-deps boto3-1.17.107-py2.py3-none-any.whl

# これでエラーが起こらずにインストールできたら、同じ現象かと思います。

【3】解決案

1)外部ネットワークに接続できるように交渉する
2)インストールされているAMIを作成しそれをもとにEMRを作成する
3)依存関係のパッケージを地道にダウンロードしてくる
4)boto3を使わずに AWS CLIで頑張る

などなど...

補足:boto3をEMRにネットワーク経由せずにインストールするには

「3)依存関係のパッケージを地道にダウンロードしてくる」を選択した場合
以下の依存パッケージを順番にインストール(★)する必要がある

★2021/07/10追記
 「順番にインストール」と書いたが
順番を気にせずインストールする方法を以下の関連記事に記載した。

オフライン環境下で pip install するには
https://dk521123.hatenablog.com/entry/2021/07/10/164833

上記の実行環境で「boto3-1.17.107-py2.py3-none-any.whl」を
ネットワーク経由せずにインストールするには、
以下を順番にpip3 インストールする必要があった。
(Try-And-Errorで地道に依存パッケージを調べていった)

 実行環境(以下「実行環境」を参照)や
インストールするパッケージにより他にも必要かも。

boto3に必要な依存パッケージ

1)python-dateutil (botocoreの依存パッケージ)

https://pypi.org/project/python-dateutil/

2)urllib3 (botocoreの依存パッケージ)

https://pypi.org/project/urllib3/

3)botocore (boto3の依存パッケージ)

https://pypi.org/project/botocore/

4)s3transfer (boto3の依存パッケージ)

https://pypi.org/project/s3transfer/

実行環境

Amazon EMR : emr-5.29.0
Python3 : v3.6.8
Python : v2.7.16

関連記事

パッケージ管理 ~ pip / wheel, egg ~
https://dk521123.hatenablog.com/entry/2019/11/09/001342
オフライン環境下で pip install するには
https://dk521123.hatenablog.com/entry/2021/07/10/164833
仮想環境 ~ pyenv / virtualenv / venv / pipenv ~ https://dk521123.hatenablog.com/entry/2020/02/11/141852
egg / wheel ファイルを作成する
https://dk521123.hatenablog.com/entry/2020/02/09/234350