Typeshed มีคำอธิบายประกอบประเภทภายนอกสำหรับไลบรารีมาตรฐาน Python และบิวด์อิน Python รวมถึงแพ็คเกจของบุคคลที่สามซึ่งสนับสนุนโดยบุคคลภายนอกโปรเจ็กต์เหล่านั้น
ข้อมูลนี้สามารถนำไปใช้สำหรับการวิเคราะห์แบบคงที่ การตรวจสอบประเภท การอนุมานประเภท และการเติมข้อความอัตโนมัติ
สำหรับข้อมูลเกี่ยวกับวิธีการใช้ typeshed โปรดอ่านด้านล่าง ข้อมูลสำหรับผู้มีส่วนร่วมสามารถพบได้ใน CONTRIBUTING.md โปรดอ่านก่อนส่งคำขอดึง อย่ารายงานปัญหาเกี่ยวกับคำอธิบายประกอบไปยังโปรเจ็กต์ที่เป็น stubs แต่ให้รายงานที่นี่เพื่อพิมพ์แทน
เอกสารเพิ่มเติมเกี่ยวกับไฟล์ stub, typeshed และระบบการพิมพ์ของ Python โดยทั่วไปสามารถดูได้ที่https://typing.readthedocs.io/en/latest/
Typeshed รองรับ Python เวอร์ชัน 3.8 ถึง 3.13
หากคุณเพียงแค่ใช้ตัวตรวจสอบประเภท (mypy, pyright, pytype, PyCharm, ...) ซึ่งต่างจากการพัฒนามัน คุณไม่จำเป็นต้องโต้ตอบกับ repo ที่จัดพิมพ์เลย: สำเนาของส่วนไลบรารีมาตรฐานของ typeshed มาพร้อมกับตัวตรวจสอบประเภท และประเภท stub สำหรับแพ็คเกจและโมดูลของบุคคลที่สามที่คุณใช้สามารถติดตั้งได้จาก PyPI ตัวอย่างเช่น หากคุณใช้ html5lib
และ requests
คุณสามารถติดตั้งประเภท stubs ได้
$ pip install types-html5lib types-requests
แพ็คเกจ PyPI เหล่านี้เป็นไปตาม PEP 561 และได้รับการเผยแพร่โดยอัตโนมัติ (สูงสุดวันละครั้ง) โดยเครื่องจักรภายในที่พิมพ์
ตัวตรวจสอบประเภทควรใช้แพ็คเกจ stub เหล่านี้ได้เมื่อทำการติดตั้ง สำหรับรายละเอียดเพิ่มเติม โปรดดูเอกสารประกอบสำหรับเครื่องมือตรวจสอบประเภทของคุณ
หมายเลขเวอร์ชันของแพ็คเกจ Stub ของบริษัทอื่นประกอบด้วยอย่างน้อยสี่ส่วน ทุกส่วนของเวอร์ชัน stub ยกเว้นส่วนสุดท้าย จะสอดคล้องกับเวอร์ชันของแพ็คเกจรันไทม์ที่กำลัง stub ตัวอย่างเช่น หากแพ็คเกจ types-foo
มีเวอร์ชัน 1.2.0.20240309
สิ่งนี้รับประกันได้ว่าแพ็คเกจ types-foo
มี stub ที่กำหนดเป้าหมายเป็น foo==1.2.*
และทดสอบกับ foo
ที่ตรงกับตัวระบุเวอร์ชันล่าสุด ในตัวอย่างนี้ องค์ประกอบสุดท้ายของหมายเลขเวอร์ชัน (20240309) ระบุว่าแพ็กเกจ Stub ถูกพุชในวันที่ 9 มีนาคม 2024
เมื่อพิมพ์แล้ว เราพยายามทำลายการเปลี่ยนแปลงให้เหลือน้อยที่สุด อย่างไรก็ตาม เนื่องจากลักษณะของ stubs การชนเวอร์ชันใดๆ อาจทำให้เกิดการเปลี่ยนแปลงที่อาจทำให้โค้ดของคุณไม่สามารถพิมพ์การตรวจสอบได้
มีกลยุทธ์หลายประการสำหรับการระบุเวอร์ชันของแพ็กเกจ stubs ที่คุณกำลังใช้ โดยแต่ละกลยุทธ์มีข้อด้อยของตัวเอง:
ใช้ขอบเขตเดียวกันกับที่คุณใช้สำหรับแพ็คเกจที่กำลังถูกตัด ตัวอย่างเช่น หากคุณใช้ requests>=2.30.0,<2.32
คุณสามารถใช้ types-requests>=2.30.0,<2.32
ได้ เพื่อให้แน่ใจว่า stubs เข้ากันได้กับแพ็คเกจที่คุณใช้ แต่มีความเสี่ยงเล็กน้อยในการตรวจสอบประเภทแตกหักเนื่องจากการเปลี่ยนแปลงใน stubs
ความเสี่ยงอีกประการหนึ่งของกลยุทธ์นี้ก็คือ ต้นขั้วมักจะล้าหลังบรรจุภัณฑ์ที่ถูกต้นขั้ว คุณอาจต้องการบังคับให้แพ็กเกจถูก stub เป็นเวอร์ชันขั้นต่ำที่แน่นอน เนื่องจากจะแก้ไขจุดบกพร่องที่สำคัญ แต่หาก stub ที่อัปเดตตามลำดับไม่ได้รับการเผยแพร่ ผลการตรวจสอบประเภทของคุณอาจไม่ถูกต้องทั้งหมด
ปักหมุดต้นขั้วให้เป็นเวอร์ชันที่ใช้งานได้ดีและอัปเดตหมุดเป็นครั้งคราว (ไม่ว่าจะด้วยตนเองหรือใช้เครื่องมือ เช่น dependabot หรือ renovate)
ตัวอย่างเช่น หากคุณใช้ types-requests==2.31.0.1
คุณจะมั่นใจได้ว่าการอัพเกรดการอ้างอิงจะไม่ทำให้การตรวจสอบประเภทเสียหาย อย่างไรก็ตาม คุณจะพลาดการปรับปรุงในส่วนที่อาจปรับปรุงการตรวจสอบประเภทได้จนกว่าคุณจะอัปเดตหมุด กลยุทธ์นี้ยังมีความเสี่ยงที่ต้นขั้วที่คุณใช้อยู่อาจเข้ากันไม่ได้กับแพ็คเกจที่กำลังสตับอยู่
อย่าปักหมุด นี่คือตัวเลือกที่ต้องการให้คุณทำงานน้อยที่สุดเมื่อต้องอัปเดตพินเวอร์ชัน และมีข้อได้เปรียบที่คุณจะได้รับประโยชน์โดยอัตโนมัติจาก Stub ที่ปรับปรุงแล้วทุกครั้งที่มีการเปิดตัวแพ็คเกจ Stubs เวอร์ชันใหม่ อย่างไรก็ตาม อาจมีความเสี่ยงที่ต้นขั้วจะเข้ากันไม่ได้กับพัสดุที่ถูก stub
ตัวอย่างเช่น หากมีการเปิดตัวแพ็กเกจเวอร์ชันหลักใหม่ ก็มีโอกาสที่ stubs จะได้รับการอัปเดตเพื่อแสดงเวอร์ชันใหม่ของแพ็กเกจรันไทม์ก่อนที่คุณจะอัปเดตแพ็กเกจที่กำลัง stub
คุณยังสามารถสลับระหว่างกลยุทธ์ต่างๆ ได้ตามต้องการ ตัวอย่างเช่น คุณอาจใช้กลยุทธ์เป็นค่าเริ่มต้น (1) แต่กลับไปใช้กลยุทธ์ (2) เมื่อเกิดปัญหาซึ่งไม่สามารถแก้ไขได้ง่าย
_typeshed
typeshed มีแพ็คเกจ _typeshed
เป็นส่วนหนึ่งของไลบรารีมาตรฐาน แพ็คเกจนี้และโมดูลย่อยมีประเภทยูทิลิตี้ แต่ไม่มีให้ใช้งานในขณะรันไทม์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้แพ็คเกจนี้ โปรดดูไดเร็กทอรี stdlib/_typeshed
หากคุณพบพฤติกรรมในตัวตรวจสอบประเภทที่แนะนำประเภท stub สำหรับไลบรารีที่กำหนดไม่ถูกต้องหรือไม่สมบูรณ์ เราต้องการรับฟังจากคุณ!
ฟอรัมหลักของเราสำหรับการสนทนาคือตัวติดตามปัญหา GitHub ของโปรเจ็กต์ นี่เป็นสถานที่ที่เหมาะสมในการเริ่มต้นการอภิปรายในหัวข้อใดๆ ข้างต้นหรือหัวข้ออื่นๆ ส่วนใหญ่ที่เกี่ยวข้องกับโครงการ
หากคุณมีคำถามทั่วไปเกี่ยวกับการพิมพ์ด้วย Python หรือต้องการการตรวจสอบคำอธิบายประกอบประเภทของคุณหรือต้นขั้วที่อยู่นอกประเภทการพิมพ์ โปรดไปที่ฟอรัมสนทนาของเรา สำหรับการสนทนาที่ไม่เป็นทางการ ให้ลองพิมพ์ห้องสนทนาบน gitter.im ผู้ดูแลแบบพิมพ์บางตัวมักจะปรากฏอยู่เกือบตลอดเวลา อย่าลังเลที่จะพบกับเราที่นั่น และเรายินดีที่จะพูดคุย การอภิปรายทางเทคนิคที่สำคัญจะถูกส่งไปยังเครื่องมือติดตามปัญหา