กฎ
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
ที่มีโค้ดและข้อมูลทั้งหมดที่โปรแกรมต้องการขณะรันไทม์ และสคริปต์ Stub ที่เริ่มโปรแกรมด้วยสภาพแวดล้อมและข้อมูลเริ่มต้นที่ถูกต้อง
ตัวอย่าง
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"] )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
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 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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)
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
deps
|
deps ได้ที่แอตทริบิวต์ทั่วไปที่กําหนดโดยกฎบิลด์ส่วนใหญ่
โดยทั่วไปจะเป็นกฎ py_library
|
srcs
|
.py ) ที่ได้รับการประมวลผลเพื่อสร้างเป้าหมาย
ซึ่งรวมถึงโค้ดทั้งหมดที่เช็คอินและไฟล์ต้นทางที่สร้างขึ้น
|
imports
|
PYTHONPATH
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้ และกฎทั้งหมดที่ใช้กฎดังกล่าว (หมายเหตุ: ไม่ใช่กฎที่กฎนี้อาศัย ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง
ไม่อนุญาตให้ใช้เส้นทางสมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย |
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", )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
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 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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", )
อาร์กิวเมนต์
แอตทริบิวต์ | |
---|---|
name |
ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้ |
bootstrap_template
|
|
coverage_tool
|
py_binary และ py_test
หากตั้งค่า เป้าหมายจะต้องสร้างไฟล์เดียว หรือเป็นไฟล์ปฏิบัติการ เส้นทางไปยังไฟล์เดียวหรือไฟล์ปฏิบัติการหากเป้าหมายปฏิบัติการได้ จะเป็นจุดเริ่มต้นสําหรับเครื่องมือครอบคลุมของ Python ระบบจะเพิ่มเป้าหมายและรันไทม์ของไฟล์ไปยังการเรียกใช้ไฟล์เมื่อเปิดใช้การครอบคลุม จุดแรกเข้าสําหรับเครื่องมือต้องโหลดโดยล่าม Python (เช่น ไฟล์ |
files
|
|
interpreter
|
|
interpreter_path
|
|
python_version
|
"PY2" และ "PY3"
ค่าเริ่มต้นจะถูกควบคุมโดยแฟล็ก |
stub_shebang
|
py_binary รายการ
ดูปัญหา 8685 สําหรับแรงจูงใจ ใช้กับ Windows ไม่ได้ |