Typeshed에는 Python 표준 라이브러리 및 Python 내장에 대한 외부 유형 주석은 물론 해당 프로젝트 외부 사람들이 기여한 타사 패키지가 포함되어 있습니다.
이 데이터는 예를 들어 정적 분석, 유형 확인, 유형 추론 및 자동 완성에 사용될 수 있습니다.
Typeshed 사용 방법에 대한 자세한 내용은 아래를 읽어보세요. 기여자를 위한 정보는 CONTRIBUTING.md에서 확인할 수 있습니다. 풀 요청을 제출하기 전에 읽어보시기 바랍니다. 스텁이 있는 프로젝트에 주석 관련 문제를 보고하지 말고, 대신 여기에서 타이프쉐드에 보고하세요.
스텁 파일, Typeshed 및 일반적인 Python의 타이핑 시스템에 대한 추가 문서는 https://typing.readthedocs.io/en/latest/에서도 찾을 수 있습니다.
Typeshed는 Python 버전 3.8~3.13을 지원합니다.
개발하는 대신 유형 검사기(mypy, pyright, pytype, PyCharm 등)만 사용하는 경우 유형화된 저장소와 전혀 상호 작용할 필요가 없습니다. typeshed는 유형 검사기와 함께 번들로 제공됩니다. 그리고 사용 중인 타사 패키지 및 모듈에 대한 유형 스텁을 PyPI에서 설치할 수 있습니다. 예를 들어, html5lib
및 requests
사용하는 경우 다음을 사용하여 유형 스텁을 설치할 수 있습니다.
$ pip install types-html5lib types-requests
이러한 PyPI 패키지는 PEP 561을 따르며 내부 기계에 의해 자동으로 릴리스됩니다(최대 하루에 한 번).
유형 검사기는 설치 시 이러한 스텁 패키지를 사용할 수 있어야 합니다. 자세한 내용은 유형 검사기 설명서를 참조하세요.
타사 스텁 패키지의 버전 번호는 최소한 네 부분으로 구성됩니다. 마지막 부분을 제외한 스텁 버전의 모든 부분은 스텁되는 런타임 패키지의 버전에 해당합니다. 예를 들어, types-foo
패키지의 버전이 1.2.0.20240309
인 경우 이는 types-foo
패키지에 foo==1.2.*
대상으로 하는 스텁이 포함되어 있고 해당 지정자와 일치하는 foo
의 최신 버전에 대해 테스트되었음을 보장합니다. 이 예에서 버전 번호(20240309)의 마지막 요소는 스텁 패키지가 2024년 3월 9일에 푸시되었음을 나타냅니다.
Typeshed에서는 주요 변경 사항을 최소한으로 유지하려고 노력합니다. 그러나 스텁의 특성으로 인해 버전 변경으로 인해 코드가 유형 확인에 실패할 수 있는 변경 사항이 발생할 수 있습니다.
사용 중인 스텁 패키지의 버전을 지정하는 데 사용할 수 있는 몇 가지 전략이 있으며 각각 고유한 장단점이 있습니다.
스텁되는 패키지에 사용하는 것과 동일한 경계를 사용하십시오. 예를 들어, requests>=2.30.0,<2.32
사용하는 경우 types-requests>=2.30.0,<2.32
사용할 수 있습니다. 이렇게 하면 스텁이 사용 중인 패키지와 호환되지만 스텁의 변경으로 인해 유형 검사가 중단될 위험이 약간 있습니다.
이 전략의 또 다른 위험은 스텁이 스텁되는 패키지보다 뒤처지는 경우가 많다는 것입니다. 심각한 버그를 수정했기 때문에 패키지를 특정 최소 버전으로 강제로 스텁하고 싶을 수도 있지만, 그에 따라 업데이트된 스텁이 릴리스되지 않은 경우 유형 검사 결과가 완전히 정확하지 않을 수 있습니다.
스텁을 양호한 것으로 알려진 버전에 고정하고 수시로 핀을 업데이트합니다(수동으로 또는 dependencyabot이나 renovate와 같은 도구를 사용하여).
예를 들어 types-requests==2.31.0.1
사용하는 경우 종속성을 업그레이드해도 유형 검사가 중단되지 않는다는 확신을 가질 수 있습니다. 그러나 핀을 업데이트할 때까지 유형 검사를 잠재적으로 향상시킬 수 있는 스텁의 개선 사항을 놓치게 됩니다. 또한 이 전략에는 사용 중인 스텁이 스텁되는 패키지와 호환되지 않을 수 있는 위험이 있습니다.
스텁을 고정하지 마십시오. 이는 버전 핀 업데이트와 관련하여 최소한의 작업을 요구하는 옵션이며, 스텁 패키지의 새 버전이 출시될 때마다 향상된 스텁의 혜택을 자동으로 누릴 수 있다는 장점이 있습니다. 그러나 스텁이 스텁된 패키지와 호환되지 않게 될 위험이 있습니다.
예를 들어, 패키지의 새로운 주 버전이 릴리스되면 스텁 중인 패키지를 업데이트하기 전에 런타임 패키지의 새 버전을 반영하도록 스텁이 업데이트될 가능성이 있습니다.
필요에 따라 다양한 전략 간에 전환할 수도 있습니다. 예를 들어 기본적으로 전략 (1)을 사용하지만 쉽게 해결할 수 없는 문제가 발생하면 전략 (2)로 대체할 수 있습니다.
_typeshed
패키지 typeshed에는 표준 라이브러리의 일부로 _typeshed
패키지가 포함되어 있습니다. 이 패키지와 해당 하위 모듈에는 유틸리티 유형이 포함되어 있지만 런타임에는 사용할 수 없습니다. 이 패키지를 사용하는 방법에 대한 자세한 내용은 stdlib/_typeshed
디렉터리를 참조하세요.
특정 라이브러리에 대한 유형 스텁이 올바르지 않거나 불완전하다는 것을 나타내는 유형 검사기 동작이 발생한 경우, 우리는 여러분의 의견을 듣고 싶습니다!
토론을 위한 주요 포럼은 프로젝트의 GitHub 문제 추적기입니다. 이곳은 위의 내용이나 프로젝트와 관련된 대부분의 다른 주제에 대한 토론을 시작하기에 적합한 장소입니다.
Python을 사용한 입력에 대한 일반적인 질문이 있거나 유형 주석 또는 유형창 외부의 스텁에 대한 검토가 필요한 경우 토론 포럼으로 이동하세요. 덜 공식적인 토론을 원하시면 gitter.im의 타이핑 채팅방을 이용해 보세요. 일부 활자체 관리자는 거의 항상 존재합니다. 그곳에서 우리를 찾아주시면 기꺼이 대화를 나누겠습니다. 실질적인 기술 논의는 이슈 트래커로 전달됩니다.