python PDM 사용 후기
by UnderstandPython의 환경 및 패키지 관리 툴은 다음과 같이 분류할 수 있다.

- Environment management: Python 환경 격리 도구
- Package management: Python 패키지 의존성 관리 도구
- Python version management: Python 버전 관리 도구
- Package building: Python 패키지 화 도구
- Package publishing: Python 패키지 배포 도구
밴다이어그램에서 볼 수 있는 것처럼 Python 환경/패키지 관리를 위한 다양한 도구들이 있다. 나는 이 중에서 pyenv +pdm을 활용하여 Python 프로젝트를 진행하고 있다. 이글에서는 이 중에서 같은 위치에 있는 PDM을 약 2년간 사용한 후기를 작성해보았다.
기존에는 위 다이어그램에서 PDM의 바로 옆에 있는 Poetry를 사용했다. Poetry는 많은 사람들이 사용하고 있는 가장 오래된 Python 환경 및 패키지 관리 툴이다.
하지만 Poetry의 의존성 설치 속도가 점점 느려진다는 느낌을 받았다. 또한 지속적 통합 (CI) 툴을 개발할 때 Poetry의 동작이 일정하지 않은 이슈들이 지속적으로 나왔다. 그러던 중 2년 전에 PDM이 나온 것을 보고 한번 테스트해 보았다. 나는 속도와 편의성 측면에서 Poetry보다 PDM이 더 만족스러웠고 개인 프로젝트에서는 PDM을 사용하고 있다.
아래는 2년 전 성능 측정 자료인데 다른 도구에 비해서 PDM의 초기 의존성 설치 속도가 현저히 빠른 것을 확인할 수 있다.
경험상으로도 PDM이 Poetry에 의존성 설치 속도가 훨씬 빠르다는 느낌을 받았다.
CI에서 사용할 때도 Poetry에 비해 일관적인 결과가 나왔다. 현재는 Github Action에서 사용하는 방법이 문서화가 되어 더욱 쉽게 작성할 수 있다.

또한 당시 Poetry는 pyproject.toml을 지원하지 않았다 (현재는 지원한다). 많은 formatter, linter와 같은 개발 툴들이 자신만의 configuration 파일을 사용했다. 하지만 pyproject.toml을 사용하면 이러한 configuration을 하나의 파일에서 모두 지정할 수 있다.
이를 제대로 지원하기 시작한 툴이 PDM이다.
개인적으로 만족스러웠던 것 중 하나는 python 가상환경의 위치를 설정할 수 있다는 것이다. PDM에서 가상환경의 위치를. pyenv/versions 안으로 설정하면 pyenv에서 PDM이 생성한 가상환경을 관리할 수 있다. autoenv를 사용하면 poetry run
, pdm run
과 같은 거추장스러운 문법을 생략하고 바로 프로그램을 실행시킬 수 있다.
다만 아쉬운 점은 pip의 모든 기능을 지원하지 않는다는 것이다. 특정 패키지들은 설치할 때 소스를 바꿔주거나, 인터넷에서 바로 설치할 때가 있다. 이런 패키지들의 의존성들은 PDM에서 관리할 수 없다. 예를 들어 m시리즈 맥북에서는 pytorch-gpu를 설치할 때 추가적인 명령어들이 필요하지만 PDM은 이를 지원하지 않는다. 따라서 이런 프로젝트에 대해서는 사용하기가 어렵다.
또한 최근에는 성능도 Poetry가 더 빠르다는 결과도 있다. 아래는 uv라는 Rust기반 Python 패키지 관리 툴에서 비교한 성능인데 여기서는 Poetry가 PDM에 비해 약 2~3배 정도 빠르다고 한다.

그럼에도 불구하고 일부 도메인을 제외하고는 충분히 사용할만하다고 생각한다. 이미 Poetry를 사용하고 있다면 굳이 바꿀필요는 없지만, 새로 시작하는 프로젝트에서 PDM을 사용하는 것도 나쁘지 않다고 생각한다.
+) 최근에는 uv라는 package management가 나왔는데 이것도 같이 활용해서 오랜만에 Python 환경 세팅을 바꿔볼 생각이다.

블로그의 정보
BookStoreDiary
Understand