กฎ 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 ที่มีโค้ดและข้อมูลทั้งหมดตามที่โปรแกรมต้องการขณะรันไทม์ และสคริปต์สตับที่เริ่มต้นโปรแกรมด้วยสภาพแวดล้อมและข้อมูลเริ่มต้นที่ถูกต้อง

ตัวอย่าง

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

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 เปล่าโดยปริยายในโครงสร้าง Runfiles หรือไม่ ซึ่งจะสร้างในทุกไดเรกทอรีที่มีซอร์สโค้ด 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 หรือทั้ง 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

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)

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

Attributes
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 หรือทั้ง 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

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 เปล่าโดยปริยายในโครงสร้าง Runfiles หรือไม่ ซึ่งจะสร้างในทุกไดเรกทอรีที่มีซอร์สโค้ด 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 หรือทั้ง 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

Integer; optional; default is 0

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

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

Name; required

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

coverage_tool

Label; optional

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

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

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

files

List of labels; optional

สำหรับรันไทม์ในบิลด์ นี่คือชุดไฟล์ที่ประกอบเป็นรันไทม์นี้ ระบบจะเพิ่มไฟล์เหล่านี้ลงใน Runfiles ของไบนารี 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 stub ที่ใช้เมื่อเรียกใช้เป้าหมาย py_binary

ดูแรงจูงใจในปัญหา 8685

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