2023-01-03 22:02:45

파이썬에서 보통 패키지를 설치하고 의존성을 관리할 때 pip이라는 패키지 관리자를 사용합니다. 저도 얼마 전까지 pip이라는 것만 알고 살았습니다. 하지만, 최근에 poetry라는 친구를 알게 되었습니다. 요즘은 이 poetry가 더 각광받고 있는 것 같습니다. pip는 의존성 문제 해결에 취약한 부분이 있는데, poetry는 조금 더 탁월하게 의존성을 해결해낸다고 합니다. 

 

poetry를 사용하면 pyproject.toml이라는 파일과 poetry.lock이라는 파일을 만나게 됩니다. 오늘은 이 둘의 차이에 대해 설명드리도록 하겠습니다.  

 

1. pyproject.toml

pyproject.toml은 requirements.txt와 같이 설치한 패키지 목록과 호환 가능한 버전 정보를 보여주는 파일입니다. 아래 보시는 것처럼 설치되어 있는 패키지들의 버전 정보가 명시되어 있습니다. 

 

 

pandas의 경우 버전이 ^1.5.2라고 되어 있는데, 이 의미는 1.5.2 이상 2.0.0 미만을 허용한다는 것입니다[1]. 아래 표를 참고하세요.

 

표기 허용되는 버전
^1.2.3 >=1.2.3 <2.0.0
^1.2 >=1.2.0 <2.0.0
^1 >=1.0.0 <2.0.0
^0.2.3 >=0.2.3 <0.3.0
^0.0.3 >=0.0.3 <0.0.4
^0.0 >=0.0.0 <0.1.0
^0 >=0.0.0 <1.0.0

 

 

2. poetry.lock

그렇다면 poetry.lock 파일은 왜 존재하는 것일까요? poetry.lock은 실제로 설치된 패키지의 버전을 보여줍니다. 

 

 

poetry.lock 파일이 없는 상태에서 poetry install로 pyproject.toml 파일에 명시된 패키지들을 설치하면 알아서 의존성 문제를 해결한 상태에서 가장 최신 버전들로 설치를 해줍니다. 하지만, poetry.lock 파일이 있는 상태에서 poetry install 명령을 실행하면 .lock 파일에 명시된 버전들을 설치해줍니다. 따라서 같이 작업하는 개발자들이 확실하게 같은 버전의 패키지들을 설치할 수 있게 도와주는 것이 poetry.lock 파일의 역할입니다. 설치된 패키지들의 버전이 미묘하게 달라도 간혹 골치 아픈 일이 발생할 수 있기 때문입니다. 

 

정리하며

혹시 제가 poetry에 대해 이해한 것에 있어 부족한 부분이 있다면, 지적해주시고 알려주시면 감사하겠습니다. 

참고자료

[1] https://python-poetry.org/docs/dependency-specification/ 

[2] https://velog.io/@hj8853/Poetry%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0