엘리 벤더스키: 플러그인 사례 연구: 플러그기 노트

엘리 벤더스키: 플러그인 사례 연구: 플러그기

Pluggy는 도구 및 라이브러리에서 플러그인 시스템을 생성하기 위해 설계된 Python 라이브러리입니다. 원래 pytest 프로젝트를 위해 개발되었으며 나중에 독립 라이브러리로 추출되었습니다. Pluggy의 핵심 개념은 호스트 애플리케이션에서 노출되고 플러그인에서 구현되는 함수인 훅(hooks)을 중심으로 합니다. 호스트는 HookspecMarker를 사용하여 훅을 정의하고, 플러그인은 HookimplMarker를 사용하여 이를 구현합니다.이 라이브러리는 마크업을 HTML로 변환하고 플러그인을 통해 사용자 정의 역할 및 콘텐츠 처리를 지원하는 htmlize라는 장난감 도구를 만드는 것을 용이하게 합니다. 호스트는 htmlize_role_handlerhtmlize_contents와 같은 특정 훅을 정의하여 플러그인이 기능을 확장할 수 있도록 합니다. 이러한 훅은 다양한 매개변수를 허용하고 데이터를 처리하기 위한 함수를 반환할 수 있습니다.Pluggy의 PluginManager는 플러그인 로딩을 처리하며, setuptools 진입점(entry points)으로 등록된 플러그인을 검색하는 편리한 메커니즘을 제공합니다. 이를 통해 pip를 통해 설치된 플러그인을 호스트 애플리케이션에서 자동으로 찾고 로드할 수 있습니다. 호스트는 사용자 정의 플러그인 검색 방법을 사용할 수도 있으며, 매니저에 직접 플러그인을 등록할 수 있습니다.로드된 플러그인을 호출하는 것은 간단합니다. PluginManager는 등록된 훅 구현에 대한 호출을 조정합니다. 훅 호출은 일반적으로 모든 연결된 플러그인에서 오는 결과 목록을 반환하며, 실행 순서를 제어하는 옵션이 있습니다. 플러그인은 호스트의 hookimpl 마커로 함수를 장식하여 훅을 구현합니다.Pluggy는 검색, 등록 및 훅 사용과 같은 기본적인 플러그인 개념과 잘 맞습니다. 표준 Python 가져오기 메커니즘을 활용하여 호스트 API를 플러그인에 노출하는 Pythonic한 방법을 제공합니다. 플러그인 시스템을 만드는 것은 간단할 수 있지만, Pluggy는 시그니처 유효성 검사, 일관된 결과 수집 및 순서 지정 옵션과 같은 고급 기능을 제공합니다.Pluggy를 사용할지 여부에 대한 결정은 프로젝트 요구 사항에 따라 달라지며, 고급 기능의 이점과 종속성 추가를 비교하여 고려해야 합니다. 라이브러리의 자동 진입점 등록 메커니즘은 표준 Python 패키징 도구를 활용하는 프로젝트에 특히 유용합니다. 전반적으로 Pluggy는 확장 가능한 Python 애플리케이션을 구축하기 위한 강력하고 유연한 솔루션을 제공합니다.