pyinstaller 不要包含 torch

要在 PyInstaller 打包時完全排除 torch (PyTorch) 以減小檔案體積,主要有兩種方法:使用 命令列參數 或修改 .spec 設定檔

以下是具體的操作步驟與注意事項:

方法一:使用命令列參數 (最快)

在執行 pyinstaller 指令時,直接加入 --exclude-module 參數。如果你有同時使用 torchvisiontorchaudio,建議一併排除。

pyinstaller --onefile --exclude-module torch --exclude-module torchvision your_script.py
  • --exclude-module torch: 告訴 PyInstaller 不要將 torch 套件包進去。
  • your_script.py: 你的 Python 主程式。

方法二:修改 .spec 檔案 (推薦用於複雜專案)

如果你希望將這個設定永久保存,或者你有複雜的打包需求,建議修改 .spec 檔。

  • 生成 spec 檔 (如果你還沒有):Bashpyinstalleri --name=my_app your_script.py # 執行後會產生 my_app.spec,但不會開始打包
  • 編輯 my_app.spec:打開檔案,找到 Analysis 區塊,在 excludes 列表中加入 torch。
# my_app.spec

a = Analysis(
    ['your_script.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    # 在這裡加入要排除的套件
    excludes=['torch', 'torchvision', 'torchaudio', 'numpy'], 
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
  • 使用 spec 檔打包
    pyinstaller my_app.spec

⚠️ 重要警告:排除後的運行問題

這是最關鍵的一點: 當你使用上述方法排除了 torch,生成的 exe 檔案裡面就真的沒有 PyTorch 了。

如果你的程式碼中仍然有 import torch,使用者在執行這個 exe 時會直接閃退並報錯 ModuleNotFoundError: No module named 'torch'

你必須確保以下其中一種情況,程式才能正常運作:

  • 使用者電腦已有環境: 使用者的電腦上已經安裝了 Python 和 PyTorch,並且你的 exe 能夠調用系統的 Python 環境(這通常很難,因為 PyInstaller 預設是封閉環境)。
  • 條件式匯入 (Conditional Import): 你的程式邏輯是「如果有 torch 就用,沒有就用別的功能」,你需要這樣寫:
try:
    import torch
    HAS_TORCH = True
except ImportError:
    HAS_TORCH = False

def my_function():
    if HAS_TORCH:
        # 執行深度學習相關代碼
        pass
    else:
        print("未檢測到 PyTorch,跳過 AI 功能")
  • 不需要 Torch 但誤引用: 你只是在程式碼開頭寫了 import torch 但實際上沒用到,那直接刪除該行 import 即可。

💡 替代方案:如果你還是需要 Torch,但嫌它太大

如果你是因為 PyTorch 太大 (通常 GPU 版包含 CUDA 會超過 1GB),但你的程式必須用到它,可以考慮以下「瘦身」方案,而不是完全排除:

  1. 安裝 CPU 版本:在打包的環境中,解除安裝目前的 torch,改裝 CPU 版本(通常只有 100-200MB)。
    pip uninstall torch torchvision
    pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
    然後再進行 PyInstaller 打包,體積會大幅縮小。
  2. 使用 –onedir 模式並手動剔除:使用 pyinstaller –onedir your_script.py (不要用 –onefile)。打包後會產生一個資料夾。你可以進去 _internal 資料夾,手動刪除 torch 裡面不用的 .so 或 .dll 檔(例如巨大的 CUDA 函式庫),但這風險較高,容易導致程式損壞。

如果你是希望保留 PyTorch 功能但讓檔案變小,可以建立一個乾淨的 虛擬環境 (Virtual Environment) 來安裝「最小化 CPU 版 PyTorch」,然後再進行打包,這樣可以最大程度縮減體積同時保證程式可執行。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *