poetry는 파이썬 프로젝트의 의존성 관리와 빌드 및 배포를 통합하여 관리하는 도구이다.
즉 pip+requirements.txt+setup.py+venv의 역할을 한 번에 처리할 수 있는 고급 패키지 매니저이다.
pyproject.toml파일 하나로 모든 패키지의 의존성을 관리하고 poetry add명령으로 지정한 패키지를 설치함과 동시에 python버전을 분석하여 가장 안정적인 버전을 선택해주고 다른 의존성들과의 버전 충돌을 방지해준다.
또한 설치된 패키지들의 정확한 버전 정보들을poetry.lock에 기록하여poetry install로 lock파일 기준으로 환경을 동기화해서 다른 개발자들과 개발환경을 완전히 동일하게 재현할 수 있다.
이는 기존에 pip freeze > requirements.txt과 pip install requirements.txt를 사용할 때 발생하던 팀원들간 버전 불일치를 방지한다.
poetry는 프로젝트 생성 시venv를 자동으로 생성하고 프로젝트별로 독립된 환경을 제공(poetry run)한다.
이는 서로다른 프로젝트에서 동일한 패키지 버넞 충돌 문제를 방지해주고 운영체제 전체의 파이썬 환경을 오염시키지 않는다.
수동으로python -m venv venv입력 후 activate스크립트를 실행할 필요없이 프로젝트 단위로 일관된 실행환경을 자동 구성해준다.
PyPi는 파이썬 소프트웨어 패키지를 올리는 저장소로 다양한 패키지와 라이브러리를 다운받을 수 있는 곳으로 pip명령과 함께 사용되어 패키지를 쉽게 설치할 수 있다. pip명령을 으로 다운로드 받았던 수많은 패키지들이 바로 이 PyPi에서 제공된 패키지들이었다. 물론 PyPi에 나의 패키지를 업로드할 수도 있는데
먼저 poetry build 명령을 실행하면, 프로젝트를 wheel(.whl)과 source(.tar.gz) 형태로 패키징하여 dist/ 폴더에 생성한다.
이후 PyPI 계정을 만들고 API 토큰을 발급받은 뒤 다음 명령으로 업로드할 수 있다.
poetry build
poetry config pypi-token.pypi <발급받은_토큰>
poetry publish
.whl 과 .tar.gz
poetry build를 실행하면 생성되는 두 파일들은 무슨 파일일까?
.whl은 내가 배포할 패키지의 바이너리 코드,
.tar.gz는 배포할 패키지의 소스 전체를 압축한 파일이다.
여기서 소스 전체에는 작성한 .py코드, setup.py, pyproject.toml, README, LICENSE 혹은 C 확장 모듈 코드 등이 포함될 수 있다. 미리 바이너리로 빌드를 해둔.whl을 사용할 수 없는 OS를 사용하는 경우 .tar.gz를 내려받아 로컬에서 빌드해 사용한다고 한다.
무튼 위의 과정을 통해 나만의 패키지를 PyPI에 등록하면, 누구나 아래처럼 설치할 수 있다.
pip install mypackage
즉, Poetry는
의존성 관리(pip, requirements.txt) -> poetry add, poetry install, pyproject.toml, poetry.lock
가상환경 관리(venv) -> poetry shell, poetry run
빌드 및 배포(setup.py, twine) ->pyproject.toml, poetry build, poetry publish
를 모두 통합하여, 개발부터 배포까지 하나의 일관된 워크플로우로 제공하는 현대적인 파이썬 패키지 관리 도구이다.