今回掘るテーマ:洞窟の奥に眠る「配布しやすさ」の秘宝 🐾
モグラ先生:今日は 「PyInstaller で .exe を掘り出す大冒険」 に出発じゃ!
Python が入ってない PC でもサクッと動く宝を、いっしょに見つけよう⛏️
なぜ “専用の穴”(仮想環境)が必要?
- PyInstaller は環境にあるライブラリを丸ごと詰め込むため、不要パッケージが多いと実行ファイルがブクブク膨らむ🐡。
モグラ先生:小さな穴から掘り始めるのがコツ。最小構成の仮想環境で身軽になろう!
- PyInstaller 6 系は Python 3.8 〜 3.13 を公式サポート(3.12 も OK) (pyinstaller · PyPI)。
- Conda でも動くけど、標準の
venv
がいちばん軽量でトラブルも少ないと公式も推奨している (Python Virtual Environments: A Primer, Using PyInstaller — PyInstaller 6.13.0 documentation)。
モグラ流・PyInstaller 掘削手順 ⛏️
1. 軽量仮想環境を作成
# Windows
python -m venv .venv
.venv\Scripts\activate
# macOS / Linux
python3.12 -m venv .venv
source .venv/bin/activate
モグラ先生:「activate を忘れて巨大ファイル量産」は定番の落とし穴やで!
2. 必要最小限のライブラリだけインストール
pip install --upgrade pip
pip install requests pandas scikit-learn # 例
- ホイール (.whl) を入れる場合も pip で統一しよう。
- インストール済み一覧は
pip list
で確認。
3. PyInstaller を導入
pip install pyinstaller
- 2025-04 月現在の最新は 6.13.0 (Changelog for PyInstaller — PyInstaller 6.13.0 documentation)。
4. 単体 EXE を生成
pyinstaller hello.py --onefile --noconsole
--onefile
で 単一ファイル、--noconsole
で 黒いコンソール抑制(GUI アプリの場合)。- 仮想環境の
Scripts/pyinstaller.exe
を直接呼ぶとパスの事故が減る。
モグラ先生:エラーが出たら“掘って見つけた!” hidden-import を追加じゃ!
pyinstaller hello.py --onefile --hidden-import sklearn.utils._typedefs
5. 動作確認
生成物は dist/hello.exe
。Python 非搭載の PC で実行テストしよう。
Visual C++ 再頒布パッケージが無いと起動しない場合があるので同梱を忘れずに。
小さな穴掘りポイント🪹
モグラ先生:サイズがデカい? UPX 圧縮でギュッと締めるんだ!
- UPX をパスに置くと PyInstaller が自動で実行ファイル内部を圧縮する (Using PyInstaller — PyInstaller 6.13.0 documentation)。
- さらに 旧バージョン Python を使うと DLL が小さくなるという報告も(3.12 → 3.8 で ~40% 減) (Reducing size of pyinstaller exe – python – Stack Overflow)。
- どうしても巨大なら one-dir モード+7-Zip 配布という手もある。
よくある落とし穴と救出方法 🐾
症状 | 掘削ポイント |
---|---|
ModuleNotFoundError | --hidden-import で手動追加。依存モジュールの import 位置が動的な GUI ライブラリで起こりやすい (How to include dependencies from venv directory when running …)。 |
出来上がった EXE が 300 MB 以上 | 不要パッケージ除去 → pip uninstall 。DLL サイズは UPX 圧縮や古い Python で削減 (Reducing File Size w/ PyInstaller? : r/learnpython – Reddit)。 |
実行時に DLL エラー | VS C++ 再頒布 2015-2022 を同梱。PyInstaller 本体はバンドルしない (PyInstaller Manual — PyInstaller 6.13.0 documentation)。 |
モグラ先生:DLL エラーは「沼」。公式ドキュメントの “Troubleshooting” を必ずチェックしよう (Using PyInstaller — PyInstaller 6.13.0 documentation)!
覚書:環境の後片付け
# venv を無効化
deactivate
# フォルダごと掃除
rm -r .venv build dist __pycache__ *.spec
モグラ先生:穴を掘ったら埋め戻すのもマナーやで🪣。
まとめ ✨
- 最小構成の仮想環境で掘りだすと、EXE は軽く・安定する。
- 困ったら
--hidden-import
と UPX でサイズ&依存性を調整。 - PyInstaller 6.13 は Python 3.13 まで対応、今後もバージョンアップに注目だ! (Changelog for PyInstaller — PyInstaller 6.13.0 documentation)
- 「掘って見つけた!」精神でエラーを一つずつ潰し、気軽に EXE を配布しよう。
モグラ先生:さあ、あなたのスクリプトも もぐTech の地下倉庫 から世界へ飛び出す時じゃ!🐾⛏️