私版 Pythonスクリプト実行環境 構築方法

# 0. はじめに

令和元年5月からお世話になっている、私の新しい職場は、VBAが大好きな集団だったのですが、徐々にPythonスクリプトを布教していこうと目論んでいます。

今回は、あなたのPCで、Pythonスクリプトが実行できるようにするには、何をすればいいのかを説明しようと思います。

## 前提条件

私のPCは、Windows 10 Pro 64ビット バージョン1809 です。Pythonスクリプトは、Mac、Linuxでも動作しますが、ここでは Windows の話に限定します。

# 1. Pythonのインストールに、Chocolateyを使う

[Chocolatey](https://chocolatey.org/)は、Windows上のオープンソースアプリケーションを一括インストール＆管理できるツールです。私流としては、Chocolatey経由でPythonをインストールします。Pythonの公式インストーラーを使えば一発で済むものを、なぜ話をややこしくするのかといえば、(1) バージョンがあがったときの更新がラクというのと、(2) 他にもインストールしてほしいアプリケーションがある、という2点の理由によります。

## まずは、管理者として実行されたPowerShellを開くことから

1. 画面左下のウィンドウズアイコンの右にある検索窓に powershell とタイプします
1. 最も一致する検索結果に Windows PowerShell が登場しますので、右クリックします
1. ショートカットメニューの中から「管理者として実行」をクリックします
1. ウィンドウズが確認ダイアログを出すので「はい」と答えます
1. 管理者として実行されたPowerShellが登場します

![powershell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48056/7ee81bfb-deec-97c8-878b-44c629af8097.png)

## 次に、Chocolateyのインストールスクリプトを実行する

1. PowerShellはそのままに、ブラウザで [https://chocolatey.org/](https://chocolatey.org/) を開く
1. トップメニューの Install をクリックする
1. Installing Chocolatey ＞ Install with PowerShell.exe ＞ Now run the following command
1. そこにある1行コマンドをコピーして、PowerShellに張り付けて実行する

![chocolatey.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48056/04d2b41a-4b7e-923b-30d3-f15855da2c3a.png)

## 最後に、Chocolateyがインストールされたことを確認する

1. 実行したコマンドが終了したら、いったんPowerShellを閉じる
1. もう一度、管理者としてとして実行されたPowerShellを開く
1. `choco`とタイプして、エラーが発生しなければ、Chocolateyは無事インストールされています

![choco-command.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48056/f2715119-d31e-52e4-9994-dc95271903a5.png)

## Chocolateyでよく使うコマンド一覧

chocolateyを使うときは、常に「管理者として実行されたPowerShell」を使います

```powershell:管理者として実行されたPowerShell

# パッケージをインストールする
choco install <package-name> -y

# パッケージをアンインストールする
choco uninstall <package-name> -y

# インストール済みパッケージの一覧を出す
choco list -lo

# インストール済みパッケージから更新可能なものを探す
choco outdated

# インストールしたパッケージを全てアップデートする
choco update all -y
```

- `-y`オプションをつけると、実行直前に出る「本当に〇〇しますか？」という質問に、「はい」と答えたことになります。質問に答える必要がなくなります
- `-lo`オプションは、`--local-only`オプションと同じです。これを付け忘れると、インストール可能なパッケージをすべて表示しようとするので、大変なことになります

# 2. Chocolateyを使って、Pythonをインストールする

いったんChocolateyが使えるようになったら、Pythonのインストールは簡単です。「管理者として実行されたPowerShell」の中で、以下の一行を実行するだけです

```powershell:管理者として実行されたPowerShell

choco install python -y
```

### Pythonがインストールされたことを確認する

Pythonを動かすのに「管理者として実行されたPowerShell」は必要ありません。ふつうにPowerShellを起動して、以下のコマンドを叩いてみます。バージョン番号が返ってくれば、Pythonは無事インストールされています

```powershell:ふつうのpowershell
python --version
pip --version
```

![python.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48056/50801db0-5066-6e5d-f77d-3206f1c643c5.png)


# 3. pipについて

pipは、Pythonで使うパッケージの管理ツールです。語弊を恐れずに言い切ってしまうならば、「Python専用のChocolatey」です。pipに「管理者として実行されたPowerShell」は必要ありません。ふつうにPowerShellを起動して使います

ここまで、あなたのPCでPythonスクリプトを動かす方法を、しっかりと説明しているのは、Pythonスクリプトを使うことで、いろんなことをラクにできるようにしようと思っているからです。いろんなことをできるようにするには、いろんなパッケージの追加が欠かせません。

## pipでよく使うコマンド一覧

```powershell:ふつうのpowershell
# パッケージをインストールする
pip install <package-name>

# パッケージをアンインストールする
pip uninstall <package-name> -y

# インストール済みパッケージの一覧を出す
pip freeze

# 必要なパッケージを一括インストールする
pip install -r requirements.txt
```

## requirements.txtについて

このファイルにパッケージ名を書いておくと、一括でインストールすることができます。Pythonスクリプトを同僚に渡すときは、スクリプトファイルに加えて、そのスクリプトが使うパッケージ名を書いたrequirements.txtもつけるべきです。これで「パッケージがない！」というエラーに対処する必要がなくなります。

## 蛇足：インストール済みのパッケージをまとめて削除する

いろんなPythonスクリプトを動かしはじめると、インストールするパッケージがどんどん増えていくかもしれません。そんなときは、いったん綺麗にすることが可能です。

```powershell:ふつうのpowershell
pip freeze > temp.txt
pip uninstall -r temp.txt -y
```

- requirements.txtは、インストールするべきパッケージの一覧です。
- pip freezeが吐き出すリストは、インストールされているパッケージの一覧です
- pip freezeが吐き出すリストのほうが数が多くなるのは、依存関係の都合で一緒にインストールされたパッケージがあるからです
- pip freezeが吐き出すリストを使うことで、確実にすべてのパッケージがアンインストールされます

### 蛇足の蛇足

あなたが開発者で、開発プロジェクトごとに、インストールされているパッケージを切り分けたいときは、`venv`というツールで、仮想環境を作成することになります。ここでは割愛します

# 4. あなたにあげる、便利なPythonスクリプトの例

このPythonスクリプトを実行すると、Chromeブラウザがヘッドレスで立ち上がって、楽天市場トップページのスクリーンショットを、同じフォルダに保存します。requirements.txtもつけてます

```python:screenshot_rk.py
import datetime
import pytz
from selenium import webdriver
import time

print('作業を開始します。しばらくお待ちください')
t1 = time.time()

# 保存するファイル名を決める
now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
path = f'{now.strftime("%Y%m%d-%H%M%S")}_rk_top_screenshot.png'

# ブラウザを設定する
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument("--hide-scrollbars")
driver = webdriver.Chrome(options=options)

# 楽天市場のトップページを開いて、スクリーンショットをファイルとして保存する
driver.get('https://www.rakuten.co.jp/')
page_width = 1280
page_height = driver.execute_script('return document.body.scrollHeight')
driver.set_window_size(page_width, page_height)
driver.save_screenshot(path)

# ブラウザを閉じる
driver.quit()

t2 = time.time()
elapsed_time = t2 - t1
print (f'作業が終わりました。{elapsed_time:0.2f}秒かかりました')
```

```txt:requirements.txt
pytz
selenium
```

## このPythonスクリプトをもらった、あなたがやるべきこと

最初の例に選んだものの、Pythonスクリプトでブラウザを動かすのは、とても高度なことなので、Chocolateyでパッケージを追加する必要があります

```powershell:管理者として実行されたPowerShell
choco install selenium-chrome-driver -y
```

そのあとは、説明してきた通りです

```powershell:ふつうのpowershell
pip install -r requirements.txt
python screenshot_rk.py
```

![screeshot_rk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48056/4b432e08-5f45-6cdb-5a33-d28a826e0bc0.png)

# 5. 最後に

VBAは、Excelがインストールされていれば実行できるのに対して、Pythonスクリプトは、これだけの準備が必要となります。ですが、できることもたくさんたくさんあるので、食わず嫌いしないでいただけたらなと思います