กฎ
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, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)
py_binary เป็นโปรแกรม Python ที่เป็นไฟล์ปฏิบัติการซึ่งประกอบไปด้วย
ของคอลเล็กชันที่มีไฟล์ต้นฉบับ .py ไฟล์ (อาจเป็น
กับกฎ py_library อื่นๆ) *.runfiles
โครงสร้างไดเรกทอรีที่มีโค้ดและข้อมูลทั้งหมดที่จำเป็นสำหรับ
และสคริปต์ต้นขั้วที่เริ่มต้นโปรแกรมด้วย
ข้อมูลในสภาพแวดล้อมเริ่มต้นที่ถูกต้อง
ตัวอย่าง
py_binary(
name = "foo",
srcs = ["foo.py"],
data = [":transform"], # a cc_binary which we invoke at run time
deps = [
":foolib", # a py_library
],
)
หากต้องการเรียกใช้ py_binary จากภายในไบนารีอื่นหรือ
(ตัวอย่างเช่น การใช้ไบนารี Python เพื่อตั้งค่าทรัพยากรจำลองจาก
ภายใน java_test) วิธีที่ถูกต้องคือทำให้ไบนารีอื่นหรือ
ขึ้นอยู่กับ py_binary ในส่วนข้อมูล อื่นๆ
ไบนารีจะสามารถหา py_binary ที่สัมพันธ์กับแหล่งที่มาได้
ไดเรกทอรี
py_binary(
name = "test_main",
srcs = ["test_main.py"],
deps = [":testlib"],
)
java_library(
name = "testing",
srcs = glob(["*.java"]),
data = [":test_main"]
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ หากไม่ได้ระบุ main ค่านี้ควรเป็นชื่อเดียวกับชื่อ
ของไฟล์ต้นฉบับที่เป็นจุดแรกเข้าหลักของแอปพลิเคชัน
ลบส่วนขยาย ตัวอย่างเช่น ถ้าจุดแรกเข้าของคุณมีชื่อว่า
main.py ชื่อของคุณควรเป็น main
|
deps
|
deps ที่
แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่
โดยทั่วไปแล้ว
py_library
|
srcs
|
.py) ที่ประมวลผลเพื่อสร้างเป้าหมาย
ซึ่งรวมถึงโค้ดเช็คอินทั้งหมดและไฟล์ต้นฉบับที่สร้างขึ้น เป้าหมายไลบรารี
จะอยู่ใน deps แทน ส่วนไฟล์ไบนารีอื่นๆ ที่ต้องใช้ขณะรันไทม์ควรอยู่ใน
data
|
imports
|
PYTHONPATH
ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" การนำเข้าเหล่านี้
ไดเรกทอรีจะถูกเพิ่มสำหรับกฎนี้และกฎทั้งหมดที่เกี่ยวข้อง (หมายเหตุ: ไม่ใช่
ที่กฎนี้ใช้ ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง
เส้นทางสัมบูรณ์ (เส้นทางที่เริ่มต้นด้วย |
legacy_create_init
|
--incompatible_default_to_explicit_init_py หากเป็น "เท็จ" ผู้ใช้จะ
มีหน้าที่สร้างไฟล์ __init__.py (ซึ่งอาจว่างเปล่า) และเพิ่มไฟล์ดังกล่าวไปยัง
srcs ของเป้าหมาย Python ตามที่กำหนด
|
main
|
srcs ด้วย หากไม่ได้ระบุไว้
ระบบจะใช้ name แทน (ดูด้านบน) หาก name ไม่ทำ
ตรงกับชื่อไฟล์ใดก็ได้ใน srcs ต้องระบุ main
|
python_version
|
deps แบบทรานซิชัน) สำหรับ Python 2 หรือ Python หรือไม่
3. ค่าที่ถูกต้องคือ "PY2" และ "PY3" (ค่าเริ่มต้น)
เวอร์ชัน Python จะรีเซ็ตเสมอ (โดยค่าเริ่มต้น) เป็นเวอร์ชันใดก็ตาม ที่ระบุโดยแอตทริบิวต์นี้ โดยไม่คำนึงถึงเวอร์ชันที่ระบุในบรรทัดคำสั่งหรือตาม เป้าหมายที่สูงกว่าเป้าหมายอื่น ที่อ้างอิงเป้าหมายนี้ หากต้องการ คำเตือนข้อบกพร่อง: แอตทริบิวต์นี้จะกำหนดเวอร์ชันที่ Bazel จะสร้างเป้าหมาย
แต่เนื่องจาก #4815
สคริปต์ Stub ที่ได้อาจยังคงเรียกใช้ล่ามเวอร์ชันที่ไม่ถูกต้องขณะรันไทม์ โปรดดู
นี่
วิธีแก้ปัญหาชั่วคราว ซึ่งรวมถึงการกำหนดเป้าหมาย |
srcs_version
|
srcs ของเป้าหมายที่ใช้ได้กับ Python
2, Python 3 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python ให้ใช้
แอตทริบิวต์ python_version ของ
กฎ Python ที่ดำเนินการได้ (py_binary หรือ py_test)
ค่าที่อนุญาตคือ โปรดทราบว่ามีเพียงกฎสั่งการ ( หากต้องการรับข้อมูลการวินิจฉัยเกี่ยวกับทรัพยากร Dependency ที่ทำให้เกิดข้อกำหนดของเวอร์ชัน
คุณสามารถเรียกใช้ลักษณะ
bazel build <your target> \
--aspects=@rules_python//python:defs.bzl%find_requirements \
--output_groups=pyversioninfo
-pyversioninfo.txt ที่ให้ข้อมูล
เกี่ยวกับเหตุผลที่เป้าหมายของคุณต้องใช้ Python เวอร์ชันใดเวอร์ชันหนึ่ง โปรดทราบว่าวิธีนี้ใช้ได้ผลแม้
สร้างเป้าหมายที่ระบุไม่สำเร็จเนื่องจากความขัดแย้งของเวอร์ชัน
|
stamp
|
ระบบจะไม่สร้างไบนารีที่ประทับตราอีกครั้ง เว้นแต่ทรัพยากร Dependency จะมีการเปลี่ยนแปลง |
py_library
py_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)
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
deps ที่
แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่
โดยทั่วไปแล้ว
py_library
|
srcs
|
.py) ที่ประมวลผลเพื่อสร้างเป้าหมาย
ซึ่งรวมถึงโค้ดเช็คอินทั้งหมดและไฟล์ต้นฉบับที่สร้างขึ้น
|
imports
|
PYTHONPATH
ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" การนำเข้าเหล่านี้
ไดเรกทอรีจะถูกเพิ่มสำหรับกฎนี้และกฎทั้งหมดที่เกี่ยวข้อง (หมายเหตุ: ไม่ใช่
ที่กฎนี้ใช้ ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง
เส้นทางสัมบูรณ์ (เส้นทางที่เริ่มต้นด้วย |
srcs_version
|
srcs ของเป้าหมายที่ใช้ได้กับ Python
2, Python 3 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python ให้ใช้
แอตทริบิวต์ python_version ของ
กฎ Python ที่ดำเนินการได้ (py_binary หรือ py_test)
ค่าที่อนุญาตคือ โปรดทราบว่ามีเพียงกฎสั่งการ ( หากต้องการรับข้อมูลการวินิจฉัยเกี่ยวกับทรัพยากร Dependency ที่ทำให้เกิดข้อกำหนดของเวอร์ชัน
คุณสามารถเรียกใช้ลักษณะ
bazel build <your target> \
--aspects=@rules_python//python:defs.bzl%find_requirements \
--output_groups=pyversioninfo
-pyversioninfo.txt ที่ให้ข้อมูล
เกี่ยวกับเหตุผลที่เป้าหมายของคุณต้องใช้ Python เวอร์ชันใดเวอร์ชันหนึ่ง โปรดทราบว่าวิธีนี้ใช้ได้ผลแม้
สร้างเป้าหมายที่ระบุไม่สำเร็จเนื่องจากความขัดแย้งของเวอร์ชัน
|
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, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)
กฎ py_test() จะรวมการทดสอบ การทดสอบคือ Wrapper แบบไบนารี
กับโค้ดทดสอบบางอย่าง
ตัวอย่าง
py_test(
name = "runtest_test",
srcs = ["runtest_test.py"],
deps = [
"//path/to/a/py/library",
],
)
นอกจากนี้ยังสามารถระบุโมดูลหลักได้ด้วย ดังนี้
py_test(
name = "runtest_test",
srcs = [
"runtest_main.py",
"runtest_lib.py",
],
main = "runtest_main.py",
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
deps ที่
แอตทริบิวต์ทั่วไปที่กำหนดโดยกฎบิลด์ส่วนใหญ่
โดยทั่วไปแล้ว
py_library
|
srcs
|
.py) ที่ประมวลผลเพื่อสร้างเป้าหมาย
ซึ่งรวมถึงโค้ดเช็คอินทั้งหมดและไฟล์ต้นฉบับที่สร้างขึ้น เป้าหมายไลบรารี
จะอยู่ใน deps แทน ส่วนไฟล์ไบนารีอื่นๆ ที่ต้องใช้ขณะรันไทม์ควรอยู่ใน
data
|
imports
|
PYTHONPATH
ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" การนำเข้าเหล่านี้
ไดเรกทอรีจะถูกเพิ่มสำหรับกฎนี้และกฎทั้งหมดที่เกี่ยวข้อง (หมายเหตุ: ไม่ใช่
ที่กฎนี้ใช้ ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง
เส้นทางสัมบูรณ์ (เส้นทางที่เริ่มต้นด้วย |
legacy_create_init
|
--incompatible_default_to_explicit_init_py หากเป็น "เท็จ" ผู้ใช้จะ
มีหน้าที่สร้างไฟล์ __init__.py (ซึ่งอาจว่างเปล่า) และเพิ่มไฟล์ดังกล่าวไปยัง
srcs ของเป้าหมาย Python ตามที่กำหนด
|
main
|
srcs ด้วย หากไม่ได้ระบุไว้
ระบบจะใช้ name แทน (ดูด้านบน) หาก name ไม่ทำ
ตรงกับชื่อไฟล์ใดก็ได้ใน srcs ต้องระบุ main
|
python_version
|
deps แบบทรานซิชัน) สำหรับ Python 2 หรือ Python หรือไม่
3. ค่าที่ถูกต้องคือ "PY2" และ "PY3" (ค่าเริ่มต้น)
เวอร์ชัน Python จะรีเซ็ตเสมอ (โดยค่าเริ่มต้น) เป็นเวอร์ชันใดก็ตาม ที่ระบุโดยแอตทริบิวต์นี้ โดยไม่คำนึงถึงเวอร์ชันที่ระบุในบรรทัดคำสั่งหรือตาม เป้าหมายที่สูงกว่าเป้าหมายอื่น ที่อ้างอิงเป้าหมายนี้ หากต้องการ คำเตือนข้อบกพร่อง: แอตทริบิวต์นี้จะกำหนดเวอร์ชันที่ Bazel จะสร้างเป้าหมาย
แต่เนื่องจาก #4815
สคริปต์ Stub ที่ได้อาจยังคงเรียกใช้ล่ามเวอร์ชันที่ไม่ถูกต้องขณะรันไทม์ โปรดดู
นี่
วิธีแก้ปัญหาชั่วคราว ซึ่งรวมถึงการกำหนดเป้าหมาย |
srcs_version
|
srcs ของเป้าหมายที่ใช้ได้กับ Python
2, Python 3 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python ให้ใช้
แอตทริบิวต์ python_version ของ
กฎ Python ที่ดำเนินการได้ (py_binary หรือ py_test)
ค่าที่อนุญาตคือ โปรดทราบว่ามีเพียงกฎสั่งการ ( หากต้องการรับข้อมูลการวินิจฉัยเกี่ยวกับทรัพยากร Dependency ที่ทำให้เกิดข้อกำหนดของเวอร์ชัน
คุณสามารถเรียกใช้ลักษณะ
bazel build <your target> \
--aspects=@rules_python//python:defs.bzl%find_requirements \
--output_groups=pyversioninfo
-pyversioninfo.txt ที่ให้ข้อมูล
เกี่ยวกับเหตุผลที่เป้าหมายของคุณต้องใช้ Python เวอร์ชันใดเวอร์ชันหนึ่ง โปรดทราบว่าวิธีนี้ใช้ได้ผลแม้
สร้างเป้าหมายที่ระบุไม่สำเร็จเนื่องจากความขัดแย้งของเวอร์ชัน
|
stamp
|
|
py_runtime
py_runtime(name, compatible_with, coverage_tool, deprecation, distribs, features, files, interpreter, interpreter_path, licenses, python_version, restricted_to, stub_shebang, tags, target_compatible_with, testonly, visibility)
แสดงรันไทม์ของ Python ที่ใช้เพื่อเรียกใช้โค้ด Python
เป้าหมาย py_runtime สามารถแสดงรันไทม์ของแพลตฟอร์มหรือ
รันไทม์ในตัว รันไทม์ของแพลตฟอร์มเข้าถึงอินเทอร์พรีเตอร์ที่ติดตั้งระบบใน
ขณะที่รันไทม์ภายในสร้างชี้ไปยังเป้าหมายสั่งการซึ่งทำหน้าที่เป็นล่าม ใน
ทั้ง 2 กรณี หมายถึงสคริปต์ไบนารีหรือ Wrapper ที่สั่งการได้
การเรียกใช้สคริปต์ Python ที่ส่งผ่านบรรทัดคำสั่งตามรูปแบบเดียวกับมาตรฐาน
ล่าม CPython
รันไทม์ของแพลตฟอร์มเป็นไปอย่างเป็นธรรมชาติ มีข้อกำหนดในแพลตฟอร์มเป้าหมาย ให้ล่ามอยู่ที่เส้นทางนั้นๆ รันไทม์ระหว่างสร้างอาจเป็นหรือ ไม่มีสิ่งใดสิ่งหนึ่งก็ได้ โดยขึ้นอยู่กับว่าตัวระบุนั้นชี้ไปยังล่ามเช็คอินหรือสคริปต์ Wrapper ที่เข้าถึง ล่ามของระบบ
ตัวอย่าง
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",
)
อาร์กิวเมนต์
| Attributes | |
|---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
coverage_tool
|
py_binary
และ py_test เป้าหมาย
หากมีการตั้งค่า เป้าหมายต้องสร้างไฟล์เดียวหรือเป็นเป้าหมายที่ดำเนินการได้ เส้นทางไปยังไฟล์เดียวหรือไฟล์ปฏิบัติการหากเป้าหมายเป็นไฟล์ปฏิบัติการ กำหนดจุดแรกเข้าสำหรับเครื่องมือการครอบคลุมของ Python เป้าหมายและ ไฟล์รันไฟล์จะถูกเพิ่มลงในการเรียกใช้ไฟล์เมื่อเปิดใช้การครอบคลุม จุดแรกเข้าของเครื่องมือต้องโหลดได้โดยใช้ล่าม Python (เช่น
|
files
|
|
interpreter
|
|
interpreter_path
|
|
python_version
|
"PY2"
และ "PY3"
ค่าเริ่มต้นจะควบคุมด้วยแฟล็ก |
stub_shebang
|
py_binary รายการ
ดูปัญหา 8685 สำหรับ แรงจูงใจ แต่ไม่มีผลกับ Windows |