【pip+venv】データサイエンス環境構築 ～ JupyterLabの仮想環境の作業ページをすぐ起動できるようにする


# 経緯

Anacondaの商用利用は制限され、仕事で使いづらくなった。
condaの代わりの仮想環境管理ツールは、pip+venvが良いらしい。
そこで、自分用の手順をまとめた。


本手順で、以下のことができるようになる。

- プロジェクトごとに仮想環境を作成
- JupyterLabはショートカットから一発起動
- カーネルは、Jupyterに追加した仮想環境を選択して実行


# 想定環境
- Windows10 Pro
- Python 3.9.x

# 作業手順
## １．Pythonのインストール
公式ページからダウンロード・インストールする。
https://www.python.org/downloads/
※2022年2月17日時点：今回は最新バージョン（3.10.x）ではなく3.9x.をインストールした。pathlibがインストール出来なかったため。

## ２．ローカル環境の構築
ローカル環境はjupyterlabやpandasなどよく使うパッケージを入れておく。

| **作業内容**                        | **コマンド**                                                 | **備考**                                             |
| ----------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- |
| **pip****の更新**                   | `pip  install -U pip --user`                                   |                                                      |
| **ローカル環境の構築**              | `pip  install jupyterlab numpy pandas scipy scikit-learn statsmodels pandas-profiling matplotlib  seaborn jupyter ipykernel tqdm pathlib argparse pillow openpyxl xlrd bokeh  holoviews plotly graphviz pydot h5py html5lib json5 pyyaml protobuf pandoc  pep8 pytest beautifulsoup4 regex toml urllib3  diff-match-patch isort markdown  markdown2` | Anacondaでインストールされるパッケージを参考にした。 |

参考：Anacondaでデフォルト インストールされるパッケージのリスト
https://docs.anaconda.com/anaconda/packages/py3.9_win-64/

## ３．仮想環境の構築
新しくプロジェクトを作るたびに、以下のコマンドを実行する。

| **作業**                                 | **コマンド**                                                 | **備考**                                                     |
| ---------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **（コマンドプロンプト起動）**           | `cmd`                                                          | PowerShellで作業中の場合。PowerShellでは、次のactivateスクリプトが実行できないため。 |
| **仮想環境の作成**                       | `python  -m venv venv`                                         | 環境名をvenvにした理由<br>  ・基本的にプロジェクトに仮想環境は１つだけのため。<br>  ・プロジェクトルートの仮想環境フォルダ名がvenvとなり、venvを使っているのが一目でわかる。 |
| **仮想環境の****Activate**               | `.\venv\Scripts\activate`                                      | コマンドプロンプトでは、/をフォルダ区切りとして解釈できないので\で区切った。 |
| **（仮想環境にパッケージインストール）** |                                                              | 適宜、プロジェクトで使うパッケージを入れること               |
| **┗例）データサイエンス想定**            | `pip  install jupyterlab numpy pandas scipy scikit-learn statsmodels pandas-profiling matplotlib  seaborn jupyter ipykernel tqdm pathlib argparse pillow openpyxl xlrd bokeh  holoviews plotly graphviz pydot h5py html5lib json5 pyyaml protobuf pandoc  pep8 pytest beautifulsoup4 regex toml urllib3  diff-match-patch isort markdown  markdown2 `| 以下のパッケージはエラー出たので入れなかった。  sqlite  hdf5 jpeg yaml curl openssl pytorch |
| **仮想環境を****jupyterカーネルに追加**  | `ipython  kernel install --user --name=（プロジェクト名）`     |                                                              |
| **JupyterLab****起動**                   | `jupyter  lab`                                                 |                                                              |


## ４．JupyterLab起動用バッチの作成・スタートメニューに登録
Jupyter起動バッチファイルをスタートメニューに登録し、作業開始時にすぐ作業ページを開けるようにしておく。
プロジェクト期間が終わったらスタートメニューから削除すればよい。

| **作業**                                         | **コマンド**                                                 | **備考**                                                     |
| ------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **startup_jupyterlab.bat**                       | :カレントディレクトリをプロジェクトルートに変更<br /> cd /d %~dp0 <br /> jupyter  lab |                                                              |
| **スタートメニュー登録用のショートカットを作成** | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186338/7e51d5b1-1b32-653c-77c8-9de782e302e1.png) | ホットキー：右クリック＞S                                    |
| **ショートカットのリンク先を編集**               | cmd  /c "（startup_jupyterlab.batへの絶対パス）"  <br />![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186338/3b75569d-b455-165e-7eb7-5e25145d0239.png)
     | コマンドプロンプトにbatファイルをパラメータとして渡すようなリンクに修正している。  リンク先をコマンドプロンプトにするとスタートメニューに登録できるようになる。 |
| **スタートメニューに登録**                       | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186338/efd240f5-227d-aa0d-51c7-5fdbb4805490.png) | |


※ローカル環境にjupyterlabをインストールしていないと、バッチを実行しても何も起こらず終了するので注意。

# 利用手順
１．スタートメニューからJupyter起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186338/c1dbb7a0-67a4-0058-ff66-13144515475e.png)

（プロジェクトフォルダを開いた状態でJupyterLabが立ち上がる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186338/18f3e042-888b-63e6-831b-a64e8c107c7d.png)


２．JupyterLabで使用するカーネルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186338/c79d9395-f33d-d06b-db82-8345567bc5ea.png)


# おまけ：その他よく使うコマンド

## pip関連

| **作業**                   | **コマンド**                  | **備考** |
| -------------------------- | ----------------------------- | -------- |
| **requirements.txtの作成** | pip freeze > requirements.txt |          |

## venv関連

| **作業**                   | **コマンド**                  | **備考** |
| -------------------------- | ----------------------------- | -------- |
| **仮想環境の****Deactivate**         | .\venv\Scripts\deactivate                 |                                                              |
| **仮想環境の削除**                   | rd venv  /s                               | 仮想環境のフォルダをまるごと削除すればよい。  アクセス拒否されて削除できないときは、既存のPythonプロセスによって占有されている場合があるので、一度サインアウトしてから再試行すること。 |
| **仮想環境名の変更（削除して作成）** | rd venv  /s  <br>python  -m venv （新環境名） | venvには環境名変更コマンドがないので、venvディレクトリを削除して正しい名前で新しいディレクトリを作成する。  削除せずに、フォルダ名とactivate.batを編集する方法もある。  <br>参考：[directory - How to rename a virtualenv in Python? - Stack Overflow](https://stackoverflow.com/questions/43256369/how-to-rename-a-virtualenv-in-python/68400551#68400551) |

参考　📰[venv: Python 仮想環境管理 - Qiita](https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e#python-の実行バージョン確認)

## Jupyter関連

| **作業**                 | **コマンド**                                             | **備考** |
| ------------------------ | -------------------------------------------------------- | -------- |
| **利用可能なカーネルの表示** | jupyter kernelspec  list                                 |          |
| **カーネルを追加**           | ipython  kernel install --user --name=（プロジェクト名） |          |
| **カーネルを削除**           | jupyter  kernelspec uninstall （プロジェクト名）         |          |

参考　[Jupyterで複数カーネルを簡単に選択するための設定 - Qiita](https://qiita.com/tomochiii/items/8b937f15c79a0c3eae0e#仮想環境の作成)