กฎ Python

วันที่ รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

กฎ

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 = [":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

String; 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

String; ค่าเริ่มต้นคือ "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

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

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

String; ค่าเริ่มต้นคือ "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",
)

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

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

String; 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

String; ค่าเริ่มต้นคือ "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

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

String; ค่าเริ่มต้นคือ ""

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

String; ค่าเริ่มต้นคือ "_INTERNAL_SENTINEL"

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

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

stub_shebang

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

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

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

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