Python製のAIアプリ(Stable Diffusion、Qwen、Wanなど)を「Python未導入のPCでもそのまま動くスタンドアロン実行ファイル」にしたい場合、よく使われるのが PyInstaller です。

pip install pyinstaller
pyinstaller –onefile main.py

しかし、AI系ライブラリを含むアプリでは単純にビルドしただけでは失敗することが多く、以下のような追加オプションが必要になるケースがあります。

pyinstaller ^
–onefile ^
–hidden-import transformers ^
–hidden-import diffusers ^
–collect-all transformers ^
–collect-all diffusers ^
–collect-all requests ^
main.py

本記事では、このオプションがなぜ必要なのかを解説します。


なぜPyInstallerだけではうまくいかないのか?

PyInstallerは通常、Pythonコードを静的解析して依存関係を収集します。

例えば以下のようなコードなら問題ありません。

import numpy
import pandas

この場合PyInstallerは「numpyとpandasが必要」と簡単に判断できます。

しかし近年のAIライブラリは、内部で動的import設定ファイル読み込みを多用しており、PyInstallerが必要ファイルを見落としやすくなっています。


--hidden-import transformers が必要な理由

transformers ライブラリはモデルごとに内部モジュールを動的に読み込みます。

概念的には以下のような処理です。

if model_type == “qwen”:
import transformers.models.qwen

このような「後から必要に応じて読み込む」仕組みは、PyInstallerの静的解析では検出しづらいため、そのままだと以下のようなエラーが出ます。

ModuleNotFoundError: No module named transformers.models.qwen

そのため、--hidden-import transformers を付けて「transformersも含めろ」と明示する必要があります。


--hidden-import diffusers が必要な理由

diffusers も同様に、Stable Diffusionのパイプライン内部で多数のコンポーネントを動的ロードします。

例:

  • scheduler
  • tokenizer
  • VAE
  • UNet
  • pipeline構成クラス

これらは StableDiffusionPipeline.from_pretrained() 実行時に自動ロードされるため、PyInstallerには見えません。

結果として以下のようなエラーになります。

ModuleNotFoundError

これを防ぐために --hidden-import diffusers を追加します。


--collect-all transformers が必要な理由

transformers はPythonコードだけではなく、多数の補助ファイルを必要とします。

例えば:

  • tokenizer設定ファイル
  • vocabファイル
  • JSON設定
  • sentencepieceモデル
  • metadata

PyInstallerは通常 .py ファイル中心に集めるため、これらのデータファイルが漏れることがあります。

すると実行時に:

OSError: tokenizer config not found

などが発生します。

--collect-all transformers はこれら関連ファイルを丸ごと収集してくれます。


--collect-all diffusers が必要な理由

diffusers も設定ファイルやJSONメタデータを多く含みます。

必要なものの例:

  • scheduler_config.json
  • pipeline_config.json
  • モデル設定JSON
  • 内部テンプレート

不足すると:

FileNotFoundError

cannot find scheduler_config.json

が発生します。


--collect-all requests が必要な理由

HuggingFace系ライブラリはモデルダウンロードや認証で requests を頻繁に使います。

requests は以下も内部利用しています。

  • SSL証明書
  • certifi
  • charset_normalizer
  • CA bundle

これらが欠けると:

SSL Error
certificate verify failed

などの通信エラーになります。


実務でおすすめのPyInstaller構成

AIアプリを安定してexe化したい場合、以下のようにPyTorchも含めるのがおすすめです。

pyinstaller ^
–onefile ^
–noconsole ^
–hidden-import transformers ^
–hidden-import diffusers ^
–hidden-import torch ^
–collect-all transformers ^
–collect-all diffusers ^
–collect-all torch ^
–collect-all requests ^
main.py

注意点:ファイルサイズは巨大になる

この方法のデメリットとして、完成するexeサイズはかなり大きくなります。

目安:

  • 軽量アプリ:数十MB
  • PyTorch込み:数百MB
  • Stable Diffusion全部入り:1GB超えも普通

そのため、配布時は以下の代替案も検討できます。

  • ONNX Runtime化して軽量化
  • Docker配布
  • Nuitkaで最適化コンパイル

まとめ

Stable DiffusionやQwenなどのAIアプリをPyInstallerでスタンドアロン化する際に追加オプションが必要なのは、AIライブラリが非常に動的な設計になっているためです。

ポイントを整理すると:

オプション 目的
--hidden-import 動的import漏れ防止
--collect-all 設定/JSON/データファイル漏れ防止
requests collect SSL証明書/通信関連漏れ防止

AIアプリをexe化する場合、通常のPythonアプリよりかなり複雑になるため、このあたりを理解しておくとトラブルシュートしやすくなります。