welcom ! Handel home

2025年4月10日 星期四

Python 程式檔案副檔名全解 (更新版 V2.0)

 Python 雖是直譯語言,但在執行前會先將 .py 原始碼編譯為位元組碼(Bytecode),產生 .pyc.pyo 檔案,再由 Python 虛擬機器執行。


🔤 一、常見副檔名與用途

副檔名功能說明
.pyPython 原始碼,開發與執行的主要程式檔案。
.pyw.py 相同,但在 Windows 中以 pythonw.exe 執行,不顯示命令列視窗,常用於 GUI 程式。
.pyc編譯後的位元組碼,用於加快模組載入速度,自動由 import 時產生。
.pyo編譯後的「優化版」位元組碼(Python 3.5 前可用,現已合併至 .pyc)。
.pydWindows 平台下的動態連結庫(DLL),用 C/C++ 編寫的擴充模組,Python 可 import

⚙️ 二、位元組碼編譯與使用

✅ 1. 單一檔案手動編譯 .py → .pyc

python
import py_compile py_compile.compile(r'H:\game\test.py')
  • file: 原始碼路徑

  • cfile: 輸出檔名(可選)

  • dfile: 錯誤資訊輸出位置(可選)

  • doraise: 為 True 時會主動丟出 PyCompileError


✅ 2. 批次編譯整個資料夾

python
import compileall compileall.compile_dir(r'H:\game')

✅ 3. 編譯優化位元組碼 .pyo(Python 3.5 以前)

bash
python -O -m py_compile file.py
  • -O:開啟最佳化模式,會省略 assert、debug 等語句。

  • 輸出為 .pyo,但在 Python 3.5+ 之後已合併進 .pyc


🧱 三、程式釋出方式建議

✅ 1. 打包為 EXE 檔(推薦 GUI)

使用 pyinstaller

bash
pyinstaller -F example.py # 打包為單一檔 pyinstaller -w -F example.py # GUI 版不顯示控制台
  • 生成 .exe,使用者無需安裝 Python 環境。


✅ 2. 發布 .pyc / .pyo

適合希望保護原始碼,但使用者已有 Python 環境的情境:

  • 編譯成 .pyc 再部署

  • GUI 程式可使用 .pyw 呼叫主 .pyc


✅ 3. 直接發布 .py 原始碼

適合開源、教育、內部測試等情境,簡單直接,無需額外步驟。


🧠 四、補充資訊

  • .pyc 會自動生成於 __pycache__ 資料夾中,檔名格式為:module.cpython-XY.pyc

  • Python 3.5 起 .pyo.pyc 已合併為單一優化 .pyc

  • .pyd 像是 Windows 的 .dll,常由 C/C++ 使用 Cython 或 CPython API 開發


📝 心得與總結

Python 雖屬直譯型語言,但實際運作中也具備「編譯階段」的概念,這使得 .pyc / .pyo 等位元組碼形式能提升效能並兼顧保護原始碼。針對不同的釋出場景,可以靈活選擇:

  • 開源:釋出 .py

  • 商用封裝:轉 .pyc 或使用 pyinstaller 打包

  • GUI 程式:使用 .pyw 搭配打包工具

對於有授權、隱私、發佈需求的 Python 專案,善用副檔名與打包技巧可以讓開發流程更專業且安全。

沒有留言: