Quy tắc
py_binary
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
của tập hợp .py
tệp nguồn (có thể thuộc về
với các quy tắc py_library
khác), *.runfiles
cây thư mục chứa tất cả mã và dữ liệu cần thiết cho
chương trình trong thời gian chạy và một tập lệnh mã giả lập để khởi động chương trình bằng
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 bạn muốn chạy py_binary
từ trong một tệp nhị phân khác hoặc
kiểm thử (ví dụ: chạy một 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ì phương pháp chính xác là làm cho tệp nhị phân hoặc
chương trình kiểm thử này phụ thuộc vào py_binary
trong phần dữ liệu. Khác
thì tệp nhị phân có thể xác định vị trí py_binary
tương ứng với nguồn
thư mục.
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; bắt buộc Tên duy nhất cho mục tiêu này. Nếu bạn không chỉ định main , thì 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 số mở rộng. Ví dụ: nếu điểm truy cập của bạn được gọi
main.py , khi đó tên của bạn sẽ là main .
|
deps
|
Danh sách nhãn; giá trị mặc định là deps tại
Các thuộc tính điển hình được xác định theo hầu hết quy tắc xây dựng.
Đây thường là
Quy tắc py_library .
|
srcs
|
Danh sách nhãn; bắt buộc Danh sách tệp nguồn (.py ) được xử lý để tạo mục tiêu.
Tệp này bao gồm tất cả mã đăng ký và mọi tệp nguồn đã tạo. 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 thiết trong thời gian chạy lại thuộc về
data .
|
imports
|
Danh sách các chuỗi; giá trị mặc định là PYTHONPATH .
Đối với sự thay thế "Tạo biến". Các quy tắc nhập này
các thư mục 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 đó (lưu ý: không phải
quy tắc mà quy tắc này phụ thuộc. Mỗi thư mục sẽ được thêm vào
Đường dẫn tuyệt đối (đường dẫn bắt đầu bằng |
legacy_create_init
|
Số nguyên; giá trị mặc định là --incompatible_default_to_explicit_init_py được dùng. Nếu đặt là false, người dùng
chịu trách nhiệm tạo (có thể trống) __init__.py tệp và thêm chúng vào
srcs mục tiêu Python theo yêu cầu.
|
main
|
Nhãn; giá trị mặc định là srcs . Nếu bạn không chỉ định,
Thay vào đó, name sẽ được sử dụng (xem ở trên). Nếu name không
khớp với tên tệp bất kỳ trong srcs , thì bạn phải chỉ định main .
|
python_version
|
String; không thể định cấu hình; giá trị mặc định là deps chuyển tiếp của nó) cho Python 2 hay Python
3. Giá trị hợp lệ là "PY2" và "PY3" (giá trị mặc định).
Phiên bản Python luôn được đặt lại (có thể theo mặc định) về bất kỳ phiên bản nào do 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 do các mục tiêu cao hơn phụ thuộc vào chỉ số 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 sử dụng để xây dựng mục tiêu của bạn.
nhưng do #4815,
kết quả là tập lệnh mã giả lập vẫn có thể gọi ra phiên bản phiên dịch không chính xác trong thời gian chạy. Xem
thế này
giải pháp tạm thời, bao gồm việc xác định mục tiêu |
srcs_version
|
String; giá trị mặc định là srcs của mục tiêu phải 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 phép là: Lưu ý rằng chỉ các quy tắc thực thi ( Để nhận thông tin chẩn đoán về những phần phụ thuộc đưa ra yêu cầu về phiên bản,
bạn có thể chạy 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 khiến mục tiêu của bạn yêu cầu một phiên bản Python hoặc một phiên bản khác. Xin lưu ý rằng quy trình này hoạt động ngay cả khi
không thể tạo mục tiêu đã xác định do xung đột phiên bản.
|
stamp
|
Số nguyên; giá trị mặc định là
Tệp nhị phân đã đóng dấu không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi. |
py_library
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; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; giá trị mặc định là deps tại
Các thuộc tính điển hình được xác định theo hầu hết quy tắc xây dựng.
Đây thường là
Quy tắc py_library .
|
srcs
|
Danh sách nhãn; giá trị mặc định là .py ) được xử lý để tạo mục tiêu.
Tệp này bao gồm tất cả mã đăng ký và mọi tệp nguồn đã tạo.
|
imports
|
Danh sách các chuỗi; giá trị mặc định là PYTHONPATH .
Đối với sự thay thế "Tạo biến". Các quy tắc nhập này
các thư mục 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 đó (lưu ý: không phải
quy tắc mà quy tắc này phụ thuộc. Mỗi thư mục sẽ được thêm vào
Đường dẫn tuyệt đối (đường dẫn bắt đầu bằng |
srcs_version
|
String; giá trị mặc định là srcs của mục tiêu phải 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 phép là: Lưu ý rằng chỉ các quy tắc thực thi ( Để nhận thông tin chẩn đoán về những phần phụ thuộc đưa ra yêu cầu về phiên bản,
bạn có thể chạy 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 khiến mục tiêu của bạn yêu cầu một phiên bản Python hoặc một phiên bản khác. Xin lưu ý rằng quy trình này hoạt động ngay cả khi
không thể tạo mục tiêu đã xác định do xung đột phiên bản.
|
py_test
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 hoạt động 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ô-đ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; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; giá trị mặc định là deps tại
Các thuộc tính điển hình được xác định theo hầu hết quy tắc xây dựng.
Đây thường là
Quy tắc py_library .
|
srcs
|
Danh sách nhãn; bắt buộc Danh sách tệp nguồn (.py ) được xử lý để tạo mục tiêu.
Tệp này bao gồm tất cả mã đăng ký và mọi tệp nguồn đã tạo. 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 thiết trong thời gian chạy lại thuộc về
data .
|
imports
|
Danh sách các chuỗi; giá trị mặc định là PYTHONPATH .
Đối với sự thay thế "Tạo biến". Các quy tắc nhập này
các thư mục 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 đó (lưu ý: không phải
quy tắc mà quy tắc này phụ thuộc. Mỗi thư mục sẽ được thêm vào
Đường dẫn tuyệt đối (đường dẫn bắt đầu bằng |
legacy_create_init
|
Số nguyên; giá trị mặc định là --incompatible_default_to_explicit_init_py được dùng. Nếu đặt là false, người dùng
chịu trách nhiệm tạo (có thể trống) __init__.py tệp và thêm chúng vào
srcs mục tiêu Python theo yêu cầu.
|
main
|
Nhãn; giá trị mặc định là srcs . Nếu bạn không chỉ định,
Thay vào đó, name sẽ được sử dụng (xem ở trên). Nếu name không
khớp với tên tệp bất kỳ trong srcs , thì bạn phải chỉ định main .
|
python_version
|
String; không thể định cấu hình; giá trị mặc định là deps chuyển tiếp của nó) cho Python 2 hay Python
3. Giá trị hợp lệ là "PY2" và "PY3" (giá trị mặc định).
Phiên bản Python luôn được đặt lại (có thể theo mặc định) về bất kỳ phiên bản nào do 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 do các mục tiêu cao hơn phụ thuộc vào chỉ số 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 sử dụng để xây dựng mục tiêu của bạn.
nhưng do #4815,
kết quả là tập lệnh mã giả lập vẫn có thể gọi ra phiên bản phiên dịch không chính xác trong thời gian chạy. Xem
thế này
giải pháp tạm thời, bao gồm việc xác định mục tiêu |
srcs_version
|
String; giá trị mặc định là srcs của mục tiêu phải 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 phép là: Lưu ý rằng chỉ các quy tắc thực thi ( Để nhận thông tin chẩn đoán về những phần phụ thuộc đưa ra yêu cầu về phiên bản,
bạn có thể chạy 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 khiến mục tiêu của bạn yêu cầu một phiên bản Python hoặc một phiên bản khác. Xin lưu ý rằng quy trình này hoạt động ngay cả khi
không thể tạo mục tiêu đã xác định do xung đột phiên bản.
|
stamp
|
Số nguyên; giá trị mặc định là |
py_runtime
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)
Đại diện cho một môi trường thời gian chạy Python dùng để thực thi mã Python.
Đích py_runtime
có thể đại diện cho thời gian chạy nền tảng hoặc
môi trường thời gian chạy trong bản dựng. Môi trường thời gian chạy nền tảng truy cập vào trình phiên dịch do hệ thống cài đặt tại một môi trường thời gian chạy đã 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, đều là "người phiên dịch" có nghĩa là mọi tập lệnh nhị phân hoặc trình bao bọc có thể thực thi
chạy một tập lệnh Python được chuyển qua dòng lệnh, tuân theo các quy ước tương tự như quy ước
Thông dịch viên CPython.
Về bản chất, môi trường thời gian chạy của nền tảng là không gián đoạn. Quy tắc này áp dụng một yêu cầu đối với nền tảng mục tiêu bố trí thông dịch viên tại một lộ trình cụ thể. Môi trường thời gian chạy trong bản dựng có thể hoặc không phải là thời gian khép kín, tuỳ thuộc vào việc mã này trỏ đến trình thông dịch xác nhận có mặt hay một tập lệnh trình bao bọc truy cập vào 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; bắt buộc Tên duy nhất cho mục tiêu này. |
bootstrap_template
|
Nhãn; giá trị mặc định là |
coverage_tool
|
Nhãn; giá trị mặc định là py_binary
và py_test mục tiêu.
Nếu được đặt, thì mục tiêu phải tạo ra một tệp duy nhất hoặc là mục tiêu có thể thực thi. Đường dẫn đến tệp đơn hoặc tệp thực thi nếu mục tiêu là tệp thực thi, xác định điểm truy cập cho công cụ xác định mức độ sử dụng python. Mục tiêu và các tệp runfile sẽ được thêm vào các tệp runfile khi bạn bật mức độ sử dụng. Điểm truy cập của công cụ này phải tải được bằng trình thông dịch python (ví dụ:
|
files
|
Danh sách nhãn; giá trị mặc định là |
interpreter
|
Nhãn; giá trị mặc định là |
interpreter_path
|
String; giá trị mặc định là |
python_version
|
String; giá trị mặc định là "PY2"
và "PY3" .
Giá trị mặc định do cờ |
stub_shebang
|
String; giá trị mặc định là py_binary .
Xem vấn đề 8685 để động lực của bản thân. Không áp dụng cho Windows. |