กฎ Python

รายงานปัญหา ดูแหล่งที่มา

กฎ

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

Name; required

ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้


หากไม่ได้ระบุ main ชื่อนี้ควรเป็นชื่อเดียวกับชื่อไฟล์ต้นฉบับซึ่งเป็นจุดแรกเข้าของแอปพลิเคชันลบด้วยส่วนขยาย เช่น หากจุดแรกเข้ามีชื่อว่า main.py ชื่อควรเป็น main
deps

List of labels; optional

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมายไบนารี ดูความคิดเห็นทั่วไปเกี่ยวกับ deps ได้ที่แอตทริบิวต์ทั่วไปที่กําหนดโดยกฎบิลด์ส่วนใหญ่ โดยทั่วไปจะเป็นกฎ py_library
srcs

List of labels; required

รายการไฟล์แหล่งที่มา (.py) ที่ได้รับการประมวลผลเพื่อสร้างเป้าหมาย ซึ่งรวมถึงโค้ดทั้งหมดที่เช็คอินและไฟล์ต้นทางที่สร้างขึ้น เป้าหมายไลบรารีอยู่ใน deps แทน ขณะที่ไฟล์ไบนารีอื่นๆ ที่จําเป็นขณะรันไทม์อยู่ใน data
imports

List of strings; optional

รายการไดเรกทอรีการนําเข้าที่จะเพิ่มใน PYTHONPATH

ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้ และกฎทั้งหมดที่ใช้กฎดังกล่าว (หมายเหตุ: ไม่ใช่กฎที่กฎนี้อาศัย ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง PYTHONPATH โดยกฎ py_binary ที่ขึ้นอยู่กับกฎนี้

ไม่อนุญาตให้ใช้เส้นทางสมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย /) และเส้นทางที่อ้างอิงเส้นทางเหนือรูทการดําเนินการซึ่งจะทําให้เกิดข้อผิดพลาด

legacy_create_init

Integer; optional; default is -1

กําหนดว่าจะสร้างไฟล์ __init__.py ที่ว่างเปล่าในมุมมองแบบต้นไม้ของไฟล์หรือไม่โดยปริยาย ไดเรกทอรีเหล่านี้สร้างขึ้นในทุกไดเรกทอรีที่มีซอร์สโค้ด Python หรือไลบรารีที่ใช้ร่วมกัน และไดเรกทอรีหลักทั้งหมดของไดเรกทอรีเหล่านั้น ยกเว้นไดเรกทอรีรูทของที่เก็บ ค่าเริ่มต้น อัตโนมัติ แปลว่า "จริง" เว้นแต่จะใช้ --incompatible_default_to_explicit_init_py หากเป็นเท็จ ผู้ใช้เป็นผู้รับผิดชอบในการสร้าง (_อาจว่างเปล่า) ไฟล์ __init__.py และเพิ่มไปยัง srcs ของเป้าหมาย Python ตามที่จําเป็น
main

Label; optional

ชื่อของไฟล์ต้นฉบับที่เป็นจุดแรกเข้าของแอปพลิเคชัน ไฟล์นี้ต้องอยู่ใน srcs ด้วย หากไม่ได้ระบุ ระบบจะใช้ name แทน (ดูด้านบน) หาก name ไม่ตรงกับชื่อไฟล์ใดๆ ใน srcs ต้องระบุ main
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

เลือกว่าจะสร้างเป้าหมายนี้ (และ deps ทางอ้อม) สําหรับ Python 2 หรือ Python 3 หรือไม่ ค่าที่ถูกต้องคือ "PY2" และ "PY3" (ค่าเริ่มต้น)

เวอร์ชัน Python จะรีเซ็ตเสมอ (อาจเป็นค่าเริ่มต้น) เป็นเวอร์ชันใดก็ได้ที่แอตทริบิวต์นี้ระบุไว้ โดยไม่คํานึงถึงเวอร์ชันที่ระบุบนบรรทัดคําสั่งหรือโดยเป้าหมายที่สูงกว่าอื่นๆ ที่ใช้แอตทริบิวต์นี้

หากต้องการตรวจสอบ select() ในเวอร์ชัน Python ปัจจุบัน ให้ตรวจสอบค่าของ @rules_python//python:python_version ดูข้อมูลเพิ่มเติมที่นี่

คําเตือนข้อบกพร่อง: แอตทริบิวต์นี้ตั้งค่าเวอร์ชันที่ Bazel สร้างเป้าหมายของคุณ แต่เนื่องจาก #4815 สคริปต์ Stub ที่ได้อาจยังคงเรียกใช้เวอร์ชันล่ามที่ไม่ถูกต้องขณะรันไทม์ ดูวิธีแก้ปัญหานี้ซึ่งเกี่ยวข้องกับการกําหนดเป้าหมาย py_runtime ที่ชี้ไปยังเวอร์ชัน Python ตามที่จําเป็น และเปิดใช้งาน py_runtime นี้โดยการตั้งค่า --python_top

srcs_version

String; optional; default is "PY2AND3"

แอตทริบิวต์นี้จะประกาศ srcs ของเป้าหมายเพื่อให้เข้ากันได้กับ Python 2, Python 3 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python จริงๆ ให้ใช้แอตทริบิวต์ python_version ของกฎ Python (py_binary หรือ py_test) ปฏิบัติการ

ค่าที่อนุญาตคือ "PY2AND3", "PY2" และ "PY3" ค่า "PY2ONLY" และ "PY3ONLY" ยังได้รับอนุญาตด้วยเหตุผลที่ผ่านมาด้วย แต่โดยทั่วไปแล้วจะเหมือนกันกับ "PY2" และ "PY3" และควรหลีกเลี่ยง

โปรดทราบว่าจริงๆ แล้วมีเพียงกฎปฏิบัติการ (py_binary และ py_library ) ที่ยืนยันเวอร์ชัน Python ปัจจุบันกับค่าของแอตทริบิวต์นี้ (นี่เป็นฟีเจอร์ เนื่องจาก py_library ไม่ได้เปลี่ยนเวอร์ชัน Python ปัจจุบัน หากตรวจสอบความถูกต้องแล้ว จะไม่สามารถสร้างทั้งไลบรารี PY2ONLY และ PY3ONLY ในการเรียกใช้เดียวกันได้) นอกจากนี้ หากมีเวอร์ชันที่ไม่ตรงกัน ระบบจะรายงานข้อผิดพลาดเฉพาะในช่วงดําเนินการเท่านั้น โดยเฉพาะอย่างยิ่ง ข้อผิดพลาดจะไม่ปรากฏในการเรียกใช้ bazel build --nobuild)

หากต้องการดูข้อมูลการวินิจฉัยว่าทรัพยากร Dependency ใดเป็นไปตามข้อกําหนดของเวอร์ชัน ให้เรียกใช้ด้าน find_requirements กับเป้าหมาย ดังนี้

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
ระบบจะสร้างไฟล์ที่มีส่วนต่อท้าย -pyversioninfo.txt ที่ให้ข้อมูลเกี่ยวกับเหตุผลที่เป้าหมายต้องใช้ Python เวอร์ชันอื่นหรือเวอร์ชันอื่น โปรดทราบว่าจะทํางานได้แม้เป้าหมายที่กําหนดจะไม่สําเร็จเนื่องจากเวอร์ชันขัดแย้งกัน

stamp

Integer; optional; default is -1

จะเข้ารหัสข้อมูลบิลด์ไปยังไบนารีหรือไม่ ค่าที่เป็นไปได้ ได้แก่
  • stamp = 1: สแตมป์ข้อมูลบิลด์เป็นไบนารีเสมอ แม้กระทั่งใน --nostamp บิลด์ ควรหลีกเลี่ยงการตั้งค่านี้ เนื่องจากอาจทําให้การแคชจากระยะไกลสําหรับไบนารีและการดําเนินการดาวน์สตรีมที่ต้องพึ่งพาการตั้งค่านี้
  • stamp = 0: แทนที่ข้อมูลบิวด์ด้วยค่าคงที่เสมอ ซึ่งจะทําการแคชผลลัพธ์ที่ดี
  • stamp = -1: การฝังข้อมูล --[no]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

Name; required

ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้

deps

List of labels; optional

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมายไบนารี ดูความคิดเห็นทั่วไปเกี่ยวกับ deps ได้ที่แอตทริบิวต์ทั่วไปที่กําหนดโดยกฎบิลด์ส่วนใหญ่ โดยทั่วไปจะเป็นกฎ py_library
srcs

List of labels; optional

รายการไฟล์แหล่งที่มา (.py) ที่ได้รับการประมวลผลเพื่อสร้างเป้าหมาย ซึ่งรวมถึงโค้ดทั้งหมดที่เช็คอินและไฟล์ต้นทางที่สร้างขึ้น
imports

List of strings; optional

รายการไดเรกทอรีการนําเข้าที่จะเพิ่มใน PYTHONPATH

ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้ และกฎทั้งหมดที่ใช้กฎดังกล่าว (หมายเหตุ: ไม่ใช่กฎที่กฎนี้อาศัย ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง PYTHONPATH โดยกฎ py_binary ที่ขึ้นอยู่กับกฎนี้

ไม่อนุญาตให้ใช้เส้นทางสมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย /) และเส้นทางที่อ้างอิงเส้นทางเหนือรูทการดําเนินการซึ่งจะทําให้เกิดข้อผิดพลาด

srcs_version

String; optional; default is "PY2AND3"

แอตทริบิวต์นี้จะประกาศ srcs ของเป้าหมายเพื่อให้เข้ากันได้กับ Python 2, Python 3 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python จริงๆ ให้ใช้แอตทริบิวต์ python_version ของกฎ Python (py_binary หรือ py_test) ปฏิบัติการ

ค่าที่อนุญาตคือ "PY2AND3", "PY2" และ "PY3" ค่า "PY2ONLY" และ "PY3ONLY" ยังได้รับอนุญาตด้วยเหตุผลที่ผ่านมาด้วย แต่โดยทั่วไปแล้วจะเหมือนกันกับ "PY2" และ "PY3" และควรหลีกเลี่ยง

โปรดทราบว่าจริงๆ แล้วมีเพียงกฎปฏิบัติการ (py_binary และ py_library ) ที่ยืนยันเวอร์ชัน Python ปัจจุบันกับค่าของแอตทริบิวต์นี้ (นี่เป็นฟีเจอร์ เนื่องจาก py_library ไม่ได้เปลี่ยนเวอร์ชัน Python ปัจจุบัน หากตรวจสอบความถูกต้องแล้ว จะไม่สามารถสร้างทั้งไลบรารี PY2ONLY และ PY3ONLY ในการเรียกใช้เดียวกันได้) นอกจากนี้ หากมีเวอร์ชันที่ไม่ตรงกัน ระบบจะรายงานข้อผิดพลาดเฉพาะในช่วงดําเนินการเท่านั้น โดยเฉพาะอย่างยิ่ง ข้อผิดพลาดจะไม่ปรากฏในการเรียกใช้ bazel build --nobuild)

หากต้องการดูข้อมูลการวินิจฉัยว่าทรัพยากร Dependency ใดเป็นไปตามข้อกําหนดของเวอร์ชัน ให้เรียกใช้ด้าน find_requirements กับเป้าหมาย ดังนี้

          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

Name; required

ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้

deps

List of labels; optional

รายการไลบรารีอื่นๆ ที่จะลิงก์กับเป้าหมายไบนารี ดูความคิดเห็นทั่วไปเกี่ยวกับ deps ได้ที่แอตทริบิวต์ทั่วไปที่กําหนดโดยกฎบิลด์ส่วนใหญ่ โดยทั่วไปจะเป็นกฎ py_library
srcs

List of labels; required

รายการไฟล์แหล่งที่มา (.py) ที่ได้รับการประมวลผลเพื่อสร้างเป้าหมาย ซึ่งรวมถึงโค้ดทั้งหมดที่เช็คอินและไฟล์ต้นทางที่สร้างขึ้น เป้าหมายไลบรารีอยู่ใน deps แทน ขณะที่ไฟล์ไบนารีอื่นๆ ที่จําเป็นขณะรันไทม์อยู่ใน data
imports

List of strings; optional

รายการไดเรกทอรีการนําเข้าที่จะเพิ่มใน PYTHONPATH

ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้ และกฎทั้งหมดที่ใช้กฎดังกล่าว (หมายเหตุ: ไม่ใช่กฎที่กฎนี้อาศัย ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง PYTHONPATH โดยกฎ py_binary ที่ขึ้นอยู่กับกฎนี้

ไม่อนุญาตให้ใช้เส้นทางสมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย /) และเส้นทางที่อ้างอิงเส้นทางเหนือรูทการดําเนินการซึ่งจะทําให้เกิดข้อผิดพลาด

legacy_create_init

Integer; optional; default is -1

กําหนดว่าจะสร้างไฟล์ __init__.py ที่ว่างเปล่าในมุมมองแบบต้นไม้ของไฟล์หรือไม่โดยปริยาย ไดเรกทอรีเหล่านี้สร้างขึ้นในทุกไดเรกทอรีที่มีซอร์สโค้ด Python หรือไลบรารีที่ใช้ร่วมกัน และไดเรกทอรีหลักทั้งหมดของไดเรกทอรีเหล่านั้น ยกเว้นไดเรกทอรีรูทของที่เก็บ ค่าเริ่มต้น อัตโนมัติ แปลว่า "จริง" เว้นแต่จะใช้ --incompatible_default_to_explicit_init_py หากเป็นเท็จ ผู้ใช้เป็นผู้รับผิดชอบในการสร้าง (_อาจว่างเปล่า) ไฟล์ __init__.py และเพิ่มไปยัง srcs ของเป้าหมาย Python ตามที่จําเป็น
main

Label; optional

ชื่อของไฟล์ต้นฉบับที่เป็นจุดแรกเข้าของแอปพลิเคชัน ไฟล์นี้ต้องอยู่ใน srcs ด้วย หากไม่ได้ระบุ ระบบจะใช้ name แทน (ดูด้านบน) หาก name ไม่ตรงกับชื่อไฟล์ใดๆ ใน srcs ต้องระบุ main
python_version

String; optional; nonconfigurable; default is "_INTERNAL_SENTINEL"

เลือกว่าจะสร้างเป้าหมายนี้ (และ deps ทางอ้อม) สําหรับ Python 2 หรือ Python 3 หรือไม่ ค่าที่ถูกต้องคือ "PY2" และ "PY3" (ค่าเริ่มต้น)

เวอร์ชัน Python จะรีเซ็ตเสมอ (อาจเป็นค่าเริ่มต้น) เป็นเวอร์ชันใดก็ได้ที่แอตทริบิวต์นี้ระบุไว้ โดยไม่คํานึงถึงเวอร์ชันที่ระบุบนบรรทัดคําสั่งหรือโดยเป้าหมายที่สูงกว่าอื่นๆ ที่ใช้แอตทริบิวต์นี้

หากต้องการตรวจสอบ select() ในเวอร์ชัน Python ปัจจุบัน ให้ตรวจสอบค่าของ @rules_python//python:python_version ดูข้อมูลเพิ่มเติมที่นี่

คําเตือนข้อบกพร่อง: แอตทริบิวต์นี้ตั้งค่าเวอร์ชันที่ Bazel สร้างเป้าหมายของคุณ แต่เนื่องจาก #4815 สคริปต์ Stub ที่ได้อาจยังคงเรียกใช้เวอร์ชันล่ามที่ไม่ถูกต้องขณะรันไทม์ ดูวิธีแก้ปัญหานี้ซึ่งเกี่ยวข้องกับการกําหนดเป้าหมาย py_runtime ที่ชี้ไปยังเวอร์ชัน Python ตามที่จําเป็น และเปิดใช้งาน py_runtime นี้โดยการตั้งค่า --python_top

srcs_version

String; optional; default is "PY2AND3"

แอตทริบิวต์นี้จะประกาศ srcs ของเป้าหมายเพื่อให้เข้ากันได้กับ Python 2, Python 3 หรือทั้งคู่ หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python จริงๆ ให้ใช้แอตทริบิวต์ python_version ของกฎ Python (py_binary หรือ py_test) ปฏิบัติการ

ค่าที่อนุญาตคือ "PY2AND3", "PY2" และ "PY3" ค่า "PY2ONLY" และ "PY3ONLY" ยังได้รับอนุญาตด้วยเหตุผลที่ผ่านมาด้วย แต่โดยทั่วไปแล้วจะเหมือนกันกับ "PY2" และ "PY3" และควรหลีกเลี่ยง

โปรดทราบว่าจริงๆ แล้วมีเพียงกฎปฏิบัติการ (py_binary และ py_library ) ที่ยืนยันเวอร์ชัน Python ปัจจุบันกับค่าของแอตทริบิวต์นี้ (นี่เป็นฟีเจอร์ เนื่องจาก py_library ไม่ได้เปลี่ยนเวอร์ชัน Python ปัจจุบัน หากตรวจสอบความถูกต้องแล้ว จะไม่สามารถสร้างทั้งไลบรารี PY2ONLY และ PY3ONLY ในการเรียกใช้เดียวกันได้) นอกจากนี้ หากมีเวอร์ชันที่ไม่ตรงกัน ระบบจะรายงานข้อผิดพลาดเฉพาะในช่วงดําเนินการเท่านั้น โดยเฉพาะอย่างยิ่ง ข้อผิดพลาดจะไม่ปรากฏในการเรียกใช้ bazel build --nobuild)

หากต้องการดูข้อมูลการวินิจฉัยว่าทรัพยากร Dependency ใดเป็นไปตามข้อกําหนดของเวอร์ชัน ให้เรียกใช้ด้าน find_requirements กับเป้าหมาย ดังนี้

          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          
ระบบจะสร้างไฟล์ที่มีส่วนต่อท้าย -pyversioninfo.txt ที่ให้ข้อมูลเกี่ยวกับเหตุผลที่เป้าหมายต้องใช้ Python เวอร์ชันอื่นหรือเวอร์ชันอื่น โปรดทราบว่าจะทํางานได้แม้เป้าหมายที่กําหนดจะไม่สําเร็จเนื่องจากเวอร์ชันขัดแย้งกัน

stamp

Integer; optional; default is 0

ดูส่วนอาร์กิวเมนต์ py_binary() ได้ ยกเว้นอาร์กิวเมนต์สแตมป์ตั้งค่าเป็น 0 โดยค่าเริ่มต้นสําหรับการทดสอบ

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

Name; required

ชื่อที่ไม่ซ้ํากันสําหรับเป้าหมายนี้

bootstrap_template

Label; optional; default is @bazel_tools//tools/python:python_bootstrap_template.txt

ก่อนหน้านี้เรียกว่า "สคริปต์สะดุด Python" ซึ่งเป็นจุดเริ่มต้นของเป้าหมายปฏิบัติการของ Python ทั้งหมด
coverage_tool

Label; optional

นี่คือเป้าหมายที่จะใช้ในการรวบรวมข้อมูลการครอบคลุมของโค้ดจากเป้าหมาย py_binary และ py_test

หากตั้งค่า เป้าหมายจะต้องสร้างไฟล์เดียว หรือเป็นไฟล์ปฏิบัติการ เส้นทางไปยังไฟล์เดียวหรือไฟล์ปฏิบัติการหากเป้าหมายปฏิบัติการได้ จะเป็นจุดเริ่มต้นสําหรับเครื่องมือครอบคลุมของ Python ระบบจะเพิ่มเป้าหมายและรันไทม์ของไฟล์ไปยังการเรียกใช้ไฟล์เมื่อเปิดใช้การครอบคลุม

จุดแรกเข้าสําหรับเครื่องมือต้องโหลดโดยล่าม Python (เช่น ไฟล์ .py หรือ .pyc) โดยจะต้องยอมรับอาร์กิวเมนต์บรรทัดคําสั่งของ coverage.py เป็นอย่างน้อย รวมถึงคําสั่งย่อย run และ lcov

files

List of labels; optional

สําหรับรันไทม์ในตัว ซึ่งก็คือชุดไฟล์ที่ประกอบด้วยรันไทม์นี้ ระบบจะเพิ่มไฟล์เหล่านี้ไปยัง Runrun ของไบนารี Python ที่ใช้รันไทม์นี้ สําหรับรันไทม์ของแพลตฟอร์ม ต้องตั้งค่าแอตทริบิวต์นี้
interpreter

Label; optional

สําหรับรันไทม์ในตัว เป้าหมายนี้จะเรียกใช้เป็นล่าม สําหรับรันไทม์ของแพลตฟอร์มนี้ ต้องไม่ต้องตั้งค่าแอตทริบิวต์นี้
interpreter_path

String; optional

สําหรับรันไทม์ของแพลตฟอร์ม นี่คือเส้นทางสัมบูรณ์ของล่าม Python บนแพลตฟอร์มเป้าหมาย สําหรับรันไทม์ภายใน แอตทริบิวต์นี้ต้องไม่ตั้งแอตทริบิวต์นี้
python_version

String; optional; default is "_INTERNAL_SENTINEL"

รันไทม์นี้สําหรับ Python เวอร์ชัน 2 หรือ 3 หรือไม่ ค่าที่ถูกต้องคือ "PY2" และ "PY3"

ค่าเริ่มต้นจะถูกควบคุมโดยแฟล็ก --incompatible_py3_is_default แต่ในอนาคตแอตทริบิวต์นี้จะจําเป็นและไม่มีค่าเริ่มต้น

stub_shebang

String; optional; default is "#!/usr/bin/env python3"

นิพจน์ "Shebang" ที่แทรกไว้ข้างหน้าสคริปต์ Python ที่เปิดเครื่องอยู่ซึ่งใช้เมื่อเรียกใช้เป้าหมาย py_binary รายการ

ดูปัญหา 8685 สําหรับแรงจูงใจ

ใช้กับ Windows ไม่ได้