피드로 돌아가기
stubgen-pyx: The stubs mypy can't generate
Dev.toDev.to
Backend

Cython AST 직접 분석 통한 고정밀 .pyi 스텁 자동 생성 체계 구축

stubgen-pyx: The stubs mypy can't generate

Jonathan Townsend2026년 6월 9일9advanced

Context

기존 mypy stubgen의 Runtime Introspection 방식은 컴파일된 바이너리에서 타입 정보를 상실하는 한계 존재. 이로 인해 Cython 확장 모듈의 타입 힌트가 *args, **kwargs로 단순화되어 IDE 자동 완성 및 정적 분석 효율이 저하되는 문제 발생.

Technical Solution

  • 컴파일된 바이너리가 아닌 Cython 소스 코드를 직접 읽어 분석하는 Static Analysis 접근 방식 채택
  • Cython 내부 컴파일러의 parse_from_strings를 활용한 AST(Abstract Syntax Tree) 추출 구조 설계
  • PyiElement라는 Intermediate Representation(IR)을 도입하여 Cython AST와 최종 .pyi 출력 텍스트 간의 의존성 분리
  • C-header cimport 문 중 실제 타입 애노테이션에 사용되지 않는 불필요한 임포트를 제거하는 Import Trimming 로직 구현
  • 정규 표현식 치환을 통한 cimport의 표준 Python import 변환 및 isort 스타일의 정렬 프로세스 적용
  • 5단계 파이프라인(Preprocessing → AST Parsing → Visitor Analysis → Conversion → Building)을 통한 데이터 흐름 정형화

1. Cython 기반 확장 모듈 사용 시 .pyi 스텁 파일을 배포 패키지에 포함하여 IDE 지원 강화

2. CI 파이프라인에 stubgen-pyx를 통합하여 소스 코드와 스텁 파일 간의 불일치 상시 감시

3. 복잡한 C-Type의 경우 Python 표준 int 등으로 정규화하여 사용자 가독성 확보

원문 읽기