Pythonコードをexe化する方法– PyInstallerを活用

Python
スポンサーリンク

1. はじめに

Pythonスクリプトを配布する際、そのままではPython環境が必要になります。しかし、exe化することで以下のようなメリットがあります。

  • Python環境がなくても実行可能
  • コードの改変を防げる(完全ではないが難易度が上がる)
  • 配布が容易になる

本記事では、Pythonコードをexe化する方法について、PyInstaller を使用した手順を解説します。また、OneFileOneDir の違いについても説明します。


2. PyInstallerのインストール

まずは、PyInstallerをインストールしましょう。

2.1. Pythonがインストールされているか確認

PyInstallerを使うにはPythonが必要です。以下のコマンドでPythonがインストールされているか確認してください。

python --version   # もしくは
python3 --version  # 環境によってはこっち

もしPythonがインストールされていない場合は、公式サイトからダウンロードしてください。

2.2. PyInstallerのインストール

PyInstallerはpipで簡単にインストールできます。

pip install pyinstaller

インストールが完了したら、以下のコマンドで確認できます。

pyinstaller --version

3. PyInstallerの基本的な使い方

3.1. 単純なexe化

最も基本的なexe化のコマンドは以下の通りです。

pyinstaller myscript.py

このコマンドを実行すると、以下のフォルダとファイルが作成されます。

  • dist/ フォルダ(生成されたexeファイルが格納される)
  • build/ フォルダ(一時ファイル)
  • .spec ファイル(ビルド設定ファイル)

3.2. OneFileとOneDirの違い

PyInstallerには OneFileOneDir の2つのモードがあります。それぞれの特徴を比較表にまとめました。用途によって適したものを選択してください。

モード特徴メリットデメリット
OneDir (デフォルト)exeと複数の依存ファイルを含むフォルダを作成起動が速い / デバッグがしやすい配布が面倒
OneFileすべてを1つのexeにまとめる配布しやすい実行時に一時展開されるため起動が遅い

OneDirモード(デフォルト)

コマンド:

pyinstaller --onedir myscript.py
  • 特徴
    • dist/ フォルダ内に exe と依存ファイルが格納される
    • exe の起動が速い(展開の必要がない)
    • デバッグ時にファイルを個別に修正しやすい
  • 向いている用途
    • 自分の環境での実行がメイン
    • 開発中やテスト時

OneFileモード

コマンド:

pyinstaller --onefile myscript.py
  • 特徴
    • すべての依存ファイルを1つのexeにまとめる
    • 実行時に一時フォルダに展開されるため、起動が遅くなる
  • 向いている用途
    • exeファイルを単体で配布したい場合
    • ユーザーに手間をかけずに実行させたい場合

4. よく使うオプション

PyInstallerには様々なオプションがあります。代表的なものを紹介します。

4.1. アイコンを設定

デフォルトではexeファイルのアイコンがPythonのものになりますが、独自のアイコンを設定できます。

pyinstaller --onefile --icon=myicon.ico myscript.py

4.2. コンソールウィンドウを非表示(GUIアプリ向け)

GUIアプリの場合、黒いコンソールウィンドウが表示されるのを防ぐために、--noconsole または--windowed を指定します。

pyinstaller --onefile --noconsole myscript.py
pyinstaller --onefile --windowed myscript.py

--noconsole--windowed の違い

オプション効果
--noconsoleコンソールウィンドウを非表示にする(GUIアプリ向け)
--windowed--noconsole と同じ効果を持ち、GUIアプリ用の設定に最適化される

どちらを使うべきか?

  • PythonのGUIフレームワーク(Tkinter, PyQt, wxPythonなど)を使用する場合--windowed
  • 単にコンソールを表示させたくない場合--noconsole

どちらも同じように動作しますが、GUIアプリなら --windowed を使うのが一般的です。
--noconsole は、ウインドウを表示しないが、標準出力を使わないCLIツール向け で、バックグラウンドで動作させたい場合に便利です。

4.3. 外部ライブラリの扱い

特定のライブラリが見つからないエラーが出る場合は、--hidden-import を使います。

pyinstaller --onefile --hidden-import=pandas myscript.py

PyInstaller は通常、スクリプト内の import 文を解析し、自動的に必要なライブラリを含めて exe を作成します。しかし、動的インポート(importlib.import_module() など)を使っている場合や、一部のライブラリが正しく検出されない場合ModuleNotFoundError が発生することがあります。

このような場合に --hidden-import オプションを使用すると、PyInstaller に特定のモジュールを手動で追加させることができます。


5. exe化時のトラブルシューティング

5.1. exe実行時にエラーが出る

エラーメッセージ ModuleNotFoundError: No module named 'xxx' が出る場合は、必要なライブラリが含まれていない可能性があります。4.3の項を参考にしながら必要なライブラリを追加してください。

pyinstaller --onefile --hidden-import=必要なライブラリ myscript.py

5.2. アンチウイルスソフトにブロックされる

PyInstallerで作成したexeがアンチウイルスソフトに誤検出されることがあります。--upx-exclude を使用すると回避できる場合があります。

pyinstaller --onefile --upx-exclude myscript.py

5.3. 依存ファイルが不足する場合

データファイルが正しく含まれていない場合は、--add-data を指定します。

pyinstaller --onefile --add-data "data.json;." myscript.py

6. まとめ

  • PyInstallerを使えばPythonコードを簡単にexe化できる
  • OneFile(単一exe)と OneDir(フォルダ構成)の違いを理解して選択する
  • --icon--noconsole などのオプションを活用 してカスタマイズ
  • エラーが出たら --hidden-import--add-data で対処

これで、Pythonスクリプトをexe化する準備は整いました。ぜひ、実際に試してみてください!

コメント

タイトルとURLをコピーしました