Quy tắc
nhị phân
Xem nguồn quy tắcpy_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, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)
py_binary
là một chương trình Python có thể thực thi bao gồm một tập hợp các tệp nguồn .py
(có thể thuộc về các quy tắc py_library
khác), một cây thư mục *.runfiles
chứa tất cả mã và dữ liệu cần thiết cho chương trình tại thời điểm chạy, và một tập lệnh giả lập khởi động chương trình với môi trường và dữ liệu ban đầu chính xác.
Ví dụ
py_binary( name = "foo", srcs = ["foo.py"], data = [":transform"], # a cc_binary which we invoke at run time deps = [ ":foolib", # a py_library ], )
Nếu muốn chạy py_binary
từ bên trong tệp nhị phân hoặc kiểm thử khác (ví dụ: chạy tệp nhị phân python để thiết lập một số tài nguyên mô phỏng từ trong java_test), thì cách tiếp cận chính xác là tạo tệp nhị phân hoặc kiểm thử khác phụ thuộc vào py_binary
trong phần dữ liệu của tệp. Sau đó, tệp nhị phân khác có thể định vị py_binary
so với thư mục nguồn.
py_binary( name = "test_main", srcs = ["test_main.py"], deps = [":testing"], ) java_library( name = "testing", srcs = glob(["*.java"]), data = [":test_main"] )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. Nếu main không được chỉ định, tên này phải giống với tên của tệp nguồn là điểm truy cập chính của ứng dụng, trừ đi đuôi tệp. Ví dụ: nếu điểm truy cập gọi là main.py , thì tên của bạn phải là main .
|
deps
|
deps tại
Các thuộc tính điển hình được xác định theo hầu hết các quy tắc xây dựng.
Đây thường là các quy tắc py_library .
|
srcs
|
.py ) được xử lý để tạo mục tiêu.
Điều này bao gồm tất cả mã đã đăng ký của bạn và mọi tệp nguồn được tạo. Các mục tiêu của thư viện
thuộc về deps , trong khi các tệp nhị phân khác cần trong thời gian chạy thuộc về
data .
|
imports
|
PYTHONPATH .
Tuỳ chọn thay thế "Tạo biến". Những thư mục nhập này sẽ được thêm vào cho quy tắc này và tất cả các quy tắc phụ thuộc vào quy tắc đó (lưu ý: không phải là 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
Không được phép sử dụng đường dẫn tuyệt đối (đường dẫn bắt đầu bằng |
legacy_create_init
|
--incompatible_default_to_explicit_init_py . Nếu giá trị là false thì người dùng có trách nhiệm tạo (có thể trống) __init__..py tệp và thêm các tệp đó vào srcs của mục tiêu Python theo yêu cầu.
|
main
|
srcs . Nếu không chỉ định,
name sẽ được sử dụng (xem ở trên). Nếu name không
khớp với bất kỳ tên tệp nào trong srcs , thì bạn phải chỉ định main .
|
python_version
|
deps bắc cầu) cho Python 2 hay Python 3. Các giá trị hợp lệ là "PY2" và "PY3" (mặc định).
Phiên bản Python luôn đặt lại (có thể là theo mặc định) về bất kỳ phiên bản nào mà thuộc tính này chỉ định, bất kể phiên bản được chỉ định trên dòng lệnh hay bằng các mục tiêu cao hơn khác phụ thuộc vào thuộc tính này. Nếu muốn Cảnh báo lỗi: Thuộc tính này đặt phiên bản mà Bazel tạo mục tiêu của bạn, nhưng do #4815 nên tập lệnh mã giả lập vẫn có thể gọi nhầm phiên bản trình phiên dịch trong thời gian chạy. Hãy xem giải pháp này, bao gồm việc xác định một mục tiêu |
srcs_version
|
srcs của mục tiêu tương thích với Python 2, Python 3 hoặc cả hai. Để thực sự đặt phiên bản thời gian chạy Python, hãy sử dụng thuộc tính python_version của một quy tắc Python có thể thực thi (py_binary hoặc py_test ).
Các giá trị được cho phép là: Xin lưu ý rằng chỉ các quy tắc thực thi ( Để nhận thông tin chẩn đoán về phần phụ thuộc nào giới thiệu các yêu cầu về phiên bản, bạn có thể chạy chương trình thành phần bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfoThao tác này sẽ tạo một tệp có hậu tố -pyversioninfo.txt cung cấp thông tin về lý do mục tiêu của bạn yêu cầu phiên bản Python hoặc phiên bản khác. Lưu ý rằng khối này hoạt động ngay cả khi không tạo được mục tiêu nhất định do xung đột phiên bản.
|
stamp
|
Các tệp nhị phân có dấu không được tạo lại trừ khi các phần phụ thuộc thay đổi. |
thư viện py
Xem nguồn quy tắcpy_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, imports, licenses, restricted_to, srcs_version, tags, target_compatible_with, testonly, visibility)
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
deps tại
Các thuộc tính điển hình được xác định theo hầu hết các quy tắc xây dựng.
Đây thường là các quy tắc py_library .
|
srcs
|
.py ) được xử lý để tạo mục tiêu.
Điều này bao gồm tất cả mã đã đăng ký của bạn và mọi tệp nguồn được tạo.
|
imports
|
PYTHONPATH .
Tuỳ chọn thay thế "Tạo biến". Những thư mục nhập này sẽ được thêm vào cho quy tắc này và tất cả các quy tắc phụ thuộc vào quy tắc đó (lưu ý: không phải là 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
Không được phép sử dụng đường dẫn tuyệt đối (đường dẫn bắt đầu bằng |
srcs_version
|
srcs của mục tiêu tương thích với Python 2, Python 3 hoặc cả hai. Để thực sự đặt phiên bản thời gian chạy Python, hãy sử dụng thuộc tính python_version của một quy tắc Python có thể thực thi (py_binary hoặc py_test ).
Các giá trị được cho phép là: Xin lưu ý rằng chỉ các quy tắc thực thi ( Để nhận thông tin chẩn đoán về phần phụ thuộc nào giới thiệu các yêu cầu về phiên bản, bạn có thể chạy chương trình thành phần bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfoThao tác này sẽ tạo một tệp có hậu tố -pyversioninfo.txt cung cấp thông tin về lý do mục tiêu của bạn yêu cầu phiên bản Python hoặc phiên bản khác. Lưu ý rằng khối này hoạt động ngay cả khi không tạo được mục tiêu nhất định do xung đột phiên bản.
|
thử_nghiệm
Xem nguồn quy tắcpy_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, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)
Quy tắc py_test()
biên dịch một kiểm thử. Kiểm thử là một trình bao bọc nhị phân xung quanh một số mã kiểm thử.
Ví dụ
py_test( name = "runtest_test", srcs = ["runtest_test.py"], deps = [ "//path/to/a/py/library", ], )
Bạn cũng có thể chỉ định một mô-đun chính:
py_test( name = "runtest_test", srcs = [ "runtest_main.py", "runtest_lib.py", ], main = "runtest_main.py", )
Đối số
Thuộc tính | |
---|---|
name |
Tên duy nhất cho mục tiêu này. |
deps
|
deps tại
Các thuộc tính điển hình được xác định theo hầu hết các quy tắc xây dựng.
Đây thường là các quy tắc py_library .
|
srcs
|
.py ) được xử lý để tạo mục tiêu.
Điều này bao gồm tất cả mã đã đăng ký của bạn và mọi tệp nguồn được tạo. Các mục tiêu của thư viện
thuộc về deps , trong khi các tệp nhị phân khác cần trong thời gian chạy thuộc về
data .
|
imports
|
PYTHONPATH .
Tuỳ chọn thay thế "Tạo biến". Những thư mục nhập này sẽ được thêm vào cho quy tắc này và tất cả các quy tắc phụ thuộc vào quy tắc đó (lưu ý: không phải là 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
Không được phép sử dụng đường dẫn tuyệt đối (đường dẫn bắt đầu bằng |
legacy_create_init
|
--incompatible_default_to_explicit_init_py . Nếu giá trị là false thì người dùng có trách nhiệm tạo (có thể trống) __init__..py tệp và thêm các tệp đó vào srcs của mục tiêu Python theo yêu cầu.
|
main
|
srcs . Nếu không chỉ định,
name sẽ được sử dụng (xem ở trên). Nếu name không
khớp với bất kỳ tên tệp nào trong srcs , thì bạn phải chỉ định main .
|
python_version
|
deps bắc cầu) cho Python 2 hay Python 3. Các giá trị hợp lệ là "PY2" và "PY3" (mặc định).
Phiên bản Python luôn đặt lại (có thể là theo mặc định) về bất kỳ phiên bản nào mà thuộc tính này chỉ định, bất kể phiên bản được chỉ định trên dòng lệnh hay bằng các mục tiêu cao hơn khác phụ thuộc vào thuộc tính này. Nếu muốn Cảnh báo lỗi: Thuộc tính này đặt phiên bản mà Bazel tạo mục tiêu của bạn, nhưng do #4815 nên tập lệnh mã giả lập vẫn có thể gọi nhầm phiên bản trình phiên dịch trong thời gian chạy. Hãy xem giải pháp này, bao gồm việc xác định một mục tiêu |
srcs_version
|
srcs của mục tiêu tương thích với Python 2, Python 3 hoặc cả hai. Để thực sự đặt phiên bản thời gian chạy Python, hãy sử dụng thuộc tính python_version của một quy tắc Python có thể thực thi (py_binary hoặc py_test ).
Các giá trị được cho phép là: Xin lưu ý rằng chỉ các quy tắc thực thi ( Để nhận thông tin chẩn đoán về phần phụ thuộc nào giới thiệu các yêu cầu về phiên bản, bạn có thể chạy chương trình thành phần bazel build <your target> \ --aspects=@rules_python//python:defs.bzl%find_requirements \ --output_groups=pyversioninfoThao tác này sẽ tạo một tệp có hậu tố -pyversioninfo.txt cung cấp thông tin về lý do mục tiêu của bạn yêu cầu phiên bản Python hoặc phiên bản khác. Lưu ý rằng khối này hoạt động ngay cả khi không tạo được mục tiêu nhất định do xung đột phiên bản.
|
stamp
|
|
thời gian chạy py
Xem nguồn quy tắcpy_runtime(name, bootstrap_template, compatible_with, coverage_tool, deprecation, distribs, features, files, interpreter, interpreter_path, licenses, python_version, restricted_to, stub_shebang, tags, target_compatible_with, testonly, visibility)
Thể hiện thời gian chạy Python dùng để thực thi mã Python.
Mục tiêu py_runtime
có thể biểu thị thời gian chạy nền tảng hoặc thời gian chạy trong bản dựng. Môi trường thời gian chạy của nền tảng truy cập trình phiên dịch do hệ thống cài đặt tại một đường dẫn đã biết, trong khi môi trường 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 phiên dịch. Trong cả hai trường hợp, một "trình phiên dịch" có nghĩa là mọi tập lệnh nhị phân hoặc trình bao bọc thực thi có khả năng chạy 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 phiên dịch
CPython chuẩn.
Thời gian chạy nền tảng theo bản chất không phải là gói thuê bao. Công cụ này đặt ra yêu cầu trên nền tảng mục tiêu về việc biên dịch viên tại một đường dẫn cụ thể. Thời gian chạy trong bản dựng có thể có hoặc không có tính khép kín, tuỳ thuộc vào việc trình duyệt đó trỏ đến một trình phiên dịch đã đăng ký hay một tập lệnh trình bao bọc truy cập vào trình phiên dịch hệ thống.
Ví dụ:
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 duy nhất cho mục tiêu này. |
bootstrap_template
|
|
coverage_tool
|
py_binary và py_test .
Nếu được đặt, mục tiêu phải tạo một tệp hoặc mục tiêu thực thi. Đường dẫn đến tệp duy nhất hoặc tệp thực thi nếu mục tiêu có thể thực thi, sẽ xác định điểm truy cập cho công cụ bảo hiểm 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 tính năng mức độ phù hợp được bật. Điểm truy cập cho công cụ này phải có thể tải được bằng trình phiên dịch python (ví dụ: tệp
|
files
|
|
interpreter
|
|
interpreter_path
|
|
python_version
|
"PY2" và "PY3" .
Giá trị mặc định được cờ |
stub_shebang
|
py_binary .
Hãy xem vấn đề 8685 để biết động lực. Không áp dụng cho Windows. |