要在 PyInstaller 打包時完全排除 torch (PyTorch) 以減小檔案體積,主要有兩種方法:使用 命令列參數 或修改 .spec 設定檔。
以下是具體的操作步驟與注意事項:
方法一:使用命令列參數 (最快)
在執行 pyinstaller 指令時,直接加入 --exclude-module 參數。如果你有同時使用 torchvision 或 torchaudio,建議一併排除。
pyinstaller --onefile --exclude-module torch --exclude-module torchvision your_script.py
--exclude-module torch: 告訴 PyInstaller 不要將 torch 套件包進去。your_script.py: 你的 Python 主程式。
方法二:修改 .spec 檔案 (推薦用於複雜專案)
如果你希望將這個設定永久保存,或者你有複雜的打包需求,建議修改 .spec 檔。
- 生成 spec 檔 (如果你還沒有):Bash
pyinstalleri --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),但你的程式必須用到它,可以考慮以下「瘦身」方案,而不是完全排除:
- 安裝 CPU 版本:在打包的環境中,解除安裝目前的 torch,改裝 CPU 版本(通常只有 100-200MB)。
pip uninstall torch torchvisionpip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
然後再進行 PyInstaller 打包,體積會大幅縮小。 - 使用 –onedir 模式並手動剔除:使用 pyinstaller –onedir your_script.py (不要用 –onefile)。打包後會產生一個資料夾。你可以進去 _internal 資料夾,手動刪除 torch 裡面不用的 .so 或 .dll 檔(例如巨大的 CUDA 函式庫),但這風險較高,容易導致程式損壞。
如果你是希望保留 PyTorch 功能但讓檔案變小,可以建立一個乾淨的 虛擬環境 (Virtual Environment) 來安裝「最小化 CPU 版 PyTorch」,然後再進行打包,這樣可以最大程度縮減體積同時保證程式可執行。
