กฎ
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
          ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนำเข้าเหล่านี้
          สำหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ
          ) ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง  
          ไม่อนุญาตให้ใช้เส้นทางแบบสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย  | 
| legacy_create_init | จำนวนเต็ม ค่าเริ่มต้นคือ  --incompatible_default_to_explicit_init_pyหากเป็นเท็จ ผู้ใช้จะต้อง
          รับผิดชอบในการสร้างไฟล์ __init__.py (อาจเป็นไฟล์ว่าง) และเพิ่มไฟล์เหล่านั้นลงในsrcsของเป้าหมาย Python ตามที่จำเป็น | 
| main | ป้ายกำกับ ค่าเริ่มต้นคือ  srcsด้วย หากไม่ได้ระบุ ระบบจะใช้nameแทน (ดูด้านบน) หากnameไม่ตรงกับชื่อไฟล์ใดๆ ในsrcsคุณต้องระบุmain | 
| python_version | สตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ  depsแบบทรานซิทีฟ) สำหรับ Python 2 หรือ Python 3 ค่าที่ใช้ได้คือ"PY2"และ"PY3"(ค่าเริ่มต้น)ระบบจะรีเซ็ตเวอร์ชัน Python เสมอ (อาจเป็นค่าเริ่มต้น) เป็นเวอร์ชันใดก็ตามที่ ระบุโดยแอตทริบิวต์นี้ ไม่ว่าเวอร์ชันที่ระบุในบรรทัดคำสั่งหรือโดย เป้าหมายอื่นๆ ที่สูงกว่าซึ่งขึ้นอยู่กับเป้าหมายนี้จะเป็นเวอร์ชันใด หากต้องการ คำเตือนเกี่ยวกับข้อบกพร่อง: แอตทริบิวต์นี้จะตั้งค่าเวอร์ชันที่ Bazel สร้างเป้าหมาย
          แต่เนื่องจาก #4815
          สคริปต์ Stub ที่ได้อาจยังคงเรียกใช้เวอร์ชันอินเทอร์พรีเตอร์ที่ไม่ถูกต้องในรันไทม์ ดูวิธีแก้ปัญหานี้ ซึ่งเกี่ยวข้องกับการกำหนด | 
| srcs_version | สตริง ค่าเริ่มต้นคือ  srcsของเป้าหมายจะเข้ากันได้กับ Python 2, Python 3 หรือทั้ง 2 เวอร์ชัน หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python จริงๆ ให้ใช้แอตทริบิวต์python_versionของกฎ Python ที่เรียกใช้งานได้ (py_binaryหรือpy_test)ค่าที่อนุญาตคือ  โปรดทราบว่ามีเพียงกฎที่เรียกใช้งานได้ ( หากต้องการดูข้อมูลการวินิจฉัยเกี่ยวกับทรัพยากร Dependency ที่กำหนดข้อกำหนดของเวอร์ชัน
          คุณสามารถเรียกใช้แอตทริบิวต์  
          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          -pyversioninfo.txtเพื่อให้ข้อมูล
          เกี่ยวกับสาเหตุที่เป้าหมายของคุณต้องใช้ Python เวอร์ชันใดเวอร์ชันหนึ่ง โปรดทราบว่าวิธีนี้ใช้ได้แม้ว่า
          เป้าหมายที่ระบุจะสร้างไม่สำเร็จเนื่องจากเวอร์ชันขัดแย้งกัน | 
| 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
          ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนำเข้าเหล่านี้
          สำหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ
          ) ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง  
          ไม่อนุญาตให้ใช้เส้นทางแบบสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย  | 
| srcs_version | สตริง ค่าเริ่มต้นคือ  srcsของเป้าหมายจะเข้ากันได้กับ Python 2, Python 3 หรือทั้ง 2 เวอร์ชัน หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python จริงๆ ให้ใช้แอตทริบิวต์python_versionของกฎ Python ที่เรียกใช้งานได้ (py_binaryหรือpy_test)ค่าที่อนุญาตคือ  โปรดทราบว่ามีเพียงกฎที่เรียกใช้งานได้ ( หากต้องการดูข้อมูลการวินิจฉัยเกี่ยวกับทรัพยากร Dependency ที่กำหนดข้อกำหนดของเวอร์ชัน
          คุณสามารถเรียกใช้แอตทริบิวต์  
          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
          ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนำเข้าเหล่านี้
          สำหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ
          ) ระบบจะเพิ่มแต่ละไดเรกทอรีไปยัง  
          ไม่อนุญาตให้ใช้เส้นทางแบบสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย  | 
| legacy_create_init | จำนวนเต็ม ค่าเริ่มต้นคือ  --incompatible_default_to_explicit_init_pyหากเป็นเท็จ ผู้ใช้จะต้อง
          รับผิดชอบในการสร้างไฟล์ __init__.py (อาจเป็นไฟล์ว่าง) และเพิ่มไฟล์เหล่านั้นลงในsrcsของเป้าหมาย Python ตามที่จำเป็น | 
| main | ป้ายกำกับ ค่าเริ่มต้นคือ  srcsด้วย หากไม่ได้ระบุ ระบบจะใช้nameแทน (ดูด้านบน) หากnameไม่ตรงกับชื่อไฟล์ใดๆ ในsrcsคุณต้องระบุmain | 
| python_version | สตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ  depsแบบทรานซิทีฟ) สำหรับ Python 2 หรือ Python 3 ค่าที่ใช้ได้คือ"PY2"และ"PY3"(ค่าเริ่มต้น)ระบบจะรีเซ็ตเวอร์ชัน Python เสมอ (อาจเป็นค่าเริ่มต้น) เป็นเวอร์ชันใดก็ตามที่ ระบุโดยแอตทริบิวต์นี้ ไม่ว่าเวอร์ชันที่ระบุในบรรทัดคำสั่งหรือโดย เป้าหมายอื่นๆ ที่สูงกว่าซึ่งขึ้นอยู่กับเป้าหมายนี้จะเป็นเวอร์ชันใด หากต้องการ คำเตือนเกี่ยวกับข้อบกพร่อง: แอตทริบิวต์นี้จะตั้งค่าเวอร์ชันที่ Bazel สร้างเป้าหมาย
          แต่เนื่องจาก #4815
          สคริปต์ Stub ที่ได้อาจยังคงเรียกใช้เวอร์ชันอินเทอร์พรีเตอร์ที่ไม่ถูกต้องในรันไทม์ ดูวิธีแก้ปัญหานี้ ซึ่งเกี่ยวข้องกับการกำหนด | 
| srcs_version | สตริง ค่าเริ่มต้นคือ  srcsของเป้าหมายจะเข้ากันได้กับ Python 2, Python 3 หรือทั้ง 2 เวอร์ชัน หากต้องการตั้งค่าเวอร์ชันรันไทม์ของ Python จริงๆ ให้ใช้แอตทริบิวต์python_versionของกฎ Python ที่เรียกใช้งานได้ (py_binaryหรือpy_test)ค่าที่อนุญาตคือ  โปรดทราบว่ามีเพียงกฎที่เรียกใช้งานได้ ( หากต้องการดูข้อมูลการวินิจฉัยเกี่ยวกับทรัพยากร Dependency ที่กำหนดข้อกำหนดของเวอร์ชัน
          คุณสามารถเรียกใช้แอตทริบิวต์  
          bazel build <your target> \
              --aspects=@rules_python//python:defs.bzl%find_requirements \
              --output_groups=pyversioninfo
          -pyversioninfo.txtเพื่อให้ข้อมูล
          เกี่ยวกับสาเหตุที่เป้าหมายของคุณต้องใช้ Python เวอร์ชันใดเวอร์ชันหนึ่ง โปรดทราบว่าวิธีนี้ใช้ได้แม้ว่า
          เป้าหมายที่ระบุจะสร้างไม่สำเร็จเนื่องจากเวอร์ชันขัดแย้งกัน | 
| stamp | จำนวนเต็ม ค่าเริ่มต้นคือ  | 
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 | ป้ายกำกับ ค่าเริ่มต้นคือ  | 
| coverage_tool | ป้ายกำกับ ค่าเริ่มต้นคือ  py_binaryและpy_testหากตั้งค่าไว้ เป้าหมายต้องสร้างไฟล์เดียวหรือเป็นเป้าหมายที่เรียกใช้งานได้ เส้นทางไปยังไฟล์เดียวหรือไฟล์ที่สั่งการได้หากเป้าหมายเป็นไฟล์ที่สั่งการได้ จะกำหนดจุดแรกเข้าสำหรับเครื่องมือวัดโค้ดที่ครอบคลุมของ Python ระบบจะเพิ่มเป้าหมายและ ไฟล์ที่รันได้ลงในไฟล์ที่รันได้เมื่อเปิดใช้ Coverage จุดแรกเข้าของเครื่องมือต้องโหลดได้โดยตัวแปลภาษา Python (เช่น ไฟล์  | 
| files | รายการป้ายกำกับ ค่าเริ่มต้นคือ  | 
| interpreter | ป้ายกำกับ ค่าเริ่มต้นคือ  | 
| interpreter_path | สตริง ค่าเริ่มต้นคือ  | 
| python_version | สตริง ค่าเริ่มต้นคือ  "PY2"และ"PY3"ค่าเริ่มต้นจะควบคุมโดยแฟล็ก  | 
| stub_shebang | สตริง ค่าเริ่มต้นคือ  py_binaryดูปัญหา 8685 เพื่อดูแรงจูงใจ ไม่มีผลกับ Windows |