ty - 빠른 Python 타입 체커 치트시트
ty는 Astral (Ruff과 uv의 팀)이 작성한 Rust의 매우 빠른 Python 타입 체커이자 언어 서버입니다. mypy는 큰 코드베이스에서 몇 분이 걸릴 수 있지만, ty는 거의 즉각적인 피드백을 대상으로 하므로 CI에서만이 아니라 매 저장 시마다 타입 체킹을 실행하는 것이 현실적입니다. 현대 Astral Python 도구체인을 완성합니다. 패키징을 위한 uv, lint/format을 위한 Ruff, 타입을 위한 ty.
ty는 mypy보다 최신이며 여전히 개선 중입니다. 하드 CI 게이트로 만들기 전에 코드베이스에 대해 검증하세요.
설치
| 방법 | 명령 |
|---|
| uv (권장) | uv tool install ty |
| uvx (설치 없음) | uvx ty check |
| pip | pip install ty |
| 확인 | ty --version |
코드 확인
| 명령 | 설명 |
|---|
ty check | 현재 프로젝트 확인 |
ty check src/ | 특정 경로 확인 |
ty check --watch | 파일 변경 시 재확인 |
ty check --output-format concise | 간결한 출력 |
ty check --error-on-warning | 경고를 오류로 처리 |
ty --help | 전체 옵션 목록 |
구성
ty는 pyproject.toml을 읽습니다.
[tool.ty]
# 확인할 경로
src = ["src", "tests"]
[tool.ty.environment]
python-version = "3.12"
# 종속성을 찾을 위치
python = ".venv"
[tool.ty.rules]
# 개별 진단 조정
possibly-unbound-attribute = "warn"
unused-ignore-comment = "ignore"
| 섹션 | 목적 |
|---|
[tool.ty] | 프로젝트 레이아웃 / 포함된 경로 |
[tool.ty.environment] | Python 버전, venv, 검색 경로 |
[tool.ty.rules] | 각 규칙을 error, warn 또는 ignore으로 설정 |
진단 억제
| 형식 | 효과 |
|---|
# ty: ignore | 라인의 모든 진단 억제 |
# ty: ignore[rule-name] | 특정 규칙 억제 |
# type: ignore | 또한 존중됨 (mypy 호환) |
언어 서버 (편집기 통합)
| 편집기 | 방법 |
|---|
| VS Code | Astral ty 확장 설치 |
| Neovim | ty server를 LSP로 구성 |
| 모든 LSP 클라이언트 | ty server 실행 |
언어 서버는 CLI와 동일한 속도로 인라인 타입 오류, 호버 타입, 정의로 이동을 제공합니다.
일반적인 진단
| 진단 | 의미 |
|---|
invalid-argument-type | 인자가 매개변수 타입과 일치하지 않음 |
unresolved-attribute | 속성이 타입에 존재하지 않음 |
possibly-unbound-variable | 변수가 할당 전에 사용될 수 있음 |
invalid-return-type | 반환이 주석과 일치하지 않음 |
unresolved-import | 가져오기를 해석할 수 없음 |
Astral 도구체인
# 완전한 현대 Python 품질 게이트
uv sync # deps, locked and fast
uv run ruff format . # format
uv run ruff check . # lint
uv run ty check # types
uv run pytest # tests
| 도구 | 대체 |
|---|
| uv | pip, pip-tools, virtualenv, pyenv, poetry |
| Ruff | black, flake8, isort, pyupgrade, + 더 |
| ty | mypy (타입 체킹) |
CI 통합
# 타입 오류에 대해 빌드 실패 처리
uvx ty check --error-on-warning
# 변경된 파일만 확인 (git 포함)
git diff --name-only origin/main -- '*.py' | xargs uvx ty check
ty vs 다른 타입 체커
| 측면 | ty | mypy | Pyright |
|---|
| 언어 | Rust | Python | TypeScript/Node |
| 속도 | 매우 빠름 | 느림 | 빠름 |
| 성숙도 | 최신 | 가장 성숙 | 성숙 |
| 편집기 LSP | 내장 | 플러그인을 통해 | 내장 (Pylance) |
| 최적 용도 | 속도 + Astral 스택 | 생태계 호환성 | VS Code 사용자 |
리소스