จาก Mypy สู่ Ty: คู่มือนำ Python type checker ความเร็วสูงพิเศษบน Rust จากผู้สร้าง Ruff มาใช้
(blog.pythonlibrary.org)สรุป:
- กล่าวถึงวิธีนำและย้ายมาใช้ Python type checker ตัวใหม่บน Rust ชื่อ 'ty' ที่เปิดตัวโดย Astral (ผู้สร้าง Ruff)
- 'ty' ทำงานโดยพื้นฐานคล้ายกับโหมด strict ของ Mypy และรองรับการติดตั้งและรันผ่าน
uvเป็นหลัก - แม้จะยังไม่รองรับ pre-commit อย่างเป็นทางการ แต่สามารถใช้วิธีแก้แบบชุมชนได้ และมีการแนะนำวิธีเชื่อมต่อกับ GitHub Actions อย่างละเอียด
สรุปแบบละเอียด:
1. แนะนำ Ty และคุณสมบัติ
ในระบบนิเวศการตรวจสอบ type ของ Python ที่เดิมนำโดย Mypy และ Pyright ตอนนี้มี 'ty' ที่ Astral พัฒนาขึ้นเข้ามาใหม่ เช่นเดียวกับ Ruff มันถูกเขียนด้วย Rust จึงมีความเร็วสูงมาก
2. การติดตั้งและการรันบนเครื่องโลคัล
สามารถติดตั้งและรัน 'ty' ได้อย่างสะดวกผ่าน uv
- การติดตั้ง:
# ติดตั้งเครื่องมือผ่าน uv uv tool install ty@latest # หรือรองรับการติดตั้งแบบ standalone (ดูเอกสาร) - การรัน:
# รันหลังติดตั้งแล้ว uv run ty # รันโดยไม่ต้องติดตั้ง (ใช้ uvx) uvx ty # รันโดยตรง ty check
3. การตั้งค่า (Configuration)
สามารถตั้งค่าได้ผ่าน pyproject.toml หรือ ty.toml
- พฤติกรรมเริ่มต้น: เมื่อรันโดยไม่มีการตั้งค่าเพิ่มเติม จะทำงานคล้ายกับโหมด strict ของ Mypy อย่างมาก
- ข้อจำกัด: ขณะนี้ยังไม่ไฮไลต์ missing type hints หากต้องการบังคับส่วนนี้ ต้องเพิ่มกฎ
flake8-annotationsของ Ruff ลงในpyproject.tomlเพื่อเสริมการทำงาน
4. การเชื่อมต่อกับ GitHub Actions
ในสภาพแวดล้อม CI สามารถสร้างไฟล์ .github/workflows/ty.yml เพื่อให้มีการตรวจสอบ type อัตโนมัติเมื่อมีการสร้าง PR
name: ty
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
workflow_dispatch:
jobs:
build:
if: github.event.pull_request.draft == false
runs-on: self-hosted
steps:
- uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ty==0.0.7
- name: Run ty
run: ty check
continue-on-error: false
(หมายเหตุ: เวอร์ชันของ ty จำเป็นต้องอัปเดตให้สอดคล้องกับสถานะการรีลีส)
5. การผสานกับ Pre-commit
ปัจจุบันยังไม่รองรับ pre-commit hook อย่างเป็นทางการ (issue #269) แต่สามารถใช้วิธีแก้จากชุมชน (เช่น ty-pre-commit) เพื่อนำไปผสานใน .pre-commit-config.yaml ได้ และแนะนำให้อัปเดตการตั้งค่าเมื่อมีการรองรับอย่างเป็นทางการในอนาคต
ยังไม่มีความคิดเห็น