poetry 대신 rye를 사용하자

생산성 향상을 위해

created at: 2024-03-02


IMPORTANT

이제 rye 대신 uv를 사용하세요. 자세한 내용은 이곳을 확인하세요.

poetry도 충분히 좋은 도구다. 하지만

지난 3년간 poetry는 내가 수행하고자 하는 바를 대부분 충족시켰다. 가상환경 관리를 포함한 의존성 관리 및, 파이썬 프로젝트 관리에 있어서 대부분 만족스러웠다.

하지만 몇가지 아쉬운 점이 있다.

표준 문법을 준수하지 않는다.

poetryPEP621로 정의된 pyproject.toml 문법을 준수하지 않는다.

어떻게 보면 당연하다. poetryPEP621보다 먼저 탄생한 프로젝트다.

당시 문제되었던 의존성 문제를 해결하기 위한 자체 문법을 적용했고, 이제는 그 문법이 비표준이 된 것 뿐이다. 하지만 표준 문법이 정의된지 꽤 오랜 시간이 지났고, 표준 문법을 지원하는 다른 도구(pdm이나 pip-tools, uv 등)가 많이 탄생했다.

3년 전 부터 표준 준수에 대한 요청이 지속적으로 있었고, 이에 대한 노력이 없었던 것은 아니지만, 아직 특별한 결실은 맺지 못했다.

기존에 poetry를 사용하던 많은 프로젝트가, 점진적으로 다른 도구로 이동하는 모습이 보이는 만큼, 빠른 대응이 필요한 순간이다.

외부 의존성을 필요로 한다.

poetry는 가상환경을 관리하기 위한 명령어를 제공한다. 하지만 python 버전에 대한 관리는 외부 도구를 사용해야만 한다.

대표적으로 pyenv가 있는데, pyenv로 특정 버전의 python을 설치하고, 해당 python을 작업 영역의 인터프리터로 지정하고, poetry에서 가상환경으로 사용할 인터프리터를 지정하면 된다..

쉽지만... 뭔가 뭔가다.

all in one을 목표로 하는 rye

rye는 그러한 문제를 한번에 해결하고자 탄생한 프로젝트다.

프로젝트의 메인테이너인 mitsuhikoflask, jinja, click 등 이름만 들어도 바로 알 수 있는 프로젝트를 관리하고 있는, 검증된 개발자다.

NOTE

현재는 ruff를 개발한 astral-sh의 지원을 받고 있다.

기존의 venv나 의존성 관리 등 파편화된 python 환경 관리 도구에 대해, rustcargo와 같은 표준화된 도구가 필요하다고 느낀 것으로 보이는데, 이에 대한 토론 결과, rye를 공개하고 유지하기로 결정했다.

python 버전도 rye가 관리한다.

pyproject.toml에 정의된 python 버전을 확인하고, 조건에 맞는 python 버전을 사용한 가상환경을 생성하고 관리한다.

당연하게도, 사용자가 원한다면 특정한 버전을 지정하여 사용할 수도 있다.

rye pin 3.9.18
# pinned 3.9.18 in /Users/username/my-project

의존성 관리는 pip-toolsuv를 사용한다.

다만 내부적으로 사용할 뿐, 대부분의 사용자는 이에 대해 신경쓸 필요가 없다. pip-tools를 사용할지, uv를 사용할지 선택만 하면, 나머지는 알아서 설치하고 알아서 사용한다.

pip-tools는 안정적이지만 상대적으로 느리고, uv는 아주 빠르지만 아직 안정화되지 않았다.

패키징은 buildtwine을 사용한다.

둘 다 PyPA에서 관리하는 표준 도구다. PyPA에서 관리하는 다른 도구로는, pipvirtualenv등이 있다.

당연하지만, 대부분의 사용자는 이에 대해 신경쓸 필요가 없다.

pipx를 대신할 수도 있다.

rye add가 아닌 rye install로 패키지를 설치하면, 그 패키지는 독립된 환경에, 글로벌 환경에서 사용가능한 상태로 설치된다.

장점만 있는건 아니다.

한번에 모든 것을 관리하는 것은 좋지만, 장점만 있는 것은 아니다. 대표적으로 플랫폼 독립적인 lock 파일을 제공하지 않는다.

NOTE

poetrypdm은 플랫폼 독립적인 lock 파일을 제공한다.

이는 pip-toolsuv를 사용하기 때문에 생긴 문제라고 볼 수도 있다.

써보면 확실히 좋다

직접 써보면 느끼겠지만, 기존 관리 툴에 비해서 표준을 준수하며, 편하고, 빠르다.

게다가 믿을 수 있는 메인테이너 주도 하에 관리되고 있다.

프로덕션 환경에 바로 적용하기는 어렵겠지만, 나중에는 poetry를 대체할 단 하나의 표준이 될 수 있을수도.