■ はじめに
https://dk521123.hatenablog.com/entry/2021/07/08/161406
https://dk521123.hatenablog.com/entry/2021/07/09/115553
で 外部ネットワーク が繋がらない状態で、 個別で pip install とした際に、依存するパッケージを先に 入れておかなくてはならない。 そのため、インストール順番を間違えた場合、 エラーになってしまうが、調べていたら、 オフライン環境下での pip install があったのでメモしておく これがあれば、依存パッケージを適切に配置しておけば インストール側は、1回のコマンド実行でよく、 依存パッケージを意識する必要がなくなる。
目次
【1】オフライン環境下での pip install 1)--no-index 2)-f, --find-links <url> 【2】インストール手順例 1)対象モジュールをダウンロードする 2)対象モジュールを任意ディレクトリに置く 3)pip install (--no-index / --find-links) でインストールする 【3】おまけ:EMRのブートストラップアクションでの適用
【1】オフライン環境下での pip install
pip install --no-index --find-links=[ローカルディレクトリ先] [パッケージ名]
1)--no-index
https://kurozumi.github.io/pip/reference/pip_wheel.html#no-index
Ignore package index (only looking at --find-links URLs instead). パッケージインデックスを無視する (代わりに--find-linksのURLだけを見る)
2)-f, --find-links
https://kurozumi.github.io/pip/reference/pip_wheel.html#find-links
If a url or path to an html file, then parse for links to archives. もし、URL又はHTMLファイルを指定した場合 その際は、アーカイブするためにリンクをパースする If a local path or file:// url that's a directory, then look for archives in the directory listing. もし、ローカルパス又はfile://<ディレクトリ> を指定した場合 その際は、ディレクトリリスト内でアーカイブを探す
【2】インストール手順
1)対象モジュールをダウンロードする 2)対象モジュールを任意ディレクトリに置く 3)pip install (--no-index / --find-links) でインストールする
開発環境
* OS : Windwos10 * Python : v3.6.13
1)対象モジュールをダウンロードする
対象モジュールおよび依存パッケージを含めて モジュール(tar.gz形式 又は whl形式)をダウンロードしておく => 今回は、tar.gz形式
boto3パッケージ
[1] boto3 => 今回の場合、「boto3-1.17.109.tar.gz」
https://pypi.org/project/boto3/
boto3に必要な依存パッケージ
[2] python-dateutil => 今回の場合、「python-dateutil-2.8.1.tar.gz」
https://pypi.org/project/python-dateutil/
[3] urllib3 => 今回の場合、「urllib3-1.26.6.tar.gz」
https://pypi.org/project/urllib3/
[4] botocore => 今回の場合、「botocore-1.20.109.tar.gz」
https://pypi.org/project/botocore/
[5] s3transfer => 今回の場合、「s3transfer-0.4.2.tar.gz」
https://pypi.org/project/s3transfer/
[6] jmespath => 今回の場合、「jmespath-0.10.0.tar.gz」
https://pypi.org/project/jmespath/
2)対象モジュールを任意ディレクトリに置く
依存パッケージも含めて、任意ディレクトリ内に tar.gz形式 又は whl形式のモジュールファイルを置く => 今回は、tar.gz形式
格納例
C:\tmp\pip_local\local_modules + boto3-1.17.109.tar.gz + python-dateutil-2.8.1.tar.gz + urllib3-1.26.6.tar.gz + botocore-1.20.109.tar.gz + s3transfer-0.4.2.tar.gz + jmespath-0.10.0.tar.gz
3)pip install (--no-index / --find-links) でインストールする
cd C:\tmp\pip_local pip install --no-index --find-links=local_modules boto3
【3】おまけ:EMRのブートストラップアクションでの適用
https://dk521123.hatenablog.com/entry/2021/07/09/115553
での「install_boto3.sh (外部ネットワークに繋がる場合)」を 外部ネットワークに繋がらないように書き返てみる
サンプル:install_boto3.sh (外部ネットワークに繋がらない場合)
#!/bin/bash INSTALL_MODULE_NAME="boto3" DIR_NAME="local_modules" # ディレクトリごとDownload する aws s3 cp s3://your-bucket-name/xxx/${DIR_NAME} ./${DIR_NAME} --recursive # pip install sudo pip-3.6 install --no-index --find-links=${DIR_NAME} ${INSTALL_MODULE_NAME}
参考文献
https://gammasoft.jp/blog/pip-install-from-local-archives-by-manually/
関連記事
パッケージ管理 ~ pip / wheel, egg ~
https://dk521123.hatenablog.com/entry/2019/11/09/001342
pip に関するあれこれ
https://dk521123.hatenablog.com/entry/2021/07/02/000000
仮想環境 ~ pyenv / virtualenv / venv / pipenv ~
https://dk521123.hatenablog.com/entry/2020/02/11/141852
egg / wheel ファイルを作成する
https://dk521123.hatenablog.com/entry/2020/02/09/234350
pip install wheelファイル で Read time out が発生する
https://dk521123.hatenablog.com/entry/2021/07/08/161406
Amazon EMR ~ EMR内部 から SES で Email を送る ~
https://dk521123.hatenablog.com/entry/2021/07/09/115553