표준 라이브러리에 추가하기

표준 라이브러리에는 유용한 코드가 매우 많지만, 때로는 제공되는 것보다 더 많은 기능이 필요할 수 있습니다. 이 문서는 표준 라이브러리의 기존 모듈에 새로운 기능을 추가하거나 완전히 새로운 모듈을 추가하는 방법을 설명합니다.

기존 코드의 변경은 버그 수정으로 간주되므로 여기서는 다루지 않으며, 이러한 변경은 issue tracker에 보고해야 하는 버그로 처리됩니다.

기존 모듈에 추가하기

어떤 함수, 메서드 또는 클래스가 유용하며 일반 Python 커뮤니티에도 도움이 된다고 판단했다면, 이를 표준 라이브러리에 추가하기 위해 몇 가지 단계를 거쳐야 합니다.

먼저 코드의 유용성을 가늠해야 하며, 일반적으로 코드를 공개적으로 공유하여 이를 확인합니다. 필수 단계는 아니지만 권장합니다. 이를 위한 몇 가지 방법이 있습니다:

  • 제안된 추가 사항과 관련된 논의가 있는지 issue tracker를 검색하십시오. 제안이 받아들여지지 않은 이유를 설명하는 이슈를 찾을 수도 있습니다.

  • Python 코어 팀과 커뮤니티로부터 직접 피드백을 받으려면 Ideas Discourse category에 새 스레드를 개설하십시오.

  • 코드에 관한 블로그 게시물을 작성하는 것도 유용한 피드백을 얻는 데 도움이 될 수 있습니다.

사람들로부터 코드가 전반적으로 받아들여지고 유용하다는 평가를 받았다면, 코드를 pull request 형태로 첨부하여 issue tracker에 이슈를 개설할 수 있습니다. 가능하다면 contributor agreement도 제출하십시오.

코어 팀 구성원이 코드가 일반 Python 커뮤니티에 유용하다고 판단하면 해당 코드를 커밋합니다. 코어 팀이 코드를 채택하여 커밋하지 않더라도 개인적인 일로 받아들이지 마십시오. 커뮤니티의 지지를 가늠하기 위해 코드를 공개적으로 공유하면, 적어도 해당 코드가 유용하다고 생각할 수 있는 다른 사람들이 이를 접하게 된다는 사실을 알 수 있습니다.

새 모듈 추가하기

먼저 새 모듈을 표준 라이브러리에 추가하는 것은 매우 어렵다는 점을 밝혀야 합니다. 상당한 양의 코드를 표준 라이브러리에 추가하면 코어 팀의 부담이 커집니다. 또한 이는 해당 모듈이 어떤 작업을 수행하는 좋은 방법으로 코어 팀의 “승인”을 어느 정도 받게 된다는 의미이며, 일반적으로 나머지 Python 커뮤니티가 사용 가능한 다른 해결책보다 새 모듈을 사용하게 됩니다. 이러한 모든 이유로 표준 라이브러리에 무언가를 추가하는 일은 가볍게 결정되지 않습니다.

허용되는 모듈 유형

일반적으로 두 가지 유형의 모듈이 표준 라이브러리에 추가됩니다. 한 유형은 올바르게 구현하기 어려운 기능을 구현하는 모듈입니다. 이에 대한 좋은 예는 multiprocessing 패키지입니다. 다양한 OS 문제를 해결하고 동시성 문제를 처리하는 등의 작업은 모두 올바르게 구현하기가 매우 어렵습니다.

두 번째 유형은 사람들이 끊임없이 다시 구현하는 기능을 구현하는 모듈입니다. 관련 itertools 모듈은 구성 요소가 반드시 복잡하지는 않지만 다양한 프로그램에서 정기적으로 사용되고 올바르게 구현하기가 다소 까다로울 수 있으므로 이러한 유형의 좋은 예입니다. 널리 사용되는 데이터 형식을 파싱하는 모듈도 표준 라이브러리를 구성하는 이러한 유형의 모듈에 해당합니다.

새로운 표준 라이브러리 모듈이 모든 Python 사용자의 관심을 끌 필요는 없지만, 커뮤니티의 상당수가 유용하다고 여길 만한 것이어야 합니다. 이를 통해 코어 팀에 부과되는 개발자 부담을 감수할 가치가 있도록 합니다.

요구 사항

모듈이 표준 라이브러리 포함 대상으로 고려되려면 몇 가지 요구 사항을 충족해야 합니다.

가장 기본적인 요구 사항은 코드가 표준 풀 리퀘스트 요구 사항을 충족해야 한다는 것입니다. 표준 라이브러리 외부에서 개발된 코드의 경우, 일반적으로 코딩 스타일 지침을 준수하고 적절한 테스트를 작성했는지 확인해야 한다는 의미입니다.

모듈은 커뮤니티에 공개된 지 최소 1년이 지나야 합니다. Python은 하위 호환성에 관해 보수적인 특성이 있으므로, 모듈이 표준 라이브러리에 추가되면 해당 API가 고정됩니다. 이는 모듈이 성숙하고 “성장통”을 거친 뒤에만 표준 라이브러리에 포함되어야 한다는 의미입니다.

모듈은 동종 모듈 중 최고로 평가되어야 합니다. 어떤 것이 표준 라이브러리에 포함되면 제품에서 다른 서드파티 솔루션보다 우선적으로 선택되는 경향이 있습니다. 모듈은 최소 1년 동안 대중에게 공개되어 있었던 만큼, 해당 모듈이 해결하려는 문제에 대해 커뮤니티가 선택하는 최상위 해결책 중 하나로 자리 잡아야 합니다.

모듈 개발은 Python의 인프라로 이전되어야 합니다(즉, 더 이상 Python 외부에서 모듈을 직접 유지보수하지 않습니다). 이렇게 하면 표준 라이브러리에 포함된 코드와 표준 라이브러리 외부에서 릴리스되는 코드(일반적으로 이전 버전의 Python에도 해당 모듈을 제공하기 위한 코드)가 서로 달라지는 것을 방지할 수 있습니다. 또한 코어 팀이 버그 보고서나 변경 사항을 외부 이슈 추적기와 VCS (버전 관리 시스템)로 전달해야 하는 부담도 없앱니다.

모듈 개발에 참여한 사람 중 누군가는 표준 라이브러리에서 해당 모듈을 2년 동안 유지보수하는 데 협력하겠다고 약속해야 합니다. 이는 해당 모듈이 포함된 첫 Python 릴리스에서 접수되는 버그 보고서로 인한 업무 부담을 줄여 다른 코어 팀 구성원을 도울 뿐만 아니라, 모듈의 전반적인 설계가 계속 일관되도록 하는 데에도 도움이 됩니다.

제안 절차

표준 라이브러리에 추가하려는 모듈이 요구 사항을 충족한다면 PEP (Python 개선 제안) 절차에 따라 해당 모듈의 포함을 제안할 수 있습니다. 자세한 내용은 PEP 1을 참조하고, 모듈 포함을 제안하여 이전에 승인된 PEP는 PEP 색인을 참조하십시오.

PEP가 승인되면 모듈 작성자가 기여자 동의서에 서명한 후 해당 모듈이 표준 라이브러리에 추가됩니다.

새 환경 변수 추가하기

환경 변수 이름은 대문자로 작성해야 하며, Python 3.13부터는 가독성과 접근성을 위해 밑줄을 사용해야 합니다.

예를 들어 PYTHONCPUCOUNT 대신 PYTHON_CPU_COUNT를 사용하십시오.

함께 보기: