กฎ Python

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

สตริง ไม่สามารถกําหนดค่าได้ ค่าเริ่มต้นคือ "_INTERNAL_SENTINEL"

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

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

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

คำเตือนข้อบกพร่อง: แอตทริบิวต์นี้จะกำหนดเวอร์ชันที่ Bazel จะสร้างเป้าหมาย แต่เนื่องจาก #4815 สคริปต์สแต็บที่เป็นผลลัพธ์อาจยังคงเรียกใช้ตัวแ interpreters เวอร์ชันที่ไม่ถูกต้องในรันไทม์ ดูวิธีแก้ปัญหานี้ ซึ่งจะเกี่ยวข้องกับการกำหนดเป้าหมาย 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 variable" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ ระบบจะเพิ่มไดเรกทอรีแต่ละรายการลงใน PYTHONPATH ตามกฎ py_binary ที่ขึ้นอยู่กับกฎนี้

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

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() จะคอมไพล์การทดสอบ การทดสอบคือไฟล์รันไทม์แบบไบนารีที่ล้อมรอบโค้ดทดสอบ

ตัวอย่าง

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

สตริง ไม่สามารถกําหนดค่าได้ ค่าเริ่มต้นคือ "_INTERNAL_SENTINEL"

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

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

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

คำเตือนข้อบกพร่อง: แอตทริบิวต์นี้จะกำหนดเวอร์ชันที่ Bazel จะสร้างเป้าหมาย แต่เนื่องจาก #4815 สคริปต์สแต็บที่เป็นผลลัพธ์อาจยังคงเรียกใช้ตัวแ interpreters เวอร์ชันที่ไม่ถูกต้องในรันไทม์ ดูวิธีแก้ปัญหานี้ ซึ่งเกี่ยวข้องกับการกำหนดเป้าหมาย 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() ยกเว้นว่าจะมีการตั้งค่าอาร์กิวเมนต์การประทับเป็น 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"

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

stub_shebang

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

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

ดูปัญหา 8685 เพื่อดูเหตุผล

ไม่มีผลกับ Windows