กฎ 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

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

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

legacy_create_init

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

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

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

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

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

ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนำเข้าเหล่านี้ สำหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่ กฎที่กฎนี้ขึ้นอยู่กับ) ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง 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

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

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

legacy_create_init

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

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

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

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

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

ก่อนหน้านี้เรียกว่า "สคริปต์ Stub ของ Python" ซึ่งเป็น จุดแรกเข้าของเป้าหมายที่เรียกใช้งาน Python ได้ทุกรายการ
coverage_tool

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

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

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

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

files

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

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

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

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

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

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

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

รันไทม์นี้เป็นของ Python เวอร์ชันหลัก 2 หรือ 3 ค่าที่ใช้ได้คือ "PY2" และ "PY3"

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

stub_shebang

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

นิพจน์ "Shebang" ที่นำหน้าสคริปต์ Python สำหรับการเริ่มต้นระบบ ใช้เมื่อเรียกใช้เป้าหมาย py_binary

ดูปัญหา 8685 เพื่อดูแรงจูงใจ

ไม่มีผลกับ Windows