Contents
1. はじめに
Pythonスクリプトを配布する際、そのままではPython環境が必要になります。しかし、exe化することで以下のようなメリットがあります。
- Python環境がなくても実行可能
- コードの改変を防げる(完全ではないが難易度が上がる)
- 配布が容易になる
本記事では、Pythonコードをexe化する方法について、PyInstaller を使用した手順を解説します。また、OneFile
と OneDir
の違いについても説明します。
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には OneFile と OneDir の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化する準備は整いました。ぜひ、実際に試してみてください!
コメント