poetry에서 package를 specific version 으로 받고 싶으면 어떻게 해야 할까요? 실제로 poetry update로 패키지들을 최신 버전으로 업데이트 한 이후에, restframework.serializer가 NullBooleanField가 없어서 swagger, redoc이 켜지지 않는 이슈가 발생했었습니다. 이 부분을 핫픽스 해야 했습니다. 어떤 패키지가 업데이트 되면서 문제를 일으켰겠구나. 정도만 안 상태입니다.

 

 그 당시에, 왜 문제가 발생했는지 파악해 본 결과 djangorestframework 라는 패키지가 3.14로 업데이트 되면서 발생한 것이였고, 이를 downgrade 해야 했습니다.

 


 평소처럼 poetry update를 실행했습니다.

 

 그러면, 몇 개의 패키지들이 최신 버전으로 업데이트됨을 볼 수 있는데요. 이 중, 그 당시 문제를 일으켰었던 djangorestframework가 3.14.0으로 업데이트 된 게 보입니다.

 

 

 poetry export --without-hashes -o requirements.txt로 어떤 패키지들을 깔아야 하는지를 requirements.txt로 export 시킵니다.

 

 

 그러면, restframework가 3.14.0 버전을 깔아야 한다. 라는 사항이 보입니다.

 


 이전 버전인 3.13.1로 낮춰 보겠습니다. poetry add djangorestframework==3.13.1 을 입력하시면, 해당 패키지를 3.13.1 버전으로 poetry 가상 환경에 설치합니다. updating 어쩌고가 보이는데요. 3.14.0 -> 3.13.1로 다운그레이드가 되었음을 볼 수 있어요. 이는 제가 dependency specification에서 정확히 일치하는 exact requirements인 ==를 썼기 때문입니다.

 

 

 다시 poetry export --without-hashes -o requirements.txt를 입력해 보겠습니다. 그리고, requirements.txt를 확인해 보겠습니다.

 

 그러면 아까와는 다르게 restframework가 3.13.1로 깔렸음을 볼 수 있습니다. 이 부분에 대한 조금 더 자세한 정보는 문서를 참고하시면 좋을 듯 합니다.

 


 여담. 문제를 일으켰던 버전이 3.14.0이라고 해 보겠습니다. 현재 버전인 3.13.1버전보다 최신이면서, 3.14.0 버전이 아닌 버전을 깔고 싶다면, 위와 같이 입력하시면 됩니다. >=3.13.1,!=3.14.0. 이 말인 즉슨 3.14.0과 같지 않으면서 3.13.1 버전 이상임을 의미합니다.

 

 

 poetry add를 한 후에, poetry export --without-hashes -o requirements.txt를 하였습니다. 다음에, djangorestframework를 찾아보니, ==3.13.1 이라고 되어 있습니다. 그러면, 3.14.0이 아닌 최신 버전은 3.13.1이라고 해석할 수 있습니다.