Poetry Libraries

Poetry는 파이썬 라이브러리를 효율적으로 관리하고 배포할 수 있도록 지원하는 도구로 라이브러리를 설치 가능하게 만들기 위해 다음과 같은 절차를 따를 수 있다.

버전 관리

모든 프로젝트에 PEP 440을 준수하는 버전 번호를 요구한다. 버전 번호의 일관성을 유지하고, 패키지 관리 시스템과의 호환성을 보장한다.

  • 1.0.0-hotfix과 같은 형식은 PEP 440과 호환되지 않는다.
  • 1.0.0-post1 또는 1.0.0.post1과 같은 형식을 사용할 수 있다.

PEP 440

  • 파이썬 패키지의 버전 식별과 의존성 명시를 의한 표준을 정의한 문서.
  • 파이썬 패키지의 버전 번호를 일관되게 관리하고, 패키지 간의 의존성을 명확하게 지정하여 호환성을 보장하는 데 목적이 있다.
  1. 버전 식별자 형식
    1
    
    [N!]N(.N)*[{a|b|rc}N][.postN][.devN]
    

각 요소의 설명 - N!: 에포크(epoch) 번호로, 버전 체계의 중대한 변경을 나타냄. - N(.N)*: 릴리스 번호로, 주 버전, 부 버전, 패치 버전 등을 포함. - {a|b|rc}N: 사전 릴리스(pre-release)로, 알파(a), 베타(b), 릴리스 후보(rc) 등을 나타낸다. - .postN: 포스트 릴리스(post-release)로, 버전 이후의 수정 사항을 나타낸다. - .devN: 개발 릴리스(development release)로, 개발 중인 버전을 나타낸다.

  1. 버전 비교
    버전 번호를 비교하는 명확한 규칙을 제공
    Final release는 pre-release보다 높은 우선 순위를 가진다.
    Alpha는 Beta보다 낮고, Beta는 Release Candidate보다 낮다.
    Post-release는 해당 release보다 높은 우선순위를 가진다.
  2. 의존성 명세
    ==: 특정 버전과 일치
    !=: 특정 버전과 불일치
    <, <=, >, >=: 버전 범위 지정
    ~=: 호환되는 버전

락 파일 관리

라이브러리의 경우, poetry.lock 파일을 커밋할지 여부는 선택 사항으로 이 파일을 커밋하면 팀원들이 동일한 의존성 버전을 테스트할 수 있어 일관성을 유지할 수 있다.
락 파일은 해당 라이브러리를 의존하는 다른 프로젝트에는 영향을 미치지 않는다.
락 파일을 커밋하지 않기로 하면, .gitignore 파일에 추가하여 버전 관리에서 제외할 수 있다.

패키징

라이브러리를 배포하기 전 패키징을 해야 한다.

1
$ poetry build

이 명령어는 소스 배포 형식인 sdist와 컴파일된 패키지 형식인 wheel 두 가지 형식으로 패키지를 생성한다.
poetry는 패키지 빌드 시 자동으로 일부 메타데이터 파일을 포함시킨다.
예를 들어, LICENSE파일은 wheel.dist-info 디렉토리에 포함되며, sdist의 루트 폴더에도 포함된다.

PyPI에 배포

라이브러리를 PyPI에 배포하려면 다음 명령어를 사용한다.

1
$ poetry publish

이 명령어는 라이브러리를 패키징하고 PyPI에 업로드한다. (단, PyPI에 등록된 사용자이며, 자격증명이 올바르게 구성되어 있어야 한다.)
publish 명령어는 기본적으로 빌드를 수행하지 않으므로, 빌드와 배포를 함께 수행하려면 --build 옵션을 추가해야 한다.

1
$ poetry publish --build

개인 저장소에 배포

팀 내에서만 사용할 라이브러리를 배포하려면 개인 저장소를 활용할 수 있다.
이를 위해 먼저 개인 저장소를 전역 저장소 목록에 추가해야 한다. 저장소를 추가한 후, 다음 명령어로 배포할 수 있다.

1
$ poetry publish -r my-repository

참고 및 출처

Poetry

Libraries | Documentation | Poetry - Python dependency management and packaging made easy