กฎ 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"]
)

อาร์กิวเมนต์

Attributes
name

ชื่อ ต้องระบุ

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


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

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

รายการป้ายกำกับ ต้องระบุ

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

รายการสตริง ค่าเริ่มต้นคือ []

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

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

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

legacy_create_init

จำนวนเต็ม ค่าเริ่มต้นคือ -1

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

ป้ายกำกับ ค่าเริ่มต้นคือ None

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

สตริง nonconfigurable ค่าเริ่มต้นคือ "_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

สตริง ค่าเริ่มต้นคือ "PY2AND3"

แอตทริบิวต์นี้ประกาศ srcs ของเป้าหมายที่เข้ากันได้กับ Python 2, Python 3 หรือทั้ง 2 อย่าง หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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

จำนวนเต็ม ค่าเริ่มต้นคือ -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)

อาร์กิวเมนต์

Attributes
name

ชื่อ ต้องระบุ

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

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

รายการสตริง ค่าเริ่มต้นคือ []

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

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

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

srcs_version

สตริง ค่าเริ่มต้นคือ "PY2AND3"

แอตทริบิวต์นี้ประกาศ srcs ของเป้าหมายที่เข้ากันได้กับ Python 2, Python 3 หรือทั้ง 2 อย่าง หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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",
)

อาร์กิวเมนต์

Attributes
name

ชื่อ ต้องระบุ

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

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

รายการป้ายกำกับ ต้องระบุ

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

รายการสตริง ค่าเริ่มต้นคือ []

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

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

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

legacy_create_init

จำนวนเต็ม ค่าเริ่มต้นคือ -1

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

ป้ายกำกับ ค่าเริ่มต้นคือ None

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

สตริง nonconfigurable ค่าเริ่มต้นคือ "_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

สตริง ค่าเริ่มต้นคือ "PY2AND3"

แอตทริบิวต์นี้ประกาศ srcs ของเป้าหมายที่เข้ากันได้กับ Python 2, Python 3 หรือทั้ง 2 อย่าง หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ 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

จำนวนเต็ม ค่าเริ่มต้นคือ 0

ดูส่วนนี้ของอาร์กิวเมนต์ py_binary() เว้นแต่ว่าอาร์กิวเมนต์ของ Stamp จะตั้งค่าเป็น 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",
)

อาร์กิวเมนต์

Attributes
name

ชื่อ ต้องระบุ

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

bootstrap_template

ป้ายกำกับ ค่าเริ่มต้นคือ "@bazel_tools//tools/python:python_bootstrap_template.txt"

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

ป้ายกำกับ ค่าเริ่มต้นคือ None

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

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

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

files

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

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

ป้ายกำกับ ค่าเริ่มต้นคือ None

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

สตริง ค่าเริ่มต้นคือ ""

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

สตริง ค่าเริ่มต้นคือ "_INTERNAL_SENTINEL"

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

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

stub_shebang

สตริง ค่าเริ่มต้นคือ "#!/usr/bin/env python3"

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

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

แต่ไม่มีผลกับ Windows