กฎ
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
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีนำเข้าเหล่านี้สำหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎดังกล่าว (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ต้องใช้ ระบบจะเพิ่มไดเรกทอรีแต่ละรายการลงใน
ไม่อนุญาตให้ใช้เส้นทางสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย |
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 หรือทั้ง 2 อย่าง หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีนำเข้าเหล่านี้สำหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎดังกล่าว (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ต้องใช้ ระบบจะเพิ่มไดเรกทอรีแต่ละรายการลงใน
ไม่อนุญาตให้ใช้เส้นทางสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย |
srcs_version
|
srcs ของเป้าหมายใช้งานได้กับ Python 2, Python 3 หรือทั้ง 2 อย่าง หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีนำเข้าเหล่านี้สำหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎดังกล่าว (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ต้องใช้ ระบบจะเพิ่มไดเรกทอรีแต่ละรายการลงใน
ไม่อนุญาตให้ใช้เส้นทางสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย |
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 หรือทั้ง 2 อย่าง หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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 ระบบจะเพิ่มเป้าหมายและ Runfile ไปยัง Runfiles เมื่อเปิดการครอบคลุม จุดแรกเข้าของเครื่องมือต้องโหลดได้ด้วยอินเตอร์พรีเตอร์ Python (เช่น ไฟล์ |
files
|
|
interpreter
|
|
interpreter_path
|
|
python_version
|
"PY2" และ "PY3"
ค่าเริ่มต้นจะควบคุมโดยแฟล็ก |
stub_shebang
|
py_binary
ดูแรงจูงใจในปัญหา 8685 ใช้ไม่ได้กับ Windows |