กฎ
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 = [":testing"], ) 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 variable" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ ระบบจะเพิ่มไดเรกทอรีแต่ละรายการลงใน
ระบบไม่อนุญาตให้ใช้เส้นทางสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย |
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 สคริปต์สแต็บที่เป็นผลลัพธ์อาจยังคงเรียกใช้ตัวแ interpreters เวอร์ชันที่ไม่ถูกต้องในรันไทม์ ดูวิธีแก้ปัญหานี้ ซึ่งจะเกี่ยวข้องกับการกำหนดเป้าหมาย |
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
ขึ้นอยู่กับการแทนที่ "Make variable" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ ระบบจะเพิ่มไดเรกทอรีแต่ละรายการลงใน
ระบบไม่อนุญาตให้ใช้ Absolute Path (เส้นทางที่ขึ้นต้นด้วย |
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()
จะคอมไพล์การทดสอบ การทดสอบคือไฟล์รันไทม์แบบไบนารีที่ล้อมรอบโค้ดทดสอบ
ตัวอย่าง
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 variable" ระบบจะเพิ่มไดเรกทอรีนำเข้าเหล่านี้สำหรับกฎนี้และกฎทั้งหมดที่เกี่ยวข้อง (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ใช้อยู่ ระบบจะเพิ่มแต่ละไดเรกทอรีลงใน
ระบบไม่อนุญาตให้ใช้เส้นทางสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย |
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 สคริปต์สแต็บที่เป็นผลลัพธ์อาจยังคงเรียกใช้ตัวแ interpreters เวอร์ชันที่ไม่ถูกต้องในรันไทม์ ดูวิธีแก้ปัญหานี้ ซึ่งเกี่ยวข้องกับการกำหนดเป้าหมาย |
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, 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)
แสดงรันไทม์ของ 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 |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้ |
bootstrap_template
|
ป้ายกํากับ ค่าเริ่มต้นคือ |
coverage_tool
|
ป้ายกํากับ ค่าเริ่มต้นคือ py_binary และ py_test
หากตั้งค่าไว้ เป้าหมายต้องสร้างไฟล์เดียวหรือเป็นเป้าหมายที่เรียกใช้ได้ เส้นทางไปยังไฟล์เดียวหรือไฟล์ที่เรียกใช้งานได้หากเป้าหมายเป็นไฟล์ที่เรียกใช้งานได้จะกำหนดจุดแรกเข้าสำหรับเครื่องมือการครอบคลุมของ Python ระบบจะเพิ่มเป้าหมายและไฟล์รันไทม์ของเป้าหมายลงในไฟล์รันไทม์เมื่อเปิดใช้การครอบคลุม อินพุตของเครื่องมือต้องโหลดได้โดยใช้โปรแกรมแปลภาษา Python (เช่น ไฟล์ |
files
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ |
interpreter
|
ป้ายกํากับ ค่าเริ่มต้นคือ |
interpreter_path
|
สตริง ค่าเริ่มต้นคือ |
python_version
|
สตริง ค่าเริ่มต้นคือ "PY2" และ "PY3"
ค่าเริ่มต้นจะควบคุมโดย Flag |
stub_shebang
|
สตริง ค่าเริ่มต้นคือ py_binary
ดูปัญหา 8685 เพื่อดูเหตุผล ไม่มีผลกับ Windows |