Quy tắc Python

Báo cáo vấn đề Xem nguồn Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Quy tắc

py_binary

Xem nguồn quy tắc
py_binary(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, exec_compatible_with, exec_group_compatible_with, exec_properties, features, imports, interpreter_args, legacy_create_init, licenses, main, main_module, output_licenses, package_metadata, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, pyc_collection, pyi_deps, pyi_srcs, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các thư viện bổ sung cần được liên kết vào mục tiêu. Xem các nhận xét về thuộc tính [`deps` thường được xác định theo quy tắc](https://bazel.build/reference/be/common-definitions#typical-attributes). Đây thường là các quy tắc "py_library". Những mục tiêu chỉ cung cấp các tệp dữ liệu được dùng trong thời gian chạy thuộc về thuộc tính "data".
srcs

Danh sách nhãn; bắt buộc

Danh sách các tệp nguồn Python được xử lý để tạo mục tiêu. Thư mục này bao gồm tất cả mã đã kiểm tra và có thể bao gồm các tệp nguồn đã tạo. Các tệp ".py" thuộc về "srcs" và các mục tiêu thư viện thuộc về "deps". Các tệp nhị phân khác có thể cần thiết tại thời gian chạy thuộc về "data".
data

Danh sách nhãn; mặc định là []

Danh sách các tệp mà thư viện này cần trong thời gian chạy. Xem phần bình luận về thuộc tính [`data` thường được xác định theo quy tắc](https://bazel.build/reference/be/common-definitions#typical-attributes). Không có `py_embed_data` như `cc_embed_data` và `go_embed_data`. Nguyên nhân là do Python có khái niệm về tài nguyên thời gian chạy.
distribs

Danh sách các chuỗi; mặc định là []

imports

Danh sách các chuỗi; mặc định là []

Danh sách các thư mục nhập sẽ được thêm vào PYTHONPATH. Chịu sự thay thế "Tạo biến". Các thư mục nhập này sẽ được thêm cho quy tắc này và tất cả các quy tắc phụ thuộc vào quy tắc này (lưu ý: không phải các quy tắc mà quy tắc này phụ thuộc vào). Mỗi thư mục sẽ được thêm vào `PYTHONPATH` theo các quy tắc `py_binary` phụ thuộc vào quy tắc này. Các chuỗi này tương ứng với repo-runfiles-root, không được phép dùng đường dẫn tuyệt đối (đường dẫn bắt đầu bằng "/") và đường dẫn tham chiếu đến đường dẫn phía trên thư mục thực thi, nếu không sẽ xảy ra lỗi.
interpreter_args

Danh sách các chuỗi; mặc định là []

Các đối số chỉ áp dụng cho trình thông dịch. Các đối số mà một trình thông dịch hỗ trợ là dành riêng cho trình thông dịch đó. Đối với CPython, hãy xem https://docs.python.org/3/using/cmdline.html. :::{note} Chỉ được hỗ trợ cho {obj}`--bootstrap_impl=script`. Nếu không, tham số này sẽ bị bỏ qua. ::: :::{seealso} Biến môi trường {obj}`RULES_PYTHON_ADDITIONAL_INTERPRETER_ARGS` ::: :::{versionadded} 1.3.0 :::
legacy_create_init

Số nguyên; giá trị mặc định là -1

Có tạo ngầm các tệp `__init__.py` trống trong cây runfiles hay không. Các tệp này được tạo trong mọi thư mục chứa mã nguồn Python hoặc thư viện dùng chung, cũng như mọi thư mục mẹ của các thư mục đó, ngoại trừ thư mục gốc của kho lưu trữ. Giá trị mặc định là "-1" (tự động), tức là true trừ phi bạn dùng "--incompatible_default_to_explicit_init_py". Nếu là false, người dùng chịu trách nhiệm tạo các tệp `__init__.py` (có thể trống) và thêm các tệp đó vào `srcs` của các mục tiêu Python khi cần.
main

Nhãn; mặc định là None

Không bắt buộc; tên của tệp nguồn là điểm truy cập chính của ứng dụng. Tệp này cũng phải được liệt kê trong "srcs". Nếu không chỉ định, "name" (có thêm ".py") sẽ được dùng thay thế. Nếu "name" không khớp với tên tệp nào trong "srcs", bạn phải chỉ định "main". Đây là trường hợp loại trừ lẫn nhau với {obj}`main_module`.
main_module

Chuỗi; giá trị mặc định là ""

Tên mô-đun cần thực thi dưới dạng chương trình chính. Khi được đặt, bạn không bắt buộc phải có "srcs" và giả định rằng mô-đun được cung cấp bởi một phần phụ thuộc. Hãy xem https://docs.python.org/3/using/cmdline.html#cmdoption-m để biết thêm thông tin về cách chạy các mô-đun dưới dạng chương trình chính. Điều này loại trừ lẫn nhau với {obj}`main`. :::{versionadded} 1.3.0 :::
precompile

Chuỗi; giá trị mặc định là "inherit"

Có nên biên dịch trước các tệp nguồn py **cho mục tiêu này** hay không. Giá trị: * "inherit": Cho phép tệp nhị phân hạ lưu quyết định có sử dụng các tệp được biên dịch trước hay không. * `enabled`: Biên dịch các tệp nguồn Python tại thời điểm tạo bản dựng. * "disabled": Không biên dịch các tệp nguồn Python tại thời điểm tạo bản dựng. :::{seealso} * Cờ {flag}`--precompile`. Cờ này có thể ghi đè thuộc tính này trong một số trường hợp và sẽ ảnh hưởng đến tất cả các mục tiêu khi tạo. * Thuộc tính {obj}`pyc_collection` để cho phép biên dịch trước theo cách bắc cầu trên cơ sở mỗi mục tiêu. * Tài liệu [Precompiling](precompiling) cho hướng dẫn về cách sử dụng tính năng biên dịch trước. :::
precompile_invalidation_mode

Chuỗi; giá trị mặc định là "auto"

Cách xác minh để đảm bảo các tệp được biên dịch sẵn luôn mới nhất so với các tệp nguồn được liên kết. Các giá trị có thể là: * "auto": Giá trị thực tế sẽ được tự động xác định theo các chế độ cài đặt bản dựng khác. * `checked_hash`: Sử dụng tệp pyc nếu hàm băm của tệp nguồn khớp với hàm băm được ghi trong tệp pyc. Điều này hữu ích nhất khi bạn làm việc với mã mà bạn có thể sửa đổi. * `unchecked_hash`: Luôn sử dụng tệp pyc; không kiểm tra hàm băm của pyc với tệp nguồn. Điều này hữu ích nhất khi mã không được sửa đổi. Để biết thêm thông tin về các chế độ vô hiệu hoá pyc, hãy xem https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode
precompile_optimize_level

Số nguyên; giá trị mặc định là 0

Cấp độ tối ưu hoá cho các tệp được biên dịch trước. Để biết thêm thông tin về các cấp độ tối ưu hoá, hãy xem tài liệu về đối số "optimize" của hàm `compile()` tại https://docs.python.org/3/library/functions.html#compile LƯU Ý: Giá trị "-1" có nghĩa là "trình thông dịch hiện tại", đây sẽ là trình thông dịch được dùng _tại thời điểm tạo bản dựng khi pyc được tạo_, chứ không phải trình thông dịch được dùng tại thời gian chạy khi mã thực sự chạy.
precompile_source_retention

Chuỗi; giá trị mặc định là "inherit"

Xác định xem tệp nguồn có được giữ trong đầu ra kết quả hay không khi một tệp nguồn được biên dịch. Các giá trị hợp lệ là: * `inherit`: Kế thừa giá trị từ cờ {flag}`--precompile_source_retention`. * `keep_source`: Bao gồm nguồn Python ban đầu. * `omit_source`: Không bao gồm nguồn py ban đầu.
pyc_collection

Chuỗi; giá trị mặc định là "inherit"

Xác định xem có nên tự thêm các tệp pyc từ các phần phụ thuộc hay không. Các giá trị hợp lệ là: * `inherit`: Kế thừa giá trị từ {flag}`--precompile`. * `include_pyc`: Thêm các tệp pyc được tạo ngầm từ các phần phụ thuộc. tức là các tệp pyc cho những mục tiêu chỉ định {attr}`precompile="inherit"`. * `disabled`: Không thêm các tệp pyc được tạo ngầm. Xin lưu ý rằng các tệp pyc vẫn có thể đến từ các phần phụ thuộc cho phép biên dịch trước ở cấp mục tiêu.
pyi_deps

Danh sách nhãn; mặc định là []

Các phần phụ thuộc cung cấp định nghĩa kiểu mà thư viện cần. Đây là những phần phụ thuộc đáp ứng các hoạt động nhập được bảo vệ bằng `typing.TYPE_CHECKING`. Đây chỉ là các phần phụ thuộc trong thời gian xây dựng và không được đưa vào chương trình có thể chạy (tuy nhiên, các quy tắc đóng gói có thể đưa chúng vào). :::{versionadded} 1.1.0 :::
pyi_srcs

Danh sách nhãn; mặc định là []

Tệp định nghĩa kiểu cho thư viện. Đây thường là các tệp ".pyi", nhưng các loại tệp khác cho các định dạng cụ thể của trình kiểm tra kiểu cũng được cho phép. Đây chỉ là các phần phụ thuộc trong thời gian xây dựng và không được đưa vào chương trình có thể chạy (tuy nhiên, các quy tắc đóng gói có thể bao gồm các phần phụ thuộc này). :::{versionadded} 1.1.0 :::
python_version

Chuỗi; giá trị mặc định là ""

Phiên bản Python mà mục tiêu này sẽ sử dụng. Giá trị phải ở định dạng "X.Y" hoặc "X.Y.Z" (hoặc định dạng tương thích). Nếu trống hoặc không được chỉ định, cờ {obj}`--python_version` của cấu hình đến sẽ được kế thừa. Để đảm bảo khả năng tương thích ngược, các giá trị "PY2" và "PY3" được chấp nhận, nhưng được coi là giá trị trống/không xác định. :::{note} Để sử dụng phiên bản được yêu cầu, phải có một chuỗi công cụ được định cấu hình để khớp với phiên bản Python. Nếu không, yêu cầu có thể bị bỏ qua một cách âm thầm hoặc có thể xảy ra lỗi, tuỳ thuộc vào cấu hình chuỗi công cụ. ::: :::{versionchanged} 1.1.0 Thuộc tính này đã thay đổi từ chỉ chấp nhận các giá trị "PY2" và "PY3" thành chấp nhận các phiên bản Python tuỳ ý. :::
srcs_version

Chuỗi; giá trị mặc định là ""

Không còn tồn tại, không được dùng, không làm gì cả.
stamp

Số nguyên; giá trị mặc định là -1

Có mã hoá thông tin bản dựng vào tệp nhị phân hay không. Các giá trị có thể có: * `stamp = 1`: Luôn đóng dấu thông tin bản dựng vào tệp nhị phân, ngay cả trong các bản dựng `--nostamp`. **Bạn nên tránh chế độ cài đặt này**, vì chế độ này có thể loại bỏ tính năng lưu vào bộ nhớ đệm từ xa cho tệp nhị phân và mọi thao tác hạ nguồn phụ thuộc vào tệp nhị phân đó. * `stamp = 0`: Luôn thay thế thông tin bản dựng bằng các giá trị hằng số. Điều này giúp lưu vào bộ nhớ đệm kết quả bản dựng một cách hiệu quả. * `stamp = -1`: Việc nhúng thông tin bản dựng được kiểm soát bằng cờ `--[no]stamp`. Các tệp nhị phân được đóng dấu sẽ không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi. CẢNH BÁO: Việc đóng dấu có thể làm giảm hiệu suất bản dựng bằng cách giảm số lượt truy cập vào bộ nhớ đệm và bạn nên tránh việc này nếu có thể.

py_library

Xem nguồn quy tắc
py_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_group_compatible_with, exec_properties, features, imports, licenses, package_metadata, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, pyi_deps, pyi_srcs, restricted_to, srcs_version, tags, target_compatible_with, testonly, toolchains, visibility)
Một thư viện mã Python mà bạn có thể phụ thuộc vào. Đầu ra mặc định: * Nguồn Python đầu vào * Các cấu phần phần mềm được biên dịch trước từ các nguồn. LƯU Ý: Giai đoạn tiền biên dịch ảnh hưởng đến những đầu ra mặc định được đưa vào các tệp chạy kết quả. Hãy xem các thuộc tính và cờ liên quan đến quá trình biên dịch trước để biết thêm thông tin. :::{versionchanged} 0.37.0 Các tệp nguồn không còn được thêm trực tiếp vào runfiles nữa. :::

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các thư viện bổ sung cần được liên kết vào mục tiêu. Xem các nhận xét về thuộc tính [`deps` thường được xác định theo quy tắc](https://bazel.build/reference/be/common-definitions#typical-attributes). Đây thường là các quy tắc "py_library". Những mục tiêu chỉ cung cấp các tệp dữ liệu được dùng trong thời gian chạy thuộc về thuộc tính "data".
srcs

Danh sách nhãn; mặc định là []

Danh sách các tệp nguồn Python được xử lý để tạo mục tiêu. Thư mục này bao gồm tất cả mã đã kiểm tra và có thể bao gồm các tệp nguồn đã tạo. Các tệp ".py" thuộc về "srcs" và các mục tiêu thư viện thuộc về "deps". Các tệp nhị phân khác có thể cần thiết tại thời gian chạy thuộc về "data".
data

Danh sách nhãn; mặc định là []

Danh sách các tệp mà thư viện này cần trong thời gian chạy. Xem phần bình luận về thuộc tính [`data` thường được xác định theo quy tắc](https://bazel.build/reference/be/common-definitions#typical-attributes). Không có `py_embed_data` như `cc_embed_data` và `go_embed_data`. Nguyên nhân là do Python có khái niệm về tài nguyên thời gian chạy.
distribs

Danh sách các chuỗi; mặc định là []

imports

Danh sách các chuỗi; mặc định là []

Danh sách các thư mục nhập sẽ được thêm vào PYTHONPATH. Chịu sự thay thế "Tạo biến". Các thư mục nhập này sẽ được thêm cho quy tắc này và tất cả các quy tắc phụ thuộc vào quy tắc này (lưu ý: không phải các quy tắc mà quy tắc này phụ thuộc vào). Mỗi thư mục sẽ được thêm vào `PYTHONPATH` theo các quy tắc `py_binary` phụ thuộc vào quy tắc này. Các chuỗi này tương ứng với repo-runfiles-root, không được phép dùng đường dẫn tuyệt đối (đường dẫn bắt đầu bằng "/") và đường dẫn tham chiếu đến đường dẫn phía trên thư mục thực thi, nếu không sẽ xảy ra lỗi.
precompile

Chuỗi; giá trị mặc định là "inherit"

Có nên biên dịch trước các tệp nguồn py **cho mục tiêu này** hay không. Giá trị: * "inherit": Cho phép tệp nhị phân hạ lưu quyết định có sử dụng các tệp được biên dịch trước hay không. * `enabled`: Biên dịch các tệp nguồn Python tại thời điểm tạo bản dựng. * "disabled": Không biên dịch các tệp nguồn Python tại thời điểm tạo bản dựng. :::{seealso} * Cờ {flag}`--precompile`. Cờ này có thể ghi đè thuộc tính này trong một số trường hợp và sẽ ảnh hưởng đến tất cả các mục tiêu khi tạo. * Thuộc tính {obj}`pyc_collection` để cho phép biên dịch trước theo cách bắc cầu trên cơ sở mỗi mục tiêu. * Tài liệu [Precompiling](precompiling) cho hướng dẫn về cách sử dụng tính năng biên dịch trước. :::
precompile_invalidation_mode

Chuỗi; giá trị mặc định là "auto"

Cách xác minh để đảm bảo các tệp được biên dịch sẵn luôn mới nhất so với các tệp nguồn được liên kết. Các giá trị có thể là: * "auto": Giá trị thực tế sẽ được tự động xác định theo các chế độ cài đặt bản dựng khác. * `checked_hash`: Sử dụng tệp pyc nếu hàm băm của tệp nguồn khớp với hàm băm được ghi trong tệp pyc. Điều này hữu ích nhất khi bạn làm việc với mã mà bạn có thể sửa đổi. * `unchecked_hash`: Luôn sử dụng tệp pyc; không kiểm tra hàm băm của pyc với tệp nguồn. Điều này hữu ích nhất khi mã không được sửa đổi. Để biết thêm thông tin về các chế độ vô hiệu hoá pyc, hãy xem https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode
precompile_optimize_level

Số nguyên; giá trị mặc định là 0

Cấp độ tối ưu hoá cho các tệp được biên dịch trước. Để biết thêm thông tin về các cấp độ tối ưu hoá, hãy xem tài liệu về đối số "optimize" của hàm `compile()` tại https://docs.python.org/3/library/functions.html#compile LƯU Ý: Giá trị "-1" có nghĩa là "trình thông dịch hiện tại", đây sẽ là trình thông dịch được dùng _tại thời điểm tạo bản dựng khi pyc được tạo_, chứ không phải trình thông dịch được dùng tại thời gian chạy khi mã thực sự chạy.
precompile_source_retention

Chuỗi; giá trị mặc định là "inherit"

Xác định xem tệp nguồn có được giữ trong đầu ra kết quả hay không khi một tệp nguồn được biên dịch. Các giá trị hợp lệ là: * `inherit`: Kế thừa giá trị từ cờ {flag}`--precompile_source_retention`. * `keep_source`: Bao gồm nguồn Python ban đầu. * `omit_source`: Không bao gồm nguồn py ban đầu.
pyi_deps

Danh sách nhãn; mặc định là []

Các phần phụ thuộc cung cấp định nghĩa kiểu mà thư viện cần. Đây là những phần phụ thuộc đáp ứng các hoạt động nhập được bảo vệ bằng `typing.TYPE_CHECKING`. Đây chỉ là các phần phụ thuộc trong thời gian xây dựng và không được đưa vào chương trình có thể chạy (tuy nhiên, các quy tắc đóng gói có thể đưa chúng vào). :::{versionadded} 1.1.0 :::
pyi_srcs

Danh sách nhãn; mặc định là []

Tệp định nghĩa kiểu cho thư viện. Đây thường là các tệp ".pyi", nhưng các loại tệp khác cho các định dạng cụ thể của trình kiểm tra kiểu cũng được cho phép. Đây chỉ là các phần phụ thuộc trong thời gian xây dựng và không được đưa vào chương trình có thể chạy (tuy nhiên, các quy tắc đóng gói có thể bao gồm các phần phụ thuộc này). :::{versionadded} 1.1.0 :::
srcs_version

Chuỗi; giá trị mặc định là ""

Không còn tồn tại, không được dùng, không làm gì cả.

py_test

Xem nguồn quy tắc
py_test(name, deps, srcs, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_group_compatible_with, exec_properties, features, flaky, imports, interpreter_args, legacy_create_init, licenses, local, main, main_module, package_metadata, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, pyc_collection, pyi_deps, pyi_srcs, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

deps

Danh sách nhãn; mặc định là []

Danh sách các thư viện bổ sung cần được liên kết vào mục tiêu. Xem các nhận xét về thuộc tính [`deps` thường được xác định theo quy tắc](https://bazel.build/reference/be/common-definitions#typical-attributes). Đây thường là các quy tắc "py_library". Những mục tiêu chỉ cung cấp các tệp dữ liệu được dùng trong thời gian chạy thuộc về thuộc tính "data".
srcs

Danh sách nhãn; bắt buộc

Danh sách các tệp nguồn Python được xử lý để tạo mục tiêu. Thư mục này bao gồm tất cả mã đã kiểm tra và có thể bao gồm các tệp nguồn đã tạo. Các tệp ".py" thuộc về "srcs" và các mục tiêu thư viện thuộc về "deps". Các tệp nhị phân khác có thể cần thiết tại thời gian chạy thuộc về "data".
data

Danh sách nhãn; mặc định là []

Danh sách các tệp mà thư viện này cần trong thời gian chạy. Xem phần bình luận về thuộc tính [`data` thường được xác định theo quy tắc](https://bazel.build/reference/be/common-definitions#typical-attributes). Không có `py_embed_data` như `cc_embed_data` và `go_embed_data`. Nguyên nhân là do Python có khái niệm về tài nguyên thời gian chạy.
distribs

Danh sách các chuỗi; mặc định là []

imports

Danh sách các chuỗi; mặc định là []

Danh sách các thư mục nhập sẽ được thêm vào PYTHONPATH. Chịu sự thay thế "Tạo biến". Các thư mục nhập này sẽ được thêm cho quy tắc này và tất cả các quy tắc phụ thuộc vào quy tắc này (lưu ý: không phải các quy tắc mà quy tắc này phụ thuộc vào). Mỗi thư mục sẽ được thêm vào `PYTHONPATH` theo các quy tắc `py_binary` phụ thuộc vào quy tắc này. Các chuỗi này tương ứng với repo-runfiles-root, không được phép dùng đường dẫn tuyệt đối (đường dẫn bắt đầu bằng "/") và đường dẫn tham chiếu đến đường dẫn phía trên thư mục thực thi, nếu không sẽ xảy ra lỗi.
interpreter_args

Danh sách các chuỗi; mặc định là []

Các đối số chỉ áp dụng cho trình thông dịch. Các đối số mà một trình thông dịch hỗ trợ là dành riêng cho trình thông dịch đó. Đối với CPython, hãy xem https://docs.python.org/3/using/cmdline.html. :::{note} Chỉ được hỗ trợ cho {obj}`--bootstrap_impl=script`. Nếu không, tham số này sẽ bị bỏ qua. ::: :::{seealso} Biến môi trường {obj}`RULES_PYTHON_ADDITIONAL_INTERPRETER_ARGS` ::: :::{versionadded} 1.3.0 :::
legacy_create_init

Số nguyên; giá trị mặc định là -1

Có tạo ngầm các tệp `__init__.py` trống trong cây runfiles hay không. Các tệp này được tạo trong mọi thư mục chứa mã nguồn Python hoặc thư viện dùng chung, cũng như mọi thư mục mẹ của các thư mục đó, ngoại trừ thư mục gốc của kho lưu trữ. Giá trị mặc định là "-1" (tự động), tức là true trừ phi bạn dùng "--incompatible_default_to_explicit_init_py". Nếu là false, người dùng chịu trách nhiệm tạo các tệp `__init__.py` (có thể trống) và thêm các tệp đó vào `srcs` của các mục tiêu Python khi cần.
main

Nhãn; mặc định là None

Không bắt buộc; tên của tệp nguồn là điểm truy cập chính của ứng dụng. Tệp này cũng phải được liệt kê trong "srcs". Nếu không chỉ định, "name" (có thêm ".py") sẽ được dùng thay thế. Nếu "name" không khớp với tên tệp nào trong "srcs", bạn phải chỉ định "main". Đây là trường hợp loại trừ lẫn nhau với {obj}`main_module`.
main_module

Chuỗi; giá trị mặc định là ""

Tên mô-đun cần thực thi dưới dạng chương trình chính. Khi được đặt, bạn không bắt buộc phải có "srcs" và giả định rằng mô-đun được cung cấp bởi một phần phụ thuộc. Hãy xem https://docs.python.org/3/using/cmdline.html#cmdoption-m để biết thêm thông tin về cách chạy các mô-đun dưới dạng chương trình chính. Điều này loại trừ lẫn nhau với {obj}`main`. :::{versionadded} 1.3.0 :::
precompile

Chuỗi; giá trị mặc định là "inherit"

Có nên biên dịch trước các tệp nguồn py **cho mục tiêu này** hay không. Giá trị: * "inherit": Cho phép tệp nhị phân hạ lưu quyết định có sử dụng các tệp được biên dịch trước hay không. * `enabled`: Biên dịch các tệp nguồn Python tại thời điểm tạo bản dựng. * "disabled": Không biên dịch các tệp nguồn Python tại thời điểm tạo bản dựng. :::{seealso} * Cờ {flag}`--precompile`. Cờ này có thể ghi đè thuộc tính này trong một số trường hợp và sẽ ảnh hưởng đến tất cả các mục tiêu khi tạo. * Thuộc tính {obj}`pyc_collection` để cho phép biên dịch trước theo cách bắc cầu trên cơ sở mỗi mục tiêu. * Tài liệu [Precompiling](precompiling) cho hướng dẫn về cách sử dụng tính năng biên dịch trước. :::
precompile_invalidation_mode

Chuỗi; giá trị mặc định là "auto"

Cách xác minh để đảm bảo các tệp được biên dịch sẵn luôn mới nhất so với các tệp nguồn được liên kết. Các giá trị có thể là: * "auto": Giá trị thực tế sẽ được tự động xác định theo các chế độ cài đặt bản dựng khác. * `checked_hash`: Sử dụng tệp pyc nếu hàm băm của tệp nguồn khớp với hàm băm được ghi trong tệp pyc. Điều này hữu ích nhất khi bạn làm việc với mã mà bạn có thể sửa đổi. * `unchecked_hash`: Luôn sử dụng tệp pyc; không kiểm tra hàm băm của pyc với tệp nguồn. Điều này hữu ích nhất khi mã không được sửa đổi. Để biết thêm thông tin về các chế độ vô hiệu hoá pyc, hãy xem https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode
precompile_optimize_level

Số nguyên; giá trị mặc định là 0

Cấp độ tối ưu hoá cho các tệp được biên dịch trước. Để biết thêm thông tin về các cấp độ tối ưu hoá, hãy xem tài liệu về đối số "optimize" của hàm `compile()` tại https://docs.python.org/3/library/functions.html#compile LƯU Ý: Giá trị "-1" có nghĩa là "trình thông dịch hiện tại", đây sẽ là trình thông dịch được dùng _tại thời điểm tạo bản dựng khi pyc được tạo_, chứ không phải trình thông dịch được dùng tại thời gian chạy khi mã thực sự chạy.
precompile_source_retention

Chuỗi; giá trị mặc định là "inherit"

Xác định xem tệp nguồn có được giữ trong đầu ra kết quả hay không khi một tệp nguồn được biên dịch. Các giá trị hợp lệ là: * `inherit`: Kế thừa giá trị từ cờ {flag}`--precompile_source_retention`. * `keep_source`: Bao gồm nguồn Python ban đầu. * `omit_source`: Không bao gồm nguồn py ban đầu.
pyc_collection

Chuỗi; giá trị mặc định là "inherit"

Xác định xem có nên tự thêm các tệp pyc từ các phần phụ thuộc hay không. Các giá trị hợp lệ là: * `inherit`: Kế thừa giá trị từ {flag}`--precompile`. * `include_pyc`: Thêm các tệp pyc được tạo ngầm từ các phần phụ thuộc. tức là các tệp pyc cho những mục tiêu chỉ định {attr}`precompile="inherit"`. * `disabled`: Không thêm các tệp pyc được tạo ngầm. Xin lưu ý rằng các tệp pyc vẫn có thể đến từ các phần phụ thuộc cho phép biên dịch trước ở cấp mục tiêu.
pyi_deps

Danh sách nhãn; mặc định là []

Các phần phụ thuộc cung cấp định nghĩa kiểu mà thư viện cần. Đây là những phần phụ thuộc đáp ứng các hoạt động nhập được bảo vệ bằng `typing.TYPE_CHECKING`. Đây chỉ là các phần phụ thuộc trong thời gian xây dựng và không được đưa vào chương trình có thể chạy (tuy nhiên, các quy tắc đóng gói có thể đưa chúng vào). :::{versionadded} 1.1.0 :::
pyi_srcs

Danh sách nhãn; mặc định là []

Tệp định nghĩa kiểu cho thư viện. Đây thường là các tệp ".pyi", nhưng các loại tệp khác cho các định dạng cụ thể của trình kiểm tra kiểu cũng được cho phép. Đây chỉ là các phần phụ thuộc trong thời gian xây dựng và không được đưa vào chương trình có thể chạy (tuy nhiên, các quy tắc đóng gói có thể bao gồm các phần phụ thuộc này). :::{versionadded} 1.1.0 :::
python_version

Chuỗi; giá trị mặc định là ""

Phiên bản Python mà mục tiêu này sẽ sử dụng. Giá trị phải ở định dạng "X.Y" hoặc "X.Y.Z" (hoặc định dạng tương thích). Nếu trống hoặc không được chỉ định, cờ {obj}`--python_version` của cấu hình đến sẽ được kế thừa. Để đảm bảo khả năng tương thích ngược, các giá trị "PY2" và "PY3" được chấp nhận, nhưng được coi là giá trị trống/không xác định. :::{note} Để sử dụng phiên bản được yêu cầu, phải có một chuỗi công cụ được định cấu hình để khớp với phiên bản Python. Nếu không, yêu cầu có thể bị bỏ qua một cách âm thầm hoặc có thể xảy ra lỗi, tuỳ thuộc vào cấu hình chuỗi công cụ. ::: :::{versionchanged} 1.1.0 Thuộc tính này đã thay đổi từ chỉ chấp nhận các giá trị "PY2" và "PY3" thành chấp nhận các phiên bản Python tuỳ ý. :::
srcs_version

Chuỗi; giá trị mặc định là ""

Không còn tồn tại, không được dùng, không làm gì cả.
stamp

Số nguyên; giá trị mặc định là 0

Có mã hoá thông tin bản dựng vào tệp nhị phân hay không. Các giá trị có thể có: * `stamp = 1`: Luôn đóng dấu thông tin bản dựng vào tệp nhị phân, ngay cả trong các bản dựng `--nostamp`. **Bạn nên tránh chế độ cài đặt này**, vì chế độ này có thể loại bỏ tính năng lưu vào bộ nhớ đệm từ xa cho tệp nhị phân và mọi thao tác hạ nguồn phụ thuộc vào tệp nhị phân đó. * `stamp = 0`: Luôn thay thế thông tin bản dựng bằng các giá trị hằng số. Điều này giúp lưu vào bộ nhớ đệm kết quả bản dựng một cách hiệu quả. * `stamp = -1`: Việc nhúng thông tin bản dựng được kiểm soát bằng cờ `--[no]stamp`. Các tệp nhị phân được đóng dấu sẽ không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi. CẢNH BÁO: Việc đóng dấu có thể làm giảm hiệu suất bản dựng bằng cách giảm số lượt truy cập vào bộ nhớ đệm và bạn nên tránh việc này nếu có thể.

py_runtime

Xem nguồn quy tắc
py_runtime(name, abi_flags, bootstrap_template, compatible_with, coverage_tool, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, files, implementation_name, interpreter, interpreter_path, interpreter_version_info, package_metadata, pyc_tag, python_version, restricted_to, site_init_template, stage2_bootstrap_template, stub_shebang, tags, target_compatible_with, testonly, toolchains, visibility, zip_main_template)
Biểu thị một thời gian chạy Python dùng để thực thi mã Python. Mục tiêu `py_runtime` có thể đại diện cho *thời gian chạy nền tảng* hoặc *thời gian chạy trong bản dựng*. Thời gian chạy nền tảng truy cập vào trình thông dịch do hệ thống cài đặt tại một đường dẫn đã biết, trong khi thời gian chạy trong bản dựng trỏ đến một mục tiêu thực thi đóng vai trò là trình thông dịch. Trong cả hai trường hợp, "trình thông dịch" có nghĩa là mọi tệp nhị phân thực thi hoặc tập lệnh trình bao có khả năng chạy một tập lệnh Python được truyền trên dòng lệnh, tuân theo các quy ước tương tự như trình thông dịch CPython tiêu chuẩn. Thời gian chạy nền tảng vốn dĩ không khép kín. Nền tảng này áp đặt một yêu cầu đối với nền tảng mục tiêu là phải có một trình thông dịch nằm ở một đường dẫn cụ thể. Thời gian chạy trong bản dựng có thể hoặc không thể khép kín, tuỳ thuộc vào việc thời gian chạy đó trỏ đến một trình thông dịch đã đăng ký hoặc một tập lệnh trình bao truy cập vào trình thông dịch hệ thống. Ví dụ ``` 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", ) ```

Đối số

Thuộc tính
name

Tên; bắt buộc

Tên riêng cho mục tiêu này.

abi_flags

Chuỗi; giá trị mặc định là ""

Cờ ABI của thời gian chạy, tức là "sys.abiflags". Nếu không được đặt, thì cờ này sẽ được đặt dựa trên các cờ.
bootstrap_template

Nhãn; mặc định là "@rules_python//python/private:bootstrap_template"

Tệp mẫu tập lệnh khởi động để sử dụng. Phải có %python_binary%, %workspace_name%, %main% và %imports%. Sau khi mở rộng, mẫu này sẽ trở thành tệp thực thi dùng để bắt đầu quy trình. Vì vậy, mẫu này chịu trách nhiệm cho các thao tác khởi động ban đầu, chẳng hạn như tìm trình thông dịch Python, runfile và tạo một môi trường để chạy ứng dụng Python dự kiến. Mặc dù hiện tại thuộc tính này là không bắt buộc, nhưng sẽ trở thành bắt buộc khi các quy tắc Python được di chuyển ra khỏi Bazel. Tên biến chính xác được mở rộng là một API không ổn định và có thể thay đổi. API sẽ ổn định hơn khi các quy tắc Python được di chuyển ra khỏi Bazel. Hãy xem @bazel_tools//tools/python:python_bootstrap_template.txt để biết thêm các biến.
coverage_tool

Nhãn; mặc định là None

Đây là mục tiêu dùng để thu thập thông tin về mức độ sử dụng mã từ các mục tiêu {rule}`py_binary` và {rule}`py_test`. Nếu được đặt, mục tiêu phải tạo ra một tệp duy nhất hoặc là một mục tiêu có thể thực thi. Đường dẫn đến tệp đơn lẻ hoặc tệp thực thi (nếu đích đến là tệp thực thi) sẽ xác định điểm truy cập cho công cụ đo lường mức độ sử dụng Python. Mục tiêu và các tệp chạy của mục tiêu đó sẽ được thêm vào các tệp chạy khi bạn bật tính năng đo lường mức độ phù hợp. Trình thông dịch Python phải tải được điểm truy cập của công cụ (ví dụ: tệp ".py" hoặc ".pyc"). Công cụ này phải chấp nhận các đối số dòng lệnh của [`coverage.py`](https://coverage.readthedocs.io), ít nhất là bao gồm các lệnh con "run" và "lcov".
files

Danh sách nhãn; mặc định là []

Đối với thời gian chạy trong bản dựng, đây là tập hợp các tệp tạo nên thời gian chạy này. Các tệp này sẽ được thêm vào runfiles của các tệp nhị phân Python sử dụng thời gian chạy này. Bạn không được đặt thuộc tính này cho thời gian chạy nền tảng.
implementation_name

Chuỗi; giá trị mặc định là "cpython"

Tên triển khai Python ("sys.implementation.name")
interpreter

Nhãn; mặc định là None

Đối với thời gian chạy trong bản dựng, đây là mục tiêu để gọi dưới dạng trình thông dịch. Đó có thể là một trong hai loại sau: * Một tệp duy nhất, sẽ là tệp nhị phân của trình thông dịch. Giả sử những trình thông dịch như vậy là các tệp thực thi độc lập hoặc mọi tệp hỗ trợ đều được chỉ định trong "files". * Một mục tiêu có thể thực thi. Tệp thực thi của mục tiêu sẽ là tệp nhị phân của trình thông dịch. Mọi đầu ra mặc định khác ("target.files") và các tệp runfile đơn giản ("runfiles.files") sẽ tự động được đưa vào như thể được chỉ định trong thuộc tính "files". LƯU Ý: các tệp chạy của mục tiêu có thể chưa được tôn trọng/truyền bá đúng cách cho người dùng chuỗi công cụ/trình thông dịch, hãy xem bazel-contrib/rules_python/issues/1612 Đối với thời gian chạy nền tảng (tức là đã đặt "interpreter_path"), bạn không được đặt thuộc tính này.
interpreter_path

Chuỗi; giá trị mặc định là ""

Đối với thời gian chạy nền tảng, đây là đường dẫn tuyệt đối của một trình thông dịch Python trên nền tảng đích. Đối với thời gian chạy trong bản dựng, bạn không được đặt thuộc tính này.
interpreter_version_info

Từ điển: Chuỗi -> Chuỗi; mặc định là {}

Thông tin phiên bản về trình thông dịch mà thời gian chạy này cung cấp. Nếu không được chỉ định, hãy sử dụng {obj}`--python_version` Các khoá được hỗ trợ khớp với tên của `sys.version_info`. Mặc dù các giá trị đầu vào là chuỗi, nhưng hầu hết đều được chuyển đổi thành số nguyên. Các khoá được hỗ trợ là: * major: int, số phiên bản chính * minor: int, số phiên bản phụ * micro: int không bắt buộc, số phiên bản siêu nhỏ * releaselevel: str không bắt buộc, cấp phát hành * serial: int không bắt buộc, số sê-ri của bản phát hành :::{versionchanged} 0.36.0 {obj}`--python_version` xác định giá trị mặc định. :::
pyc_tag

Chuỗi; giá trị mặc định là ""

Chuỗi không bắt buộc; phần thẻ của tên tệp pyc, ví dụ: phần cố định `cpython-39` của `foo.cpython-39.pyc`. Xem PEP 3147. Nếu không được chỉ định, giá trị này sẽ được tính toán từ `implementation_name` và `interpreter_version_info`. Nếu không có pyc_tag, thì chỉ quá trình tạo pyc không có nguồn mới hoạt động đúng cách.
python_version

Chuỗi; giá trị mặc định là "PY3"

Thời gian chạy này dành cho phiên bản chính 2 hay 3 của Python. Các giá trị hợp lệ là"PY2" và"PY3". Giá trị mặc định được kiểm soát bằng cờ `--incompatible_py3_is_default`. Tuy nhiên, trong tương lai, thuộc tính này sẽ là bắt buộc và không có giá trị mặc định.
site_init_template

Nhãn; mặc định là "@rules_python//python/private:site_init_template"

Mẫu dùng cho lệnh gọi site-init dành riêng cho tệp nhị phân do trình thông dịch chạy khi khởi động. :::{versionadded} 0.41.0 :::
stage2_bootstrap_template

Nhãn; mặc định là "@rules_python//python/private:stage2_bootstrap_template"

Mẫu cần sử dụng khi bật quy trình khởi động hai giai đoạn :::{seealso} {obj}`PyRuntimeInfo.stage2_bootstrap_template` và {obj}`--bootstrap_impl` :::
stub_shebang

Chuỗi; giá trị mặc định là "#!/usr/bin/env python3"

Biểu thức "shebang" được thêm vào trước tập lệnh stub Python khởi động dùng khi thực thi các mục tiêu {rule}`py_binary`. Hãy xem https://github.com/bazelbuild/bazel/issues/8685 để biết động lực. Không áp dụng cho Windows.
zip_main_template

Nhãn; mặc định là "@rules_python//python/private:zip_main_template"

Mẫu dùng cho tệp `__main__.py` cấp cao nhất của tệp zip. Đây sẽ là điểm truy cập được thực thi khi chạy lệnh "python foo.zip". :::{seealso} Trường {obj}`PyRuntimeInfo.zip_main_template`. :::