PyinstallerでPythonプログラムをexe化する手順書（Windows編）

# Python環境のないユーザーにも自分の作ったPythonプログラムを活用してほしい！
（[手順をすぐ見る](#実際の手順)）
Pythonは習得が簡単な言語ですので、ちょっと慣れると色々なプログラムが書けるようになります。
特に日常生活や仕事で便利に使えるプログラムがサッとかけてしまいます。
折角作ったのだから周りの人にも使って貰えたら嬉しくないですか？
フィードバックをもらって改修していけば、プログラムの設計の勉強にもなります。
しかし、Pythonの環境を作って実行してもらうのはパソコン初心者にはかなりハードルが高いですよね。
そんな時、実行ファイルとしてPythonプログラムを配布出来たら・・・

出来るんです、Pythonならね（Pythonのライブラリは本当に何でもあるな）

そこで実際にpyファイルをexe化するときの手順を、自分の備忘録代わりにまとめました。
（今回はWindowsでの作業手順になります。後でMacでも検証する予定です。）

本記事は以下のページを参考にしています。
[PyInstallerでPythonをexe化！ライブラリの比較、注意点も解説](https://camp.trainocate.co.jp/magazine/pyinstaller-python-exe/)
[Pipenvコマンドメモ - Qiita](https://qiita.com/RW_876/items/ce42026884f1383e21da)
[Pipenvを用いたPythonの環境構築 - Qiita](https://qiita.com/anvinon/items/5d9c128ef8b65b866dfe)

## とりあえずPyInstallerが簡単
pyファイルをexe化するライブラリは多数あり、それぞれ一長一短があるのですが、今回はPyInstallerを使用します。
PyInstallerの特徴は何と言ってもファイルを1つにまとめるオプションがある事です。
作ったPythonプログラムで使用しているライブラリや、その他実行に必要なファイルを全部exeファイルの中に入れちゃえます。
PyInstallerでexe化したら、使って欲しい人にダウンロード＆ダブルクリックしてもらえば、あなたの作ったPythonプログラムが動き出します（※決して悪意のあるプログラムを配布してはいけません！！）

一方でPyInstallerでexe化する際に注意点もあります。
PyInstallerはプログラムを作成した環境にインストールされたPythonライブラリを全てパッケージ化してしまうため、exeファイルのサイズが巨大化してしまう可能性があります。
それを回避するため、必要なライブラリのみインストールした仮想環境を作り、仮想環境上でPyInstallerを走らせることでexeファイルを軽量化します。

仮想環境の構築にはPipenvを使用します。
[pipenvとは - Qiita](https://qiita.com/s_ryota/items/5e96d395dc64f63a958c)

## 実際の手順
1. [Pipenvのインストール](#1-pipenvのインストール)
1. [仮想環境の構築](#2-仮想環境の構築)
1. [必要なライブラリのインストール](#3-必要なライブラリのインストール)
1. [PyInstallerのインストール](#4-pyinstallerのインストール)
1. [PyInstallerでpyファイルをexe化](#5-pyinstallerでpyファイルをexe化)
1. [仮想環境の削除](#6-仮想環境の削除)

### 1. Pipenvのインストール
WindowsでPowerShell（or ターミナル）を立ち上げます。
（Windwsキー→「PowerShell（or ターミナル）」を検索）
```
pipenv --version
```
でpipenvがインストールされているか確認。
（インストール済みなら[手順2](#2-仮想環境の構築)へ）
```
pip install pipenv
```
でpipenvをインストール。
（pipをインストールしていなかったら下記リンク参照。pip便利だから入れてね。）
[pipの使い方とインストール - Python-izm](https://www.python-izm.com/tips/pip/)

### 2. 仮想環境の構築
```
cd [フォルダパス]
```
で仮想環境を作るフォルダへ移動。
当然ですが、作ったPythonファイルを置いてあるフォルダを指定することをお勧めします。
```
pipenv --python 3.10
```
で仮想環境で使うPythonを設定（数字部分は自分の環境にインストールされているPythonのバージョンを指定してください）。
```
pipenv shell
```
で仮想環境を有効化。

### 3. 必要なライブラリのインストール
（Pythonにデフォルトでインストールされているライブラリのみを使う場合はこの作業を飛ばして[手順4](#4-pyinstallerのインストール)へ）
```
pipenv install [ライブラリ（ex. pandas）]
```
で必要なライブラリをインストール。

### 4. PyInstallerのインストール
```
pip install pyinstaller
```
でPyInstallerをインストール。

### 5. PyInstallerでpyファイルをexe化
```
pyinstaller [exe化したいpyファイル名（ex. test.py）]
```
でpyファイルを元にexeファイルが作成されます。
同時に「build」「dist」フォルダと[ファイル名].specというファイルができます。
「dist」内にexeファイルがあり、それを実行するとあなたのPythonプログラムが実行されます。

Pyinstallerは以下のオプションが使えます
```
--onedir（-Dでも可）
# 出力を1フォルダにまとめる

--onefile（-Fでも可）
# 出力ファイルを1つにまとめる

--noconsole（-wでも可）
# コンソールを表示しない（GUIプログラムの場合にCUIが必要なければ使用）

--clean
# ビルド前に前回のキャッシュを削除
```
出力を1ファイルにまとめ、exeファイルだけで完結させるなら以下のコマンドで
```
pyinstaller [pyファイル名] --onefile
```
「dist」フォルダ内のexeファイルを配布すれば、あなたのプログラムを他のWindowsで動かすことができます。

### 6. 仮想環境の削除
最後にお掃除しましょう
```
exit
# 仮想環境のshellから抜ける

pipenv --rm
# 仮想環境を削除
```
仮想環境を構築したフォルダ内のPipfileを残しておけば、いつでも
```
pipenv shell
```
で仮想環境を有効化できます。

## 終わりに
以上で簡単にPythonプログラムをWindows用にexe化できました。
重ねて注意しますが、exeファイルはダブルクリックしたらその環境で実行されてしまうプログラムです。そして、そのプログラムを実行する人はITに詳しくない可能性が高いです。
決して、悪意のあるプログラムをexe化して配布しない様、世のため人のためのご利用をお願いいたします。

---
本記事は以下の環境で動作を確認したものです。

OS: Windows11 22H2
Python: 3.10.4
Powershell: 7.3.1
pipenv: version 2022.12.19
PyInstaller: 5.7.0