รายงานปัญหาopen_in_new
ดูแหล่งที่มาopen_in_new
รุ่น Nightly
·
7.4
.
7.3
·
7.2
·
7.1
·
7.0
·
6.5
กฎ
py_binary
ดูแหล่งที่มาของกฎopen_in_new
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, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, pyc_collection, python_version, restricted_to, srcs_version, stamp, tags, target_compatible_with, testonly, toolchains, visibility)
อาร์กิวเมนต์
Attributes |
name |
ชื่อ ต้องระบุ
ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้
|
deps
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
รายการไลบรารีเพิ่มเติมที่จะลิงก์กับเป้าหมาย
ดูความคิดเห็นเกี่ยวกับแอตทริบิวต์ [`deps` ที่โดยทั่วไปจะกำหนดโดยกฎ](https://bazel.build/reference/be/common-definitions#typical-attributes)
ซึ่งโดยปกติแล้วจะเป็นกฎ `py_library`
เป้าหมายที่ให้เฉพาะไฟล์ข้อมูลที่ใช้ในรันไทม์ควรอยู่ในแอตทริบิวต์ `data`
|
srcs
|
รายการป้ายกำกับ (ต้องระบุ)
รายการไฟล์ซอร์สโค้ด Python ที่ประมวลผลเพื่อสร้างเป้าหมาย ซึ่งรวมถึงโค้ดที่เช็คอินไว้ทั้งหมดและอาจรวมถึงไฟล์ต้นฉบับที่สร้างขึ้น ไฟล์ .py อยู่ใน "srcs" และเป้าหมายไลบรารีอยู่ใน "deps" ไฟล์ไบนารีอื่นๆ ที่อาจต้องใช้ในรันไทม์อยู่ใน "data"
|
data
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
รายการไฟล์ที่ไลบรารีนี้ต้องใช้ขณะรันไทม์ ดูความคิดเห็นเกี่ยวกับ [`แอตทริบิวต์ data ที่โดยทั่วไปจะกำหนดโดยกฎ`](https://bazel.build/reference/be/common-definitions#typical-attributes)
ไม่มี "py_embed_data" เหมือนกับที่มี "cc_embed_data" และ "go_embed_data" นั่นเป็นเพราะ Python มีแนวคิดเกี่ยวกับทรัพยากรรันไทม์
|
imports
|
รายการสตริง ค่าเริ่มต้นคือ []
รายการไดเรกทอรีการนําเข้าที่จะเพิ่มลงใน PYTHONPATH
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ ระบบจะเพิ่มแต่ละไดเรกทอรีลงใน `PYTHONPATH` โดยกฎ `py_binary` ที่ขึ้นอยู่กับกฎนี้ โดยสตริงจะสัมพันธ์กับรูท repo-runfiles ระบบไม่อนุญาตให้ใช้เส้นทางแบบสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย "/") และเส้นทางที่อ้างอิงเส้นทางที่อยู่เหนือรูทการเรียกใช้ ซึ่งจะทำให้เกิดข้อผิดพลาด
|
legacy_create_init
|
จํานวนเต็ม ค่าเริ่มต้นคือ -1
กำหนดว่าจะสร้างไฟล์ "__init__.py" ว่างเปล่าโดยปริยายในต้นไม้ runfiles หรือไม่
ระบบจะสร้างไฟล์เหล่านี้ในทุกไดเรกทอรีที่มีซอร์สโค้ด Python หรือไลบรารีที่ใช้ร่วมกัน และทุกไดเรกทอรีหลักของไดเรกทอรีเหล่านั้น ยกเว้นไดเรกทอรีรูทของรีโป ค่าเริ่มต้นคือ `-1` (อัตโนมัติ) ซึ่งหมายความว่าเป็น "จริง" เว้นแต่จะใช้ `--incompatible_default_to_explicit_init_py` หากเป็นเท็จ ผู้ใช้จะต้องรับผิดชอบในการสร้างไฟล์ `__init__.py` (อาจว่างเปล่า) และเพิ่มไฟล์ดังกล่าวลงใน `srcs` ของเป้าหมาย Python ตามที่จำเป็น
|
main
|
ป้ายกํากับ ค่าเริ่มต้นคือ None
ไม่บังคับ ชื่อไฟล์ต้นฉบับที่เป็นจุดแรกเข้าหลักของแอปพลิเคชัน ไฟล์นี้ต้องแสดงอยู่ใน `srcs` ด้วย หากไม่ได้ระบุ ระบบจะใช้ `name` ต่อท้ายด้วย `.py` แทน หาก `name` ไม่ตรงกับชื่อไฟล์ใดๆ ใน `srcs` คุณต้องระบุ `main`
|
precompile
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าควรคอมไพล์ไฟล์ต้นทาง py **สำหรับเป้าหมายนี้** ล่วงหน้าหรือไม่
ค่า:
* `inherit`: กำหนดค่าจาก Flag {flag}`--precompile`
* `enabled`: คอมไพล์ไฟล์ต้นฉบับ Python ในเวลาที่สร้าง โปรดทราบว่าตัวเลือก --precompile_add_to_runfiles จะส่งผลต่อวิธีรวมไฟล์ที่คอมไพล์แล้วไว้ในไบนารีดาวน์สตรีม
* `disabled`: ไม่คอมไพล์ไฟล์ซอร์ส Python ในเวลาที่สร้าง
* `if_generated_source`: คอมไพล์ไฟล์ซอร์สโค้ด Python เฉพาะในกรณีที่เป็นไฟล์ที่สร้างขึ้นเท่านั้น
:::{seealso}
* Flag {flag}`--precompile` ซึ่งสามารถลบล้างแอตทริบิวต์นี้ได้ในบางกรณี และจะมีผลกับเป้าหมายทั้งหมดเมื่อสร้าง
* แอตทริบิวต์ {obj}`pyc_collection` สำหรับเปิดใช้การคอมไพล์ล่วงหน้าแบบทรานซิทีฟตามเป้าหมาย
* เอกสาร [การคอมไพล์ล่วงหน้า](precompiling) เพื่อดูคําแนะนําเกี่ยวกับการใช้การคอมไพล์ล่วงหน้า
:::
|
precompile_invalidation_mode
|
สตริง ค่าเริ่มต้นคือ "auto"
วิธียืนยันไฟล์ที่คอมไพล์ล่วงหน้าเพื่อให้เป็นเวอร์ชันล่าสุดกับไฟล์ต้นฉบับที่เกี่ยวข้อง ค่าที่เป็นไปได้ ได้แก่
* `auto`: ค่าที่มีประสิทธิภาพจะกำหนดโดยการตั้งค่าอื่นๆ ของบิลด์โดยอัตโนมัติ
* `checked_hash`: ใช้ไฟล์ pyc หากแฮชของไฟล์ต้นฉบับตรงกับแฮชที่บันทึกไว้ในไฟล์ pyc ซึ่งจะมีประโยชน์มากที่สุดเมื่อทำงานกับโค้ดที่อาจแก้ไข
* `unchecked_hash`: ใช้ไฟล์ pyc เสมอ อย่าตรวจสอบแฮชของ pyc กับไฟล์ต้นฉบับ ซึ่งจะมีประโยชน์มากที่สุดเมื่อไม่มีการแก้ไขโค้ด
ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมดการทำให้โมดูล pyc ใช้งานไม่ได้ได้ที่
https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode
|
precompile_optimize_level
|
จํานวนเต็ม ค่าเริ่มต้นคือ 0
ระดับการเพิ่มประสิทธิภาพสําหรับไฟล์ที่คอมไพล์ไว้ล่วงหน้า
ดูข้อมูลเพิ่มเติมเกี่ยวกับระดับการเพิ่มประสิทธิภาพได้ที่เอกสารเกี่ยวกับอาร์กิวเมนต์ `optimize` ของฟังก์ชัน `compile()` ที่ https://docs.python.org/3/library/functions.html#compile
หมายเหตุ: ค่า "-1" หมายถึง "ล่ามปัจจุบัน" ซึ่งจะเป็นล่ามที่ใช้ในการคอมไพล์ _เมื่อสร้าง pycs_ ไม่ใช่ล่ามที่ใช้ในการรันไทม์เมื่อโค้ดทำงานจริง
|
precompile_source_retention
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าเมื่อคอมไพล์ไฟล์ต้นฉบับ ระบบจะเก็บไฟล์ต้นฉบับไว้ในเอาต์พุตที่ได้หรือไม่ ค่าที่ใช้ได้มีดังนี้
* `inherit`: รับค่ามาจาก Flag {flag}`--precompile_source_retention`
* `keep_source`: รวมซอร์สโค้ด Python ต้นฉบับ
* `omit_source`: ไม่รวมซอร์สโค้ด py ต้นฉบับ
* `omit_if_generated_source`: เก็บแหล่งที่มาเดิมไว้หากเป็นไฟล์แหล่งที่มาปกติ แต่ละเว้นหากเป็นไฟล์ที่สร้างขึ้น
|
pyc_collection
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าควรรวมไฟล์ pyc จาก Dependency ด้วยตนเองหรือไม่
หมายเหตุ: การตั้งค่านี้มีประโยชน์กับ {flag}`--precompile_add_to_runfiles=decided_elsewhere` เท่านั้น
ค่าที่ถูกต้องมีดังนี้
* `inherit`: รับค่าจาก {flag}`--pyc_collection`
* `include_pyc`: เพิ่มไฟล์ pyc จาก Dependency ในไบนารี (จาก {obj}`PyInfo.transitive_pyc_files`)
* `disabled`: อย่าเพิ่มไฟล์ pyc จาก Dependency อย่างชัดเจน โปรดทราบว่าไฟล์ pyc อาจยังคงมาจาก Dependency หากเป้าหมายรวมไฟล์เหล่านั้นไว้เป็นส่วนหนึ่งของไฟล์รันไทม์ (เช่น เมื่อใช้ {obj}`--precompile_add_to_runfiles=always`)
|
python_version
|
สตริง ค่าเริ่มต้นคือ "PY3"
เลิกใช้งานแล้ว ไม่ได้ใช้งาน ไม่ได้ทําอะไร
|
srcs_version
|
สตริง ค่าเริ่มต้นคือ "PY2AND3"
เลิกใช้งานแล้ว ไม่ได้ใช้งาน ไม่ได้ทําอะไร
|
stamp
|
จํานวนเต็ม ค่าเริ่มต้นคือ -1
ว่าจะเข้ารหัสข้อมูลบิลด์ลงในไบนารีหรือไม่ ค่าที่เป็นไปได้ ได้แก่
* `stamp = 1`: ประทับข้อมูลบิลด์ลงในไบนารีเสมอ แม้ในบิลด์ `--nostamp` **คุณควรหลีกเลี่ยงการตั้งค่านี้** เนื่องจากอาจทำให้แคชระยะไกลสําหรับไบนารีและการดำเนินการดาวน์สตรีมใดๆ ที่ขึ้นอยู่กับแคชดังกล่าวหยุดทำงาน
* `stamp = 0`: แทนที่ข้อมูลบิลด์ด้วยค่าคงที่เสมอ ซึ่งจะทําให้แคชผลลัพธ์การสร้างที่ดี
* `stamp = -1`: การฝังข้อมูลบิลด์จะควบคุมโดยแฟล็ก `--[no]stamp`
ระบบจะไม่สร้างไฟล์ไบนารีที่มีตราประทับใหม่ เว้นแต่จะมีการเปลี่ยนแปลงทรัพยากร Dependency
คำเตือน: การประทับอาจส่งผลเสียต่อประสิทธิภาพของบิลด์โดยการลดจำนวนครั้งที่เข้าถึงแคช และควรหลีกเลี่ยงหากเป็นไปได้
|
py_library
ดูแหล่งที่มาของกฎopen_in_new
py_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, imports, licenses, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, restricted_to, srcs_version, tags, target_compatible_with, testonly, toolchains, visibility)
ไลบรารีโค้ด Python ที่เชื่อถือได้
เอาต์พุตเริ่มต้น ได้แก่
* แหล่งที่มาของ Python ที่เป็นอินพุต
* อาร์ติแฟกต์ที่คอมไพล์ไว้ล่วงหน้าจากแหล่งที่มา
หมายเหตุ: การคอมไพล์ล่วงหน้าจะส่งผลต่อเอาต์พุตเริ่มต้นที่จะรวมอยู่ในไฟล์รันไทม์ที่ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์และ Flag ที่เกี่ยวข้องกับการคอมไพล์ล่วงหน้า
อาร์กิวเมนต์
Attributes |
name |
ชื่อ ต้องระบุ
ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้
|
deps
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
รายการไลบรารีเพิ่มเติมที่จะลิงก์กับเป้าหมาย
ดูความคิดเห็นเกี่ยวกับแอตทริบิวต์ [`deps` ที่โดยทั่วไปจะกำหนดโดยกฎ](https://bazel.build/reference/be/common-definitions#typical-attributes)
ซึ่งโดยปกติแล้วจะเป็นกฎ `py_library`
เป้าหมายที่ให้เฉพาะไฟล์ข้อมูลที่ใช้ในรันไทม์ควรอยู่ในแอตทริบิวต์ `data`
|
srcs
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
รายการไฟล์ซอร์สโค้ด Python ที่ประมวลผลเพื่อสร้างเป้าหมาย ซึ่งรวมถึงโค้ดที่เช็คอินไว้ทั้งหมดและอาจรวมถึงไฟล์ต้นฉบับที่สร้างขึ้น ไฟล์ .py อยู่ใน "srcs" และเป้าหมายไลบรารีอยู่ใน "deps" ไฟล์ไบนารีอื่นๆ ที่อาจต้องใช้ในรันไทม์อยู่ใน "data"
|
data
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
รายการไฟล์ที่ไลบรารีนี้ต้องใช้ขณะรันไทม์ ดูความคิดเห็นเกี่ยวกับ [`แอตทริบิวต์ data ที่โดยทั่วไปจะกำหนดโดยกฎ`](https://bazel.build/reference/be/common-definitions#typical-attributes)
ไม่มี "py_embed_data" เหมือนกับที่มี "cc_embed_data" และ "go_embed_data" นั่นเป็นเพราะ Python มีแนวคิดเกี่ยวกับทรัพยากรรันไทม์
|
imports
|
รายการสตริง ค่าเริ่มต้นคือ []
รายการไดเรกทอรีการนําเข้าที่จะเพิ่มลงใน PYTHONPATH
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ ระบบจะเพิ่มแต่ละไดเรกทอรีลงใน `PYTHONPATH` โดยกฎ `py_binary` ที่ขึ้นอยู่กับกฎนี้ โดยสตริงจะสัมพันธ์กับรูท repo-runfiles ระบบไม่อนุญาตให้ใช้เส้นทางแบบสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย "/") และเส้นทางที่อ้างอิงเส้นทางที่อยู่เหนือรูทการเรียกใช้ ซึ่งจะทำให้เกิดข้อผิดพลาด
|
precompile
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าควรคอมไพล์ไฟล์ต้นทาง py **สำหรับเป้าหมายนี้** ล่วงหน้าหรือไม่
ค่า:
* `inherit`: กำหนดค่าจาก Flag {flag}`--precompile`
* `enabled`: คอมไพล์ไฟล์ต้นฉบับ Python ในเวลาที่สร้าง โปรดทราบว่าตัวเลือก --precompile_add_to_runfiles จะส่งผลต่อวิธีรวมไฟล์ที่คอมไพล์แล้วไว้ในไบนารีดาวน์สตรีม
* `disabled`: ไม่คอมไพล์ไฟล์ซอร์ส Python ในเวลาที่สร้าง
* `if_generated_source`: คอมไพล์ไฟล์ซอร์สโค้ด Python เฉพาะในกรณีที่เป็นไฟล์ที่สร้างขึ้นเท่านั้น
:::{seealso}
* Flag {flag}`--precompile` ซึ่งสามารถลบล้างแอตทริบิวต์นี้ได้ในบางกรณี และจะมีผลกับเป้าหมายทั้งหมดเมื่อสร้าง
* แอตทริบิวต์ {obj}`pyc_collection` สำหรับเปิดใช้การคอมไพล์ล่วงหน้าแบบทรานซิทีฟตามเป้าหมาย
* เอกสาร [การคอมไพล์ล่วงหน้า](precompiling) เพื่อดูคําแนะนําเกี่ยวกับการใช้การคอมไพล์ล่วงหน้า
:::
|
precompile_invalidation_mode
|
สตริง ค่าเริ่มต้นคือ "auto"
วิธียืนยันไฟล์ที่คอมไพล์ล่วงหน้าเพื่อให้เป็นเวอร์ชันล่าสุดกับไฟล์ต้นฉบับที่เกี่ยวข้อง ค่าที่เป็นไปได้ ได้แก่
* `auto`: ค่าที่มีประสิทธิภาพจะกำหนดโดยการตั้งค่าอื่นๆ ของบิลด์โดยอัตโนมัติ
* `checked_hash`: ใช้ไฟล์ pyc หากแฮชของไฟล์ต้นฉบับตรงกับแฮชที่บันทึกไว้ในไฟล์ pyc ซึ่งจะมีประโยชน์มากที่สุดเมื่อทำงานกับโค้ดที่อาจแก้ไข
* `unchecked_hash`: ใช้ไฟล์ pyc เสมอ อย่าตรวจสอบแฮชของ pyc กับไฟล์ต้นฉบับ ซึ่งจะมีประโยชน์มากที่สุดเมื่อไม่มีการแก้ไขโค้ด
ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมดการทำให้โมดูล pyc ใช้งานไม่ได้ได้ที่
https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode
|
precompile_optimize_level
|
จํานวนเต็ม ค่าเริ่มต้นคือ 0
ระดับการเพิ่มประสิทธิภาพสําหรับไฟล์ที่คอมไพล์ไว้ล่วงหน้า
ดูข้อมูลเพิ่มเติมเกี่ยวกับระดับการเพิ่มประสิทธิภาพได้ที่เอกสารเกี่ยวกับอาร์กิวเมนต์ `optimize` ของฟังก์ชัน `compile()` ที่ https://docs.python.org/3/library/functions.html#compile
หมายเหตุ: ค่า "-1" หมายถึง "ล่ามปัจจุบัน" ซึ่งจะเป็นล่ามที่ใช้ในการคอมไพล์ _เมื่อสร้าง pycs_ ไม่ใช่ล่ามที่ใช้ในการรันไทม์เมื่อโค้ดทำงานจริง
|
precompile_source_retention
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าเมื่อคอมไพล์ไฟล์ต้นฉบับ ระบบจะเก็บไฟล์ต้นฉบับไว้ในเอาต์พุตที่ได้หรือไม่ ค่าที่ใช้ได้มีดังนี้
* `inherit`: รับค่ามาจาก Flag {flag}`--precompile_source_retention`
* `keep_source`: รวมซอร์สโค้ด Python ต้นฉบับ
* `omit_source`: ไม่รวมซอร์สโค้ด py ต้นฉบับ
* `omit_if_generated_source`: เก็บแหล่งที่มาเดิมไว้หากเป็นไฟล์แหล่งที่มาปกติ แต่ละเว้นหากเป็นไฟล์ที่สร้างขึ้น
|
srcs_version
|
สตริง ค่าเริ่มต้นคือ "PY2AND3"
เลิกใช้งานแล้ว ไม่ได้ใช้งาน ไม่ได้ทําอะไร
|
py_test
ดูแหล่งที่มาของกฎopen_in_new
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, precompile, precompile_invalidation_mode, precompile_optimize_level, precompile_source_retention, pyc_collection, python_version, restricted_to, shard_count, size, srcs_version, stamp, tags, target_compatible_with, testonly, timeout, toolchains, visibility)
อาร์กิวเมนต์
Attributes |
name |
ชื่อ ต้องระบุ
ชื่อที่ไม่ซ้ำกันสําหรับเป้าหมายนี้
|
deps
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
รายการไลบรารีเพิ่มเติมที่จะลิงก์กับเป้าหมาย
ดูความคิดเห็นเกี่ยวกับแอตทริบิวต์ [`deps` ที่โดยทั่วไปจะกำหนดโดยกฎ](https://bazel.build/reference/be/common-definitions#typical-attributes)
ซึ่งโดยปกติแล้วจะเป็นกฎ `py_library`
เป้าหมายที่ให้เฉพาะไฟล์ข้อมูลที่ใช้ในรันไทม์ควรอยู่ในแอตทริบิวต์ `data`
|
srcs
|
รายการป้ายกำกับ (ต้องระบุ)
รายการไฟล์ซอร์สโค้ด Python ที่ประมวลผลเพื่อสร้างเป้าหมาย ซึ่งรวมถึงโค้ดที่เช็คอินไว้ทั้งหมดและอาจรวมถึงไฟล์ต้นฉบับที่สร้างขึ้น ไฟล์ .py อยู่ใน "srcs" และเป้าหมายไลบรารีอยู่ใน "deps" ไฟล์ไบนารีอื่นๆ ที่อาจต้องใช้ในรันไทม์อยู่ใน "data"
|
data
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
รายการไฟล์ที่ไลบรารีนี้ต้องใช้ขณะรันไทม์ ดูความคิดเห็นเกี่ยวกับ [`แอตทริบิวต์ data ที่โดยทั่วไปจะกำหนดโดยกฎ`](https://bazel.build/reference/be/common-definitions#typical-attributes)
ไม่มี "py_embed_data" เหมือนกับที่มี "cc_embed_data" และ "go_embed_data" นั่นเป็นเพราะ Python มีแนวคิดเกี่ยวกับทรัพยากรรันไทม์
|
imports
|
รายการสตริง ค่าเริ่มต้นคือ []
รายการไดเรกทอรีการนําเข้าที่จะเพิ่มลงใน PYTHONPATH
ขึ้นอยู่กับการแทนที่ "สร้างตัวแปร" ระบบจะเพิ่มไดเรกทอรีการนําเข้าเหล่านี้สําหรับกฎนี้และกฎทั้งหมดที่ขึ้นอยู่กับกฎนี้ (หมายเหตุ: ไม่ใช่กฎที่กฎนี้ขึ้นอยู่กับ ระบบจะเพิ่มแต่ละไดเรกทอรีลงใน `PYTHONPATH` โดยกฎ `py_binary` ที่ขึ้นอยู่กับกฎนี้ โดยสตริงจะสัมพันธ์กับรูท repo-runfiles ระบบไม่อนุญาตให้ใช้เส้นทางแบบสัมบูรณ์ (เส้นทางที่ขึ้นต้นด้วย "/") และเส้นทางที่อ้างอิงเส้นทางที่อยู่เหนือรูทการเรียกใช้ ซึ่งจะทำให้เกิดข้อผิดพลาด
|
legacy_create_init
|
จํานวนเต็ม ค่าเริ่มต้นคือ -1
กำหนดว่าจะสร้างไฟล์ "__init__.py" ว่างเปล่าโดยปริยายในต้นไม้ runfiles หรือไม่
ระบบจะสร้างไฟล์เหล่านี้ในทุกไดเรกทอรีที่มีซอร์สโค้ด Python หรือไลบรารีที่ใช้ร่วมกัน และทุกไดเรกทอรีหลักของไดเรกทอรีเหล่านั้น ยกเว้นไดเรกทอรีรูทของรีโป ค่าเริ่มต้นคือ `-1` (อัตโนมัติ) ซึ่งหมายความว่าเป็น "จริง" เว้นแต่จะใช้ `--incompatible_default_to_explicit_init_py` หากเป็นเท็จ ผู้ใช้จะต้องรับผิดชอบในการสร้างไฟล์ `__init__.py` (อาจว่างเปล่า) และเพิ่มไฟล์ดังกล่าวลงใน `srcs` ของเป้าหมาย Python ตามที่จำเป็น
|
main
|
ป้ายกํากับ ค่าเริ่มต้นคือ None
ไม่บังคับ ชื่อไฟล์ต้นฉบับที่เป็นจุดแรกเข้าหลักของแอปพลิเคชัน ไฟล์นี้ต้องแสดงอยู่ใน `srcs` ด้วย หากไม่ได้ระบุ ระบบจะใช้ `name` ต่อท้ายด้วย `.py` แทน หาก `name` ไม่ตรงกับชื่อไฟล์ใดๆ ใน `srcs` คุณต้องระบุ `main`
|
precompile
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าควรคอมไพล์ไฟล์ต้นทาง py **สำหรับเป้าหมายนี้** ล่วงหน้าหรือไม่
ค่า:
* `inherit`: กำหนดค่าจาก Flag {flag}`--precompile`
* `enabled`: คอมไพล์ไฟล์ต้นฉบับ Python ในเวลาที่สร้าง โปรดทราบว่าตัวเลือก --precompile_add_to_runfiles จะส่งผลต่อวิธีรวมไฟล์ที่คอมไพล์แล้วไว้ในไบนารีดาวน์สตรีม
* `disabled`: ไม่คอมไพล์ไฟล์ซอร์ส Python ในเวลาที่สร้าง
* `if_generated_source`: คอมไพล์ไฟล์ซอร์สโค้ด Python เฉพาะในกรณีที่เป็นไฟล์ที่สร้างขึ้นเท่านั้น
:::{seealso}
* Flag {flag}`--precompile` ซึ่งสามารถลบล้างแอตทริบิวต์นี้ได้ในบางกรณี และจะมีผลกับเป้าหมายทั้งหมดเมื่อสร้าง
* แอตทริบิวต์ {obj}`pyc_collection` สำหรับเปิดใช้การคอมไพล์ล่วงหน้าแบบทรานซิทีฟตามเป้าหมาย
* เอกสาร [การคอมไพล์ล่วงหน้า](precompiling) เพื่อดูคําแนะนําเกี่ยวกับการใช้การคอมไพล์ล่วงหน้า
:::
|
precompile_invalidation_mode
|
สตริง ค่าเริ่มต้นคือ "auto"
วิธียืนยันไฟล์ที่คอมไพล์ล่วงหน้าเพื่อให้เป็นเวอร์ชันล่าสุดกับไฟล์ต้นฉบับที่เกี่ยวข้อง ค่าที่เป็นไปได้ ได้แก่
* `auto`: ค่าที่มีประสิทธิภาพจะกำหนดโดยการตั้งค่าอื่นๆ ของบิลด์โดยอัตโนมัติ
* `checked_hash`: ใช้ไฟล์ pyc หากแฮชของไฟล์ต้นฉบับตรงกับแฮชที่บันทึกไว้ในไฟล์ pyc ซึ่งจะมีประโยชน์มากที่สุดเมื่อทำงานกับโค้ดที่อาจแก้ไข
* `unchecked_hash`: ใช้ไฟล์ pyc เสมอ อย่าตรวจสอบแฮชของ pyc กับไฟล์ต้นฉบับ ซึ่งจะมีประโยชน์มากที่สุดเมื่อไม่มีการแก้ไขโค้ด
ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมดการทำให้โมดูล pyc ใช้งานไม่ได้ได้ที่
https://docs.python.org/3/library/py_compile.html#py_compile.PycInvalidationMode
|
precompile_optimize_level
|
จํานวนเต็ม ค่าเริ่มต้นคือ 0
ระดับการเพิ่มประสิทธิภาพสําหรับไฟล์ที่คอมไพล์ไว้ล่วงหน้า
ดูข้อมูลเพิ่มเติมเกี่ยวกับระดับการเพิ่มประสิทธิภาพได้ที่เอกสารเกี่ยวกับอาร์กิวเมนต์ `optimize` ของฟังก์ชัน `compile()` ที่ https://docs.python.org/3/library/functions.html#compile
หมายเหตุ: ค่า "-1" หมายถึง "ล่ามปัจจุบัน" ซึ่งจะเป็นล่ามที่ใช้ในการคอมไพล์ _เมื่อสร้าง pycs_ ไม่ใช่ล่ามที่ใช้ในการรันไทม์เมื่อโค้ดทำงานจริง
|
precompile_source_retention
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าเมื่อคอมไพล์ไฟล์ต้นฉบับ ระบบจะเก็บไฟล์ต้นฉบับไว้ในเอาต์พุตที่ได้หรือไม่ ค่าที่ใช้ได้มีดังนี้
* `inherit`: รับค่ามาจาก Flag {flag}`--precompile_source_retention`
* `keep_source`: รวมซอร์สโค้ด Python ต้นฉบับ
* `omit_source`: ไม่รวมซอร์สโค้ด py ต้นฉบับ
* `omit_if_generated_source`: เก็บแหล่งที่มาเดิมไว้หากเป็นไฟล์แหล่งที่มาปกติ แต่ละเว้นหากเป็นไฟล์ที่สร้างขึ้น
|
pyc_collection
|
สตริง ค่าเริ่มต้นคือ "inherit"
กำหนดว่าควรรวมไฟล์ pyc จาก Dependency ด้วยตนเองหรือไม่
หมายเหตุ: การตั้งค่านี้มีประโยชน์กับ {flag}`--precompile_add_to_runfiles=decided_elsewhere` เท่านั้น
ค่าที่ถูกต้องมีดังนี้
* `inherit`: รับค่าจาก {flag}`--pyc_collection`
* `include_pyc`: เพิ่มไฟล์ pyc จาก Dependency ในไบนารี (จาก {obj}`PyInfo.transitive_pyc_files`)
* `disabled`: อย่าเพิ่มไฟล์ pyc จาก Dependency อย่างชัดเจน โปรดทราบว่าไฟล์ pyc อาจยังคงมาจาก Dependency หากเป้าหมายรวมไฟล์เหล่านั้นไว้เป็นส่วนหนึ่งของไฟล์รันไทม์ (เช่น เมื่อใช้ {obj}`--precompile_add_to_runfiles=always`)
|
python_version
|
สตริง ค่าเริ่มต้นคือ "PY3"
เลิกใช้งานแล้ว ไม่ได้ใช้งาน ไม่ได้ทําอะไร
|
srcs_version
|
สตริง ค่าเริ่มต้นคือ "PY2AND3"
เลิกใช้งานแล้ว ไม่ได้ใช้งาน ไม่ได้ทําอะไร
|
stamp
|
จํานวนเต็ม ค่าเริ่มต้นคือ 0
ว่าจะเข้ารหัสข้อมูลบิลด์ลงในไบนารีหรือไม่ ค่าที่เป็นไปได้ ได้แก่
* `stamp = 1`: ประทับข้อมูลบิลด์ลงในไบนารีเสมอ แม้ในบิลด์ `--nostamp` **คุณควรหลีกเลี่ยงการตั้งค่านี้** เนื่องจากอาจทำให้แคชระยะไกลสําหรับไบนารีและการดำเนินการดาวน์สตรีมใดๆ ที่ขึ้นอยู่กับแคชดังกล่าวหยุดทำงาน
* `stamp = 0`: แทนที่ข้อมูลบิลด์ด้วยค่าคงที่เสมอ ซึ่งจะทําให้แคชผลลัพธ์การสร้างที่ดี
* `stamp = -1`: การฝังข้อมูลบิลด์จะควบคุมโดยแฟล็ก `--[no]stamp`
ระบบจะไม่สร้างไฟล์ไบนารีที่มีตราประทับใหม่ เว้นแต่จะมีการเปลี่ยนแปลงทรัพยากร Dependency
คำเตือน: การประทับอาจส่งผลเสียต่อประสิทธิภาพของบิลด์โดยการลดจำนวนครั้งที่เข้าถึงแคช และควรหลีกเลี่ยงหากเป็นไปได้
|
py_runtime
ดูแหล่งที่มาของกฎopen_in_new
py_runtime(name, bootstrap_template, compatible_with, coverage_tool, deprecation, distribs, exec_compatible_with, exec_properties, features, files, implementation_name, interpreter, interpreter_path, interpreter_version_info, pyc_tag, python_version, restricted_to, stage2_bootstrap_template, stub_shebang, tags, target_compatible_with, testonly, toolchains, visibility, zip_main_template)
แสดงรันไทม์ Python ที่ใช้เรียกใช้โค้ด Python
เป้าหมาย `py_runtime` อาจแสดงถึง *รันไทม์ของแพลตฟอร์ม* หรือ *รันไทม์ในบิลด์* รันไทม์ของแพลตฟอร์มจะเข้าถึงโปรแกรมแปลภาษาที่ระบบติดตั้งไว้ตามเส้นทางที่ทราบ ส่วนรันไทม์ในตัวจะชี้ไปยังเป้าหมายที่เรียกใช้งานได้ซึ่งทำหน้าที่เป็นโปรแกรมแปลภาษา ในทั้ง 2 กรณี "อินเทอร์พรีเตอร์" หมายถึงไบนารีที่เรียกใช้งานได้หรือสคริปต์ Wrapper ที่เรียกใช้สคริปต์ Python ที่ส่งผ่านในบรรทัดคำสั่งได้ โดยเป็นไปตามรูปแบบเดียวกับอินเทอร์พรีเตอร์ CPython มาตรฐาน
รันไทม์ของแพลตฟอร์มมีลักษณะที่ไม่ใช่แบบปิด ซึ่งกำหนดให้แพลตฟอร์มเป้าหมายต้องมีโปรแกรมแปลภาษาอยู่ในเส้นทางที่เฉพาะเจาะจง รันไทม์ที่ฝังมาอาจปิดสนิทหรือไม่ก็ได้ ทั้งนี้ขึ้นอยู่กับว่าชี้ไปยังโปรแกรมล่ามที่ได้รับการตรวจสอบหรือสคริปต์ Wrapper ที่เข้าถึงโปรแกรมล่ามของระบบ
ตัวอย่าง
```
load("@rules_python//python:py_runtime.bzl", "py_runtime")
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
|
ป้ายกํากับ ค่าเริ่มต้นคือ "@rules_python//python/private:bootstrap_template"
ไฟล์เทมเพลตสคริปต์ Bootstrap ที่จะใช้ ควรมี %python_binary%,
%workspace_name%, %main% และ %imports%
หลังจากขยายเทมเพลตนี้แล้วจะกลายเป็นไฟล์ที่ปฏิบัติการได้ซึ่งใช้ในการเริ่มกระบวนการ ดังนั้นเทมเพลตนี้จึงมีหน้าที่รับผิดชอบในการดําเนินการเริ่มต้นระบบ เช่น การค้นหาโปรแกรมล่าม Python, runfiles และการสร้างสภาพแวดล้อมเพื่อเรียกใช้แอปพลิเคชัน Python ที่ต้องการ
แม้ว่าปัจจุบันแอตทริบิวต์นี้จะกำหนดหรือไม่ก็ได้ แต่จะต้องระบุเมื่อย้ายกฎ Python ออกจาก Bazel
ชื่อตัวแปรที่ขยายออกที่แน่นอนคือ API ที่ไม่เสถียรและอาจมีการเปลี่ยนแปลง
API จะเสถียรมากขึ้นเมื่อย้ายกฎ Python ออกจาก Bazel
ดูตัวแปรเพิ่มเติมได้ที่ @bazel_tools//tools/python:python_bootstrap_template.txt
|
coverage_tool
|
ป้ายกํากับ ค่าเริ่มต้นคือ None
นี่เป็นเป้าหมายที่จะใช้รวบรวมข้อมูลการครอบคลุมโค้ดจากเป้าหมาย {rule}`py_binary` และ {rule}`py_test`
หากตั้งค่าไว้ เป้าหมายต้องสร้างไฟล์เดียวหรือเป็นเป้าหมายที่เรียกใช้ได้
เส้นทางไปยังไฟล์เดียวหรือไฟล์ที่เรียกใช้งานได้หากเป้าหมายเป็นไฟล์ที่เรียกใช้งานได้จะกำหนดจุดแรกเข้าสำหรับเครื่องมือการครอบคลุมของ Python ระบบจะเพิ่มเป้าหมายและไฟล์รันไทม์ของเป้าหมายลงในไฟล์รันไทม์เมื่อเปิดใช้การครอบคลุม
อินพุตของเครื่องมือต้องโหลดได้โดยใช้โปรแกรมแปลภาษา Python (เช่น ไฟล์ .py หรือ .pyc) และต้องยอมรับอาร์กิวเมนต์บรรทัดคำสั่งของ [`coverage.py`](https://coverage.readthedocs.io) ซึ่งรวมถึงคำสั่งย่อย `run` และ `lcov` เป็นอย่างน้อย
|
files
|
รายการป้ายกํากับ ค่าเริ่มต้นคือ []
สำหรับรันไทม์ในบิลด์ ชุดไฟล์นี้จะเป็นชุดไฟล์ที่ประกอบกันเป็นรันไทม์นี้
ระบบจะเพิ่มไฟล์เหล่านี้ลงในไฟล์รันไทม์ของไบนารี Python ที่ใช้รันไทม์นี้ สำหรับรันไทม์ของแพลตฟอร์ม คุณต้องไม่ตั้งค่าแอตทริบิวต์นี้
|
implementation_name
|
สตริง ค่าเริ่มต้นคือ ""
ชื่อการติดตั้งใช้งาน Python ("sys.implementation.name")
|
interpreter
|
ป้ายกํากับ ค่าเริ่มต้นคือ None
สําหรับรันไทม์ในตัว นี่เป็นเป้าหมายที่จะเรียกใช้เป็นอินเทอร์พรีเตอร์ โดยอาจเป็นไฟล์เดียวหรือไฟล์หลายไฟล์ก็ได้ ดังนี้
* ไฟล์เดียว ซึ่งจะเป็นไบนารีของโปรแกรมล่าม ระบบจะถือว่าโปรแกรมตีความดังกล่าวเป็นไฟล์ปฏิบัติการไฟล์เดียวแบบสําเร็จรูป หรือไฟล์สนับสนุนใดๆ ที่ระบุไว้ใน "files"
* เป้าหมายที่ปฏิบัติการได้ ไฟล์ปฏิบัติการของเป้าหมายจะเป็นไบนารีของโปรแกรมล่าม
ระบบจะรวมเอาเอาต์พุตเริ่มต้นอื่นๆ ทั้งหมด ("target.files") และไฟล์ธรรมดาของ runfiles ("runfiles.files") โดยอัตโนมัติ เหมือนกับที่ระบุไว้ในแอตทริบิวต์ "files"
หมายเหตุ: ระบบอาจยังไม่ใช้/เผยแพร่ไฟล์รันไทม์ของเป้าหมายอย่างถูกต้องกับผู้ที่ใช้ชุดเครื่องมือ/โปรแกรมล่าม โปรดดูที่ bazelbuild/rules_python/issues/1612
สำหรับรันไทม์ของแพลตฟอร์ม (นั่นคือมีการตั้งค่า "interpreter_path") คุณต้องไม่ตั้งค่าแอตทริบิวต์นี้
|
interpreter_path
|
สตริง ค่าเริ่มต้นคือ ""
สําหรับรันไทม์ของแพลตฟอร์ม จะเป็นเส้นทางสัมบูรณ์ของโปรแกรมแปลภาษา Python ในแพลตฟอร์มเป้าหมาย สำหรับรันไทม์ในตัว คุณต้องไม่ตั้งค่าแอตทริบิวต์นี้
|
interpreter_version_info
|
พจนานุกรม: สตริง -> สตริง ค่าเริ่มต้นคือ {}
ข้อมูลเวอร์ชันเกี่ยวกับโปรแกรมแปลภาษาที่รันไทม์นี้ให้
หากไม่ได้ระบุ ให้ใช้ {obj}`--python_version`
คีย์ที่รองรับจะตรงกับชื่อของ `sys.version_info` แม้ว่าค่าอินพุตจะเป็นสตริง แต่ส่วนใหญ่จะแปลงเป็น int คีย์ที่รองรับมีดังนี้
* major: int, หมายเลขเวอร์ชันหลัก
* minor: int, หมายเลขเวอร์ชันย่อย
* micro: int ไม่บังคับ, หมายเลขเวอร์ชันย่อย
* releaselevel: str ไม่บังคับ, ระดับการเผยแพร่
* serial: int ไม่บังคับ, หมายเลขซีเรียลของรุ่น
:::{versionchanged} 0.36.0
{obj}`--python_version` กำหนดค่าเริ่มต้น
:::
|
pyc_tag
|
สตริง ค่าเริ่มต้นคือ ""
สตริงที่ไม่บังคับ ส่วนแท็กของชื่อไฟล์ pyc เช่น อินฟิกซ์ `cpython-39` ของ `foo.cpython-39.pyc` ดู PEP 3147 หากไม่ได้ระบุ ระบบจะคํานวณจาก `implementation_name` และ `interpreter_version_info` หากไม่มี pyc_tag อยู่ เฉพาะการสร้าง pyc ที่ไม่มีแหล่งที่มาเท่านั้นที่จะทํางานได้อย่างถูกต้อง
|
python_version
|
สตริง ค่าเริ่มต้นคือ "PY3"
รันไทม์นี้สำหรับ Python เวอร์ชันหลัก 2 หรือ 3 ค่าที่ใช้ได้คือ"PY2" และ"PY3"
ค่าเริ่มต้นจะควบคุมโดย Flag `--incompatible_py3_is_default`
อย่างไรก็ตาม ในอนาคตแอตทริบิวต์นี้จะบังคับใช้และไม่มีค่าเริ่มต้น
|
stage2_bootstrap_template
|
ป้ายกํากับ ค่าเริ่มต้นคือ "@rules_python//python/private:stage2_bootstrap_template"
เทมเพลตที่จะใช้เมื่อเปิดใช้การบูตสแตป 2 ระยะ
:::{seealso}
{obj}`PyRuntimeInfo.stage2_bootstrap_template` และ {obj}`--bootstrap_impl`
:::
|
stub_shebang
|
สตริง ค่าเริ่มต้นคือ "#!/usr/bin/env python3"
นิพจน์ "Shebang" ที่ใส่ไว้ข้างหน้าสคริปต์สแต็บ Python ที่ใช้บูตสแตรป ใช้เมื่อเรียกใช้เป้าหมาย {rule}`py_binary`
ดูเหตุผลได้ที่ https://github.com/bazelbuild/bazel/issues/8685
ไม่มีผลกับ Windows
|
zip_main_template
|
ป้ายกํากับ ค่าเริ่มต้นคือ "@rules_python//python/private:zip_main_template"
เทมเพลตที่จะใช้สำหรับไฟล์ `__main__.py` ระดับบนสุดของไฟล์ ZIP
ซึ่งจะกลายเป็นจุดแรกเข้าที่ดำเนินการเมื่อเรียกใช้ `python foo.zip`
:::{seealso}
ช่อง {obj}`PyRuntimeInfo.zip_main_template`
:::
|