Mypy에서 Ty로: Ruff 제작사가 만든 초고속 Rust 기반 Python 타입 체커 도입 가이드
(blog.pythonlibrary.org)요약:
- Astral(Ruff 제작사)에서 공개한 Rust 기반의 새로운 Python 타입 체커 'ty'의 도입 및 마이그레이션 방법을 다룹니다.
- 'ty'는 기본적으로 Mypy의 엄격(strict) 모드와 유사하게 동작하며, 'uv'를 통한 설치 및 실행을 기본적으로 지원합니다.
- 아직 공식 pre-commit 지원은 없으나 커뮤니티 워크어라운드를 사용할 수 있으며, GitHub Actions 연동 방법도 상세히 소개합니다.
상세요약:
1. Ty 소개 및 특징
Mypy와 Pyright가 주도하던 Python 타입 체킹 생태계에 Astral이 개발한 'ty'가 새롭게 등장했습니다. 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을 통해 설정이 가능합니다.
- 기본 동작: 별도 설정 없이 실행 시 Mypy의 strict 모드와 매우 유사하게 동작합니다.
-
제약 사항: 현재 누락된 타입 힌트(missing type hints)를 강조 표시하지 않습니다. 이를 강제하려면 Ruff의
flake8-annotations규칙을pyproject.toml에 추가하여 보완해야 합니다.
4. GitHub Actions 연동
CI 환경에서 PR 생성 시 자동으로 타입 체킹을 수행하도록 .github/workflows/ty.yml을 생성하여 설정할 수 있습니다.
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 훅은 지원되지 않으나(이슈 #269), 커뮤니티에서 제공하는 워크어라운드(예: ty-pre-commit)를 사용하여 .pre-commit-config.yaml에 통합할 수 있습니다. 추후 공식 지원 시 설정 업데이트가 권장됩니다.