Offline Python環境の構築 (For CentOS7)


- Offline環境にあるCentOS7のシステムpythonに対して、所望のパッケージを入れることを目的とします。
- はじめにOnline環境において所望のpython関連パッケージをダウンロードしますが、AWSのCentOS7の最新イメージ上で行うこととします。


Pythonの必要パッケージのダウンロード(オンライン環境)
===========================================

事前準備
-------------------------------------

あらかじめインストールされていないrpmパッケージをyumでインストールします。

```bash:command
sudo yum install -y git
sudo yum install -y zlib-devel
sudo yum install -y openssl-devel
sudo yum install -y sqlite-devel.x86_64
sudo yum install -y xz-devel
sudo yum install -y tree
```

以下の作業はオンライン環境にあるCentOS7の環境で実施してください。

pyenvのインストール
----------------------------

### pyenvのインストール

[pyenvのgithub](https://github.com/pyenv/pyenv)に従って、pyenvをインストールします。[Basic GitHub Checkout](https://github.com/pyenv/pyenv#basic-github-checkout)のセクションから進めてください。

### pyenvの有効化

terminalを新しくするか、以下のコマンドでインストールしたpyenvを有効化してください。

```bash:command
source .bash_profile 
```

python 3.6.8 のインストール
----------------------------

今回はOffline環境のCentOS7の system pythonのバージョンに一致するために、`3.6.8` をインストールしてみます。

### インストール可能バージョンの確認

インストール可能なバージョンとして、`3.6.8` があることを確認します。

```bash:command
pyenv install --list
```

### 3.6.8 のインストール

`3.6.8` をインストールします。

```bash:command
pyenv install 3.6.8
```

```terminal
Downloading Python-3.6.8.tar.xz...
-> https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
Installing Python-3.6.8...
Installed Python-3.6.8 to /home/centos/.pyenv/versions/3.6.8
```

### pyenv でインストールした 3.6.8 への切り替え


system pythonから `3.6.8` への切り替え

```bash:command
pyenv global 3.6.8
```

正しく切り替わったことの確認

```bash:command
pyenv versions
```

```terminal
  system
* 3.6.8 (set by /home/centos/.pyenv/version)
```

正しくインストールされていることを確認します。

```bash:command
python -VV
```

```terminal
Python 3.6.8 (default, Jan  4 2022, 09:23:47) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
```


必要パッケージのインストール
-----------------------------------------


### `pip` のupdate

```bash:command
pip install --upgrade pip
```

### 現状のインストールされたパッケージの確認

```bash:command
pip freeze
```

```terminal
(返り値なし)
```

### パッケージのインストール

```bash:command
pip install pandas
pip install pip-licenses
pip install pipdeptree
pip install seaborn
pip install scikit-learn
pip install jupyterlab
```

インストールパッケージ一覧のダウンロード
---------------------------------------

### インストールされているパッケージの一覧作成

```bash:command
pip freeze > requirements.txt
cat requirements.txt
```

### パッケージのダウンロード

```bash:command
mkdir -p src
pip download --dest=src -r requirements.txt
```

### get-pip.pyのダウンロード

これは、offline環境にpipが使えない場合、必要となります。

```bash:command
curl https://bootstrap.pypa.io/get-pip.py -o src/get-pip.py
```

パッケージのインストール (オフライン環境)
=============================================

以下の作業はオフライン環境にあるCentOS7の環境で実施してください。

テストとして先程のオンライン環境でOffline環境での作業内容を確認する場合は以下を実行し、クリーンなpython環境に戻してテストすると良いでしょう。

- `pyenv uninstall 3.6.8`
- `pyenv install 3.6.8`

必要ファイルの持ち込み
---------------------

上記で作成した以下のファイル/ディレクトリをOff-Line環境に持ち込みます。

- requirements.txt
- src
- get-pip.py

インストール
---------------------


### ファイルPATHを定義

PATHを定義

```bash:command
SRC="src/"
REQUIREMENTS="./requirements.txt"
PIP="src/get-pip.py"
```

PATHの確認

```bash:command
ls -l ${SRC} | grep -e ".whl" -e ".gz"
ls -l ${PIP}
ls -l ${REQUIREMENTS}
```

### pipのインストール or Update

```bash:command
python3 ${PIP} --no-index --find-links=${SRC}
```

### パッケージのインストール

-m オプションに関しては "[Pythonの「-m」オプションについて](https://nade-nadegata.hatenablog.jp/entry/2018/12/31/093750)"を参照してください。

```bash:command
python3 -m pip install --no-index --find-links=${SRC} -r ${REQUIREMENTS}
```

### インストールパッケージの確認

```bash:command
pip freeze
```