2023年10月28日土曜日

Pyinstaller で Python スクリプトを実行ファイルに変換(exe 化)する

Pyinstaller を用いて Python スクリプトを実行ファイルに変換(exe 化)する機会があったので、いつものごとく備忘録です。Python を実行するための環境を整えなくてもいいというのは、本当に便利ですね。

今回は、venv モジュールで仮想環境の構築を行い、その上で PyInstaller を用いて Python スクリプト を実行ファイルへ変換(exe 化)します。

PyInstaller のデメリットとして、ファイルサイズが大きくなることが挙げられます。必要なパッケージのみをインストールした仮想環境上で実行ファイルを作成することで、ファイルの肥大化を抑えます。

尚、PyInstaller の実行環境は Windows 11 Pro 22H2、Python 3.11.0 です。PyInstaller で作成した実行ファイルの互換性は同一 OS に限られるため、Windows で作成したものは、Windows 上でしか動きません。


▼ venv モジュールによる仮想環境の構築・有効化


プロジェクト用のフォルダを作成・移動。
$ mkdir project
$ cd project

仮想環境の作成。
$ python -m venv 仮想環境名

プロジェクト用フォルダ内に、仮想環境名のフォルダが作成されます。仮想環境名には一般的に venv や env が使われるそうです。

pip が最新の状態でインストールする場合は以下のコマンド。(たぶん、基本的にはこっちで作っておいた方が便利)
$ python -m venv --upgrade-deps 仮想環境名

仮想環境の有効化。
$ venv\Scripts\activate


ちなみに、仮想環境は初期化(インストールしたパッケージ等のクリア)も可能。以下の通り deactivate で仮想環境を終了した上で、クリアを実行。
$ deactivate
$ python -m venv --clear 仮想環境名

また、仮想環境名のフォルダをまるごと削除することで、仮想環境自体の削除ができます。


▼ PyInstaller で実行ファイルへ変換(exe 化)


以下、仮想環境下での操作となります。

PyInstallar をインストール。
$ pip install pyinstaller

Python ファイルを実行ファイルに変換(exe 化)。
$ pyinstaller sample.py --onefile --noconsole

関連ファイルをひとつにまとめる「--onefile」と、実行時にコンソール画面を表示させない「--noconsole」は付けておいた方がいいみたいです。


プロジェクト用のフォルダ内に「build」「dist」という2つのフォルダと spec ファイルが作成されます。実行ファイル(exe)は「dist」フォルダ内にあります。


ということで、とりあえず動くものが作れました。


・追記(2023-10-30)

PyInstaller で作成した実行ファイルは、Windows Defender 等のセキュリティソフトによってウィルス判定されることが多々あるようです。(「ファイルにウイルスまたは望ましくない可能性のあるソフトウェアが含まれているため、操作は正常に完了しませんでした。」等のメッセージが出る)

その際は、以下のページで紹介されているような対策があるようです。



これでもダメな場合は、ひとまずセキュリティソフト側で除外設定等するしかないんですかね、たぶん。


大あくび