Python 規則

回報問題 查看原始碼 夜間 7.3 7.2 7.1 7.0 6.5

規則

py_binary

查看規則來源
py_binary(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, exec_compatible_with, exec_properties, features, imports, legacy_create_init, licenses, main, output_licenses, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, pyc_collection, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)

引數

屬性
name

名稱;必選

這個目標的專屬名稱。

deps

標籤清單;預設為 []

要連結至目標的其他程式庫清單。查看影片的相關留言 [`deps` 屬性] 一般是由 rules](https://bazel.build/reference/be/common-definitions#typical-attributes). 這些通常是 `py_library` 規則。僅提供在執行階段使用的資料檔案的目標,屬於 `data` 屬性。
srcs

標籤清單;必選

要處理以建立目標的 Python 來源檔案清單。這包括所有已簽入的程式碼,也可能包括產生的來源檔案。`.py` 檔案屬於 `srcs`,而程式庫目標屬於 `deps`。在執行階段可能需要的其他二進位檔案則屬於 `data`。
data

標籤清單;預設為 []

這個程式庫在執行階段所需的檔案清單。請參閱有關 [`data` 屬性](https://bazel.build/reference/be/common-definitions#typical-attributes)的註解,這類屬性通常由規則定義。並沒有像 `cc_embed_data` 和 `go_embed_data` 一樣的 `py_embed_data`。 這是因為 Python 對執行階段資源有概念。
imports

字串清單;預設為 []

要新增至 PYTHONPATH 的匯入目錄清單。 會使用「Make 變數」替換。系統會新增這些匯入目錄 此規則及其依附的所有規則 (注意:不是此規則的規則) 都不盡相同每個目錄都會由「py_binary」規則新增至「PYTHONPATH」 仍須符合這項規則字串為 repo-runfiles-root 相對路徑,不允許使用絕對路徑 (開頭為 `/`) 和參照執行根目錄上方路徑的路徑,否則會導致錯誤。
legacy_create_init

整數;預設值為 -1

是否在執行檔案樹狀結構中間接建立空白的 `__init__.py` 檔案。 這些目錄會在包含 Python 原始碼或共用 Python 原始碼的每個目錄中建立 以及這些目錄的每個父項目錄,但不包含存放區 根目錄預設值是 `-1` (auto),表示除非 使用了 `--incompatible_default_to_explicit_init_py`。如果為 False,使用者會 負責建立 (可能為空) `__init__.py` 檔案,並將檔案新增到 Python 目標的 `srcs` (如有需要)。
main

標籤;預設為 None

選用:做為主要進入點的來源檔案名稱 應用程式。這個檔案也必須列在 `srcs` 中。如果未指定,系統會改用附加了 `.py` 的 `name`。如果 `name` 與 `srcs` 中的任何檔案名稱不相符,則必須指定 `main`。
precompile

String;預設值為 "inherit"

是否應針對**這個目標**的 py 來源檔案進行預先編譯。值: * `inherit`:從 {flag}`--precompile` 標記判斷值。* `enabled`:在建構期間編譯 Python 來源檔案。請注意, --precompile_add_to_runfiles 會影響已編譯檔案的納入方式 執行下游二進位檔 * `disabled`:請勿在建構期間編譯 Python 來源檔案。* `if_generated_source`:編譯 Python 來源檔案,但僅限於這些檔案是產生的檔案。:::{seealso} * {flag}`--precompile` 標記,可在某些情況下覆寫此屬性,並在建構時影響所有目標。* {obj}`pyc_collection` 屬性,可針對個別目標依序啟用預先編譯。* 如需預先編譯的指南,請參閱 [預先編譯](預先編譯) 文件。 :::
precompile_invalidation_mode

字串;預設為 "auto"

預先編譯檔案的驗證方式應與相關關聯保持最新狀態 來源檔案。可能的值包括: * `auto`:其他版本會自動決定有效值 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目 * `checked_hash`:如果來源檔案的雜湊與 pyc 檔案中記錄的雜湊相符,就會使用 pyc 檔案。在處理可能需要修改的程式碼時,這項功能最實用。* `unchecked_hash`:一律使用 pyc 檔案;不要將 pyc 的雜湊值與來源檔案進行比對。這在程式碼不可修改時相當實用。 如要進一步瞭解 pyc 無效模式,請參閱 https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode。
precompile_optimize_level

整數;預設值為 0

預先編譯檔案的最佳化等級。如要進一步瞭解最佳化層級,請參閱 `compile()` 函式的 `optimize` 引數說明文件,網址為 https://docs.python.org/3/library/functions.html#compile 注意:值 `-1` 表示「目前的解譯器」,也就是在產生 pyc 的建構期間使用的解譯器,而不是在程式碼實際執行時的執行階段使用的解譯器。
precompile_source_retention

字串;預設為 "inherit"

在編譯來源檔案時,決定是否保留來源檔案的結果輸出內容。有效的值包括: * `Inherit`:沿用 {flag}`--precompile_source_retention` 旗標的值。 * `keep_source`:包含原始 Python 來源。 * `omit_source`:請勿包含原始 py 來源。 * `omit_if_generated_source`:如果是一般來源檔案,則保留原始來源;如果是產生的檔案,則略過。
pyc_collection

字串;預設為 "inherit"

決定是否應手動納入依附元件的 pyc 檔案。 注意:這項設定僅適用於 {flag}`--precompile_add_to_runfiles=decided_elsewhere`。 有效的值包括: * `沿用`:沿用 {flag}`--pyc_collection` 的值。 * `include_pyc`:從二進位檔中的依附元件新增 pyc 檔案 (來自 {obj}`PyInfo.transitive_pyc_files`. * `disabled`:不明確從依附元件新增 pyc 檔案。請注意,如果目標將 pyc 檔案納入其執行檔案 (例如使用 {obj} `--precompile_add_to_runfiles=always` 時),pyc 檔案仍可能來自依附元件。
python_version

字串;預設為 "PY3"

Defunct、unused、沒有執行任何動作。
srcs_version

字串;預設為 "PY2AND3"

Defunct、unused、沒有執行任何動作。
stamp

整數;預設值為 -1

是否將建構資訊編碼為二進位檔。可能的值包括: * `stamp = 1`:一律在二進位檔中加上建構資訊戳記,即使在 `--nostamp` 版本。**應避免使用此設定**,因為這項設定可能會終止 。 * `stamp = 0`:一律使用常數值取代版本資訊。這讓 實用的建構結果快取功能 * `stamp = -1`:建構資訊的嵌入作業是由 `--[no]stamp` 標記。 除非其依附元件變更,否則系統不會重新建構加上時間戳記的二進位檔。 警告:取樣可能會減少快取命中數,從而降低建構效能,且應 建議盡量避免使用

py_library

查看規則來源
py_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, imports, licenses, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, restricted_to, srcs_version, tags, target_compatible_with, testonly, toolchains, visibility)
可依附於 Python 程式碼的程式庫。 預設輸出: * 輸入的 Python 來源 * 來源為預先編譯的構件。 注意:先行編譯會影響 產生的 runfile詳情請參閱預先編譯相關的屬性和標記。

引數

屬性
name

名稱 (必填)

此目標的專屬名稱。

deps

標籤清單;預設為 []

要連結至目標的其他程式庫清單。 請參閱有關 [`deps` 屬性](https://bazel.build/reference/be/common-definitions#typical-attributes)的註解,這類屬性通常由規則定義。這些通常是 `py_library` 規則。 僅提供在執行階段使用的資料檔案的目標,屬於 `data` 屬性。
srcs

標籤清單;預設為 []

要處理以建立目標的 Python 來源檔案清單。這個 包含所有簽到程式碼,也可能包含產生的來源檔案。`.py` 檔案屬於 `srcs`,而程式庫目標屬於 `deps`。在執行階段可能需要的其他二進位檔案則屬於 `data`。
data

標籤清單;預設為 []

這個程式庫在執行階段所需的檔案清單。請參閱有關 [`data` 屬性](https://bazel.build/reference/be/common-definitions#typical-attributes)的註解,這類屬性通常由規則定義。沒有 `py_embed_data`,但有 `cc_embed_data` 和 `go_embed_data`,這是因為 Python 有執行階段資源的概念。
imports

字串清單;預設為 []

要新增至 PYTHONPATH 的匯入目錄清單。 取決於「設為變數」替代。系統會新增這些匯入目錄 此規則及其依附的所有規則 (注意:不是此規則的規則) 都不盡相同每個目錄都會由依賴此規則的 `py_binary` 規則新增至 `PYTHONPATH`。字串為 repo-runfiles-root 相對路徑,不允許使用絕對路徑 (開頭為 `/`) 和參照執行根目錄上方路徑的路徑,否則會導致錯誤。
precompile

字串;預設為 "inherit"

是否應針對**這個目標**的 py 來源檔案進行預先編譯。值: * `inherit`:從 {flag}`--precompile` 標記判斷值。* `enabled`:在建構期間編譯 Python 來源檔案。請注意, --precompile_add_to_runfiles 會影響已編譯檔案的納入方式 執行下游二進位檔 * `disabled`:請勿在建構期間編譯 Python 來源檔案。* `if_generated_source`:編譯 Python 來源檔案,但僅限於這些檔案是產生的檔案。:::{seealso} * {flag}`--precompile` 標記,可在某些情況下覆寫此屬性,並在建構時影響所有目標。* {obj}`pyc_collection` 屬性,可針對個別目標依序啟用預先編譯。* 如需預先編譯的指南,請參閱 [預先編譯](預先編譯) 文件。 :::
precompile_invalidation_mode

字串;預設為 "auto"

預先編譯檔案的驗證方式應與相關關聯保持最新狀態 來源檔案。可能的值包括: * `auto`:其他版本會自動決定有效值 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目 * `checked_hash`:如果來源檔案的雜湊與 pyc 檔案中記錄的雜湊相符,就會使用 pyc 檔案。在處理可能需要修改的程式碼時,這項功能最實用。* `unchecked_hash`:一律使用 pyc 檔案;不要將 pyc 的雜湊值與來源檔案進行比對。這在程式碼不可修改時相當實用。 如要進一步瞭解 pyc 無效模式,請參閱 https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode。
precompile_optimize_level

整數;預設值為 0

預先編譯檔案的最佳化等級。如要進一步瞭解最佳化層級,請參閱 `compile()` 函式的 `optimize` 引數說明文件,網址為 https://docs.python.org/3/library/functions.html#compile 注意:值 `-1` 表示「目前的解譯器」,也就是在產生 pyc 的建構期間使用的解譯器,而不是在程式碼實際執行時的執行階段使用的解譯器。
precompile_source_retention

字串;預設為 "inherit"

在編譯來源檔案時,決定是否要保留來源檔案。有效的值包括: * `Inherit`:沿用 {flag}`--precompile_source_retention` 旗標的值。 * `keep_source`:包含原始 Python 來源。* `omit_source`:不納入原始 py 來源。* `omit_if_generated_source`:如果是一般來源檔案,則保留原始來源;如果是產生的檔案,則略過。
srcs_version

字串;預設為 "PY2AND3"

已停用、未使用,不會執行任何動作。

py_test

查看規則來源
py_test(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, imports, legacy_create_init, licenses, local, main, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, pyc_collection, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)

引數

屬性
name

名稱 (必填)

這個目標的專屬名稱。

deps

標籤清單;預設為 []

要連結至目標的其他程式庫清單。查看影片的相關留言 [`deps` 屬性] 一般是由 rules](https://bazel.build/reference/be/common-definitions#typical-attributes). 這些通常是 `py_library` 規則。僅提供執行階段使用的資料檔案屬於 `data` 的目標 屬性。
srcs

標籤清單;必選

要處理以建立目標的 Python 來源檔案清單。這個 包含所有簽到程式碼,也可能包含產生的來源檔案。 `.py` 檔案屬於 `srcs`,程式庫目標隸屬於 `deps`。其他二進位檔 執行階段可能需要的檔案隸屬於 `data`。
data

標籤清單;預設為 []

這個程式庫在執行階段所需的檔案清單。請參閱有關 [`data` 屬性](https://bazel.build/reference/be/common-definitions#typical-attributes)的註解,這類屬性通常由規則定義。沒有 `py_embed_data`,但有 `cc_embed_data` 和 `go_embed_data`,這是因為 Python 有執行階段資源的概念。
imports

字串清單;預設為 []

要新增至 PYTHONPATH 的匯入目錄清單。 會使用「Make 變數」替換。系統會新增這些匯入目錄 此規則及其依附的所有規則 (注意:不是此規則的規則) 都不盡相同每個目錄都會由「py_binary」規則新增至「PYTHONPATH」 仍須符合這項規則字串為 repo-runfiles-root 相對路徑,不允許使用絕對路徑 (開頭為 `/`) 和參照執行根目錄上方路徑的路徑,否則會導致錯誤。
legacy_create_init

整數;預設值為 -1

是否在執行檔案樹狀結構中間接建立空白的 `__init__.py` 檔案。 這些目錄會在包含 Python 原始碼或共用 Python 原始碼的每個目錄中建立 以及這些目錄的每個父項目錄,但不包含存放區 根目錄預設值是 `-1` (auto),表示除非 使用了 `--incompatible_default_to_explicit_init_py`。如果為 false,使用者必須負責建立 (可能為空白) `__init__.py` 檔案,並視需要將這些檔案新增至 Python 目標的 `srcs`。
main

標籤;預設為 None

選用;應用程式主要進入點的來源檔案名稱。這個檔案也必須列在 `srcs` 中。如果未指定,系統會改用附加了 `.py` 的 `name`。如果 `name` 與 `srcs` 中的任何檔案名稱不相符,則必須指定 `main`。
precompile

String;預設值為 "inherit"

是否應針對**這個目標**的 py 來源檔案進行預先編譯。值: * `inherit`:從 {flag}`--precompile` 標記判斷值。* `enabled`:在建構期間編譯 Python 來源檔案。請注意, --precompile_add_to_runfiles 會影響已編譯檔案的納入方式 執行下游二進位檔 * `disabled`:請勿在建構期間編譯 Python 來源檔案。* `if_generated_source`:編譯 Python 來源檔案,但僅限於這些檔案是產生的檔案。:::{seealso} * {flag}`--precompile` 標記,可在某些情況下覆寫此屬性,並在建構時影響所有目標。* {obj}`pyc_collection` 屬性,可針對個別目標依序啟用預先編譯。* 如需預先編譯的指南,請參閱 [預先編譯](預先編譯) 文件。 :::
precompile_invalidation_mode

字串;預設為 "auto"

預先編譯檔案的驗證方式應與相關關聯保持最新狀態 來源檔案。可能的值包括: * `auto`:其他版本會自動決定有效值 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目 * `checked_hash`:如果來源檔案的雜湊與 pyc 檔案中記錄的雜湊相符,就會使用 pyc 檔案。在處理可能需要修改的程式碼時,這項功能最實用。* `unchecked_hash`:一律使用 pyc 檔案;不要將 pyc 的雜湊值與來源檔案進行比對。這在程式碼不可修改時相當實用。 如要進一步瞭解 pyc 無效模式,請參閱 https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode。
precompile_optimize_level

整數;預設值為 0

預先編譯檔案的最佳化等級。如要進一步瞭解最佳化層級,請參閱 `compile()` 函式的 `optimize` 引數說明文件,網址為 https://docs.python.org/3/library/functions.html#compile 注意:值 `-1` 表示「目前的解譯器」,也就是在產生 pyc 的建構期間使用的解譯器,而不是在程式碼實際執行時的執行階段使用的解譯器。
precompile_source_retention

字串;預設為 "inherit"

在編譯來源檔案時,決定是否保留來源檔案的結果輸出內容。有效的值包括: * `Inherit`:沿用 {flag}`--precompile_source_retention` 旗標的值。 * `keep_source`:包含原始 Python 來源。 * `omit_source`:請勿包含原始 py 來源。 * `omit_if_generated_source`:如果是一般來源檔案,則保留原始來源;如果是產生的檔案,則略過。
pyc_collection

字串;預設為 "inherit"

決定是否應手動納入依附元件的 pyc 檔案。 注意:這項設定僅適用於 {flag}`--precompile_add_to_runfiles=decided_elsewhere`。 有效的值包括: * `沿用`:沿用 {flag}`--pyc_collection` 的值。 * `include_pyc`:從二進位檔中的依附元件新增 pyc 檔案 (來自 {obj}`PyInfo.transitive_pyc_files`. * `disabled`:不明確從依附元件新增 pyc 檔案。請注意,如果目標將 pyc 檔案納入其執行檔案 (例如使用 {obj} `--precompile_add_to_runfiles=always` 時),pyc 檔案仍可能來自依附元件。
python_version

字串;預設為 "PY3"

Defunct、unused、沒有執行任何動作。
srcs_version

字串;預設為 "PY2AND3"

已停用、未使用,不會執行任何動作。
stamp

Integer;預設值為 0

是否將建構資訊編碼至二進位檔。可能的值包括: * `stamp = 1`:一律在二進位檔中加上建構資訊戳記,即使在 `--nostamp` 版本。**應避免使用此設定**,因為這項設定可能會終止 。 * `stamp = 0`:一律使用常數值取代版本資訊。這讓 實用的建構結果快取功能 * `stamp = -1`: 建構資訊的嵌入方式由 `--[no]stamp` 標記控制。除非依附元件變更,否則系統不會重建經過標記的二進位檔。警告:沖壓會降低快取命中率,進而影響建構效能,因此請盡量避免使用。

py_runtime

查看規則來源
py_runtime(name, bootstrap_template, compatible_with, coverage_tool, deprecation, distribs, exec_compatible_with, exec_properties, features, files, implementation_name, interpreter, interpreter_path, interpreter_version_info, pyc_tag, python_version, restricted_to, stage2_bootstrap_template, stub_shebang, tags, target_compatible_with, testonly, toolchains, visibility, zip_main_template)
代表用來執行 Python 程式碼的 Python 執行階段。 `py_runtime` 目標可以代表 *平台執行階段* 或 *內建版本 執行階段*。平台執行階段會存取系統安裝的解譯器,而內建執行階段則會指向可執行的目標,以做為解譯器。在這兩種情況下,使用「解譯器」意指任何可執行的二進位檔 能夠執行透過指令傳遞的 Python 指令碼的包裝函式指令碼 ,並遵循與標準 CPython 解譯器相同的慣例。 平台執行階段本質上並非密封的。它會對目標平台設下要求,要求該平台在特定路徑中提供解譯器。一個 「內建」執行階段是否特徵可不重要,取決於它指向 已簽入的翻譯器或能存取系統的包裝函式指令碼 翻譯。 範例 ``` load("@rules_python//python:py_runtime.bzl", "py_runtime") py_runtime( name = "python-2.7.12", files = glob(["python-2.7.12/**"]), interpreter = "python-2.7.12/bin/python", ) py_runtime( name = "python-3.6.0", interpreter_path = "/opt/pyenv/versions/3.6.0/bin/python", ) ```

引數

屬性
name

名稱;必選

此目標的專屬名稱。

bootstrap_template

標籤;預設為 "@rules_python//python/private:bootstrap_template"

要使用的 Bootstrap 指令碼範本檔案。應包含 %python_binary%、%workspace_name%、%main% 和 %imports%。展開之後,這個範本會成為用來啟動 因此負責執行初始啟動操作,例如尋找 Python 解譯器、執行檔案及建構環境 所需的 Python 應用程式 雖然目前為選填屬性,但當 Python 規則已從 Bazel 本身移出。 展開的確切變數名稱是不穩定的 API,隨時可能變更。 將 Python 規則移出 Bazel 後,API 就會變得更穩定。如需更多變數,請參閱 @bazel_tools//tools/python:python_bootstrap_template.txt。
coverage_tool

標籤;預設為 None

這是用於收集程式碼涵蓋率資訊的目標 {rule}`py_binary` 和 {rule}`py_test` 目標。 如果已設定,目標必須產生單一檔案,或可執行的目標。單一檔案的路徑或執行檔 (如果目標為可執行檔) 會決定 Python 涵蓋率工具的進入點。目標及其 啟用涵蓋率功能之後,系統就會將 runfile 加入至執行檔案。 工具的進入點必須可由 Python 轉譯器載入 (例如 `.py` 或 `.pyc` 檔案)。必須接受指令列引數 [`coverage.py`](https://coverage.readthedocs.io),至少包括 `run` 和 `lcov` 子指令
files

標籤清單;預設為 []

對於建構執行階段而言,這是構成這個執行階段的檔案組合。 這些檔案會加入使用此執行階段的 Python 二進位檔的執行檔。如果是平台執行階段,則不得設定這個屬性。
implementation_name

String;預設值為 ""

Python 實作名稱 (`sys.implementation.name`)
interpreter

標籤;預設為 None

針對建構執行階段,這是要當做解譯器叫用的目標。可以是下列任一項目: * 單一檔案,即為解譯器二進位檔。假設這類轉譯器是自給自足的單一檔案可執行檔,或是任何支援檔案都已在 `files` 中指定。 * 可執行的目標。目標的可執行檔將為解譯器二進位檔。 任何其他預設輸出內容 (`target.files`) 和一般檔案執行檔 (`runfiles.files`) 都會自動納入,就像在 `files` 屬性中指定一樣。注意:目標的執行檔可能尚未正確地尊重/傳播至工具鏈/轉譯器的使用者,請參閱 bazelbuild/rules_python/issues/1612。對於平台執行階段 (即已設定 `interpreter_path`),則不得設定此屬性。
interpreter_path

字串;預設為 ""

對於平台執行階段,這是目標平台上 Python 解譯器的絕對路徑。如果是內建執行階段,則不得設定這個屬性。
interpreter_version_info

字典:字串 ->String;預設值為 {}

這個執行階段提供的解譯器版本資訊。 如未指定,則會使用 {obj}`--python_version` 支援的鍵與「sys.version_info」的名稱相符。輸入內容時 值是字串,大多數會轉換成 int。支援的鍵如下: * major:int,主要版本號碼 * minor:int,次要版本號碼 * micro:可選 int,微版本號碼 * releaselevel:可選 str,版本等級 * serial:可選 int,版本的序號 :::{versionchanged} 0.36.0 {obj}`--python_version` 會決定預設值。:::
pyc_tag

字串;預設為 ""

選用字串;然後是 pyc 檔案名稱的標記部分,例如`cpython-39` 中修正 `foo.cpython-39.pyc`。詳見 PEP 3147。如未指定,系統會計算 來自 `implementation_name` 和 `interpreter_version_info`。如果沒有 pyc_tag 那麼只有不含來源的 Pyc 產生才能正常運作。
python_version

字串;預設為 "PY3"

這個執行階段是用於 Python 主要版本 2 還是 3。有效值為「PY2」 和「PY3」 預設值是由「--incompatible_py3_is_default」標記控制。 不過,日後這項屬性將為必填,且沒有預設值。
stage2_bootstrap_template

標籤;預設為 "@rules_python//python/private:stage2_bootstrap_template"

啟用兩階段啟動程序時使用的範本 :::{seealso} {obj}`PyRuntimeInfo.stage2_bootstrap_template` 和 {obj}--bootstrap_impl` :::
stub_shebang

字串;預設為 "#!/usr/bin/env python3"

「Shebang」運算式前方加至 Bootstrapping Python 虛設常式指令碼 執行「{rule}」的 py_binary 目標時使用。 請參閱 https://github.com/bazelbuild/bazel/issues/8685 瞭解原因。 不適用於 Windows。
zip_main_template

標籤;預設為 "@rules_python//python/private:zip_main_template"

用於 zip 頂層 `__main__.py` 檔案的範本。這會成為執行 `python foo.zip` 時執行的進入點。 :::{seealso} {obj}`PyRuntimeInfo.zip_main_template` 欄位。 :::