welcom ! Handel home

2025年4月10日 星期四

py_compile 和 compileall

 py_compilecompileall 是 Python 標準庫中用於將 Python 原始碼(.py 檔案)編譯成位元組碼(.pyc 檔案)的模組。以下是對這兩個模組的詳細說明:

py_compile 模組

  • py_compile 模組提供了一個函數 compile(),用於將單個 Python 原始碼檔案編譯成位元組碼檔案。
  • 主要用途:
    • 在安裝共享模組時,對於那些使用者可能沒有權限在包含原始碼的目錄中寫入位元組碼快取檔案的情況,這個函數非常有用。
    • 手動編譯單一.py檔案。
  • py_compile.compile(file, cfile=None, dfile=None, doraise=False, optimize=-1, invalidation_mode=PycInvalidationMode.TIMESTAMP, quiet=0)
    • file:要編譯的原始碼檔案的路徑。
    • cfile:編譯後的位元組碼檔案的路徑。如果未指定,則預設路徑為 __pycache__ 目錄中的一個檔案。
    • dfile:錯誤訊息將使用的源檔案名稱。
    • doraise:如果為 True,則在編譯錯誤時引發 py_compile.PyCompileError。如果為 False(預設值),則將錯誤寫入 sys.stderr
    • optimize:控制優化級別,並傳遞給內建的 compile() 函數。
    • invalidation_mode:指定位元組碼快取失效模式。
    • quiet:控制錯誤訊息的處理方式。
  • py_compile模組可以作為腳本調用,編譯多個源檔案。

compileall 模組

  • compileall 模組提供了一些函數,用於遞迴地將一個目錄樹中的所有 Python 原始碼檔案編譯成位元組碼檔案。
  • 主要用途:
    • 在安裝 Python 庫時,用於建立快取的位元組碼檔案,以便沒有庫目錄寫入權限的使用者也可以使用。
    • 編譯資料夾內所有的.py檔案。
  • compileall.compile_dir(dir, maxlevels=None, ddir=None, force=False, rx=None, quiet=False, legacy=False, optimize=-1, invalidation_mode=PycInvalidationMode.TIMESTAMP, workers=1, limit=None, hash_based=None, skip_curdir=True, exclude_dirs=[], include_dirs=[], callback=None)
    • dir:要遞迴編譯的目錄的路徑。
    • 其他引數:控制編譯過程的各個方面,例如遞迴深度、強制重新編譯、排除或包含特定檔案等。
  • compileall模組也可作為腳本調用,編譯指定目錄下的所有檔案。

總結

  • py_compile 用於編譯單個檔案。
  • compileall 用於編譯整個目錄樹中的檔案。
  • 這兩個模組都可用於提高 Python 程式的載入速度,特別是在部署共享模組時。

沒有留言: