【Python】妻に真夜中のダンスレッスン予約を強要されたので、Webスクレイピングで回避を試みようとしている話（２．python仮想環境構築）

前回は、<a href="https://https://qiita.com/sibulabo/items/a109ad73cde2f18349bc">「１．ことの発端」</a>について発信しました。

今回は、超便利らしい Pythonの仮想環境の構築に挑戦します。

pythonで開発する場合、開発単位（プロジェクト単位）ごとに仮想環境を構築したほうが良いらしい。という記事をみつけたので、そうすることにしました。

# どんなメリットがあるのか？
いろんなサイトを見る限り、

> **プロジェクトごとに独立したpython動作環境が構築できる。**

ということみたいです。

pythonやそれを取り巻くパッケージは、定期的にバージョンアップされます。
そのバージョンアップによって、これまで動いていたプログラムが動かないなどの影響を受けることがあるそうな。

たとえば、１つのサーバーにpythonで開発された「受注システム」、「在庫管理システム」が稼働していた場合、受注システムで使用しているパッケージをバージョンアップしたことで、在庫管理システムがストップしてしまう。ということなんじゃないかと。

pythonは、多くのパッケージが揃っていて、簡単に生産性よく開発できることがメリットなのですが、その弊害として、パッケージのバージョン管理が必要で重要になってくるんですね。そこで使用されるのが、互いに影響を受けない環境が構築できる「python仮想環境」です。今回の開発では、Python3.3以降で標準インストールされる「venv（ブイエンブ）」を使用してみました。

## 開発環境
>- OS:Windows 10
>- Python 3.10.4 
>   - selenium 4.1.5
>   - openpyxl 3.0.10
>- Google Chrome
>   - chromedriver.exe
>（バージョンは、使用するGoogleChromeに依存）
>- VScode


# envという名前の Python仮想環境を作成する。
VSCode内のターミナルで venvコマンドを実行するだけです。
-m は、venvというモジュールを実行しますよ。というオプション指定です。最後の envは、今回作成する仮想環境名です。
```powershell
PS C:\reserveLesson> python -m venv env
```
カレントに envという名前のフォルダが作成されました。
このフォルダ内に仮想環境実行に必要な情報が保存されています。Python.exeや後ほど出てくる pipコマンドなどもここに含まれています。
```
C:\reserveList
└─env
```
# Python仮想環境を有効化します。
作成するだけではダメで「仮想環境の有効化」をする必要があるようです。
有効化する場合は、envフォルダ配下にある、activate.batファイルを実行します。
```powershell
PS C:\reserveLesson> env\scripts\activate
(env) PS C:\reserveLesson>
```
有効化されるとプロンプトの先頭にカッコで囲まれた仮想環境名が表示されます。
(env) と表示されています。

（Ctrl+F5などで、いざプログラムを実行！となれば、VSCodeが自動でカレントフォルダ下の仮想環境をActivateしてくれるようです。）

# selenium, openpyxlパッケージのインストール
続いて、今回の開発で使用するパッケージを仮想環境にインストールします。

その前に「pip list」で、仮想環境作成直後のインストール済みパッケージの確認してみます。pipは、標準インストールされているパッケージのバージョン管理ツールです。今回のようにインストール済みパッケージの確認をしたり、インストールやアップグレードなどが行えます。

```powershell
(env) PS C:\reserveLesson> pip list
Package    Version
---------- -------
pip        22.2.2
setuptools 58.1.0
```
実行結果をみると、当然ですが今回使用するパッケージはインストールされていません。
「pip install パッケージ名」 でインストールできます。

仮想環境にselenium、openpyxlパッケージをインストールします。
```powershell
(env) PS C:\reserveLesson> pip install selenium
Collecting selenium
  Downloading selenium-4.5.0-py3-none-any.whl (995 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━ 995.2/995.2 kB 606.1 kB/s eta 0:00:00
                             :
(env) PS C:\reserveLesson> pip install openpyxl
Collecting openpyxl
                             :
Successfully installed et-xmlfile-1.1.0 openpyxl-3.0.10
```
インストール後に pip listを実行して、インストール済みのパッケージを確認してみます。
```powershell
(env) PS C:\reserveLesson> pip list
Package          Version
---------------- ---------
async-generator  1.10
attrs            22.1.0
certifi          2022.9.24
cffi             1.15.1
et-xmlfile       1.1.0
exceptiongroup   1.0.0rc9
h11              0.14.0
idna             3.4
openpyxl         3.0.10
outcome          1.2.0
pip              22.2.2
pycparser        2.21
PySocks          1.7.1
selenium         4.5.0
setuptools       58.1.0
sniffio          1.3.0
sortedcontainers 2.4.0
trio             0.22.0
trio-websocket   0.9.2
urllib3          1.26.12
wsproto          1.2.0
(env) PS C:\reserveLesson> 
```
パッケージを２つインストールしただけなのに、それ以外にも多くのパッケージがインストールされていますね；；内部で使用しているパッケージなのだと思います。今回のように小規模なプログラム開発であれば未だ問題ないのかもしれませんが、これが大規模になり、また複数のプロジェクトが混在してくると、インストールされるパッケージも膨大になり、各パッケージ間のバージョン管理もかなり大変なことが想像できます。

なので、プロジェクトごとに独立した仮想環境を構築できる機能は、Python開発ではなくてはならないものだと理解しました。

> 今回は、Python仮想環境を作成しました。こんなペースじゃいつになったらミッションコンプリートするの不安になってきました。でも、急がば回れ！ですね！？:expressionless:次回は、Webスクレイピングで必要な Chromeドライバーの配置を行う予定です。では、おやすみなさい！