저는 poetry update 명령이, 패키지들을 업데이트 하는 명령어 인줄 알았습니다. 사실 아닙니다. toml 파일과 lock 파일의 패키지 버전을 동기화 합니다. 간단하게 알아보도록 하겠습니다.
poetry update 명령어
먼저, 해당 명령어의 설명을 봅시다. 종속성을 pyptoject.toml의 정보를 보고 업데이트 한다고 되어 있습니다.
lock 파일을 봅시다. pillow의 version이 10.0.0이라고 되어 있습니다. according to the toml 파일입니다. toml 파일을 바탕으로 한다는 의미는, 이 파일이 업데이트 된다는 의미입니다.
toml 파일을 보면, pillow가 10.0.0이라고 되어 있어요. lock 파일하고 toml 파일의 이미지 처리 패키지 버전 정보가 일치합니다. 이 경우에는 별 문제가 없습니다.
그런데, toml 파일의 pillow 패키지 정보가 10.3.0으로 업데이트 되었습니다. 이는 무엇을 의미하는가? 해당 버전이 10.3.0 버전 이상임을 의미합니다. 상황은 아래와 같이 그려집니다.
버전 정보가 서로 맞지 않습니다. 심지어 10.0.0은 ^10.3.0 조건에 맞지 않습니다. lock을 toml에 맞춰서 업데이트 해 봅시다. poetry update 명령어를 입력해 보겠습니다.
그러면, 해당 패키지가 10.0.0에서 10.3.0으로 업데이트 됨을 알 수 있습니다. 이제 업데이트 된 lock 파일을 보도록 하겠습니다.
10.3.0으로 업데이트 되었음을 알 수 있습니다. 정리하면 update 명령은, toml 파일의 패키지 req 정보를 바탕으로 lock 파일의 package 정보를 업데이트 합니다.
최신 버전으로 업데이트 하기
따라서, 패키지를 최신 버전으로 업데이트 하는 명령은 아님을 알 수 있습니다. 왜? toml 파일에 있는 정보가 최신 버전이 아니면 아무 의미 없기 때문입니다. 패키지를 최신 버전으로 업데이트를 해 봅시다.
pillow 9 버전은 이 글을 쓰는 시점에서, 오래된 버전입니다. toml 파일에 해당 패키지가 9.5.0 이라는 정보가 들어가 있습니다.
lock 파일 역시 마찬가지입니다. 이 경우, 업데이트 명령을 수행하면 어떻게 될까요? 10.3.0 버전으로 업데이트 될까요? 아닙니다.
toml 정보와 lock의 패키지 정보가 맞습니다. 업데이트 할 이유가 없습니다. toml 정보에 따르면 Pillow가 9.5.0 이였는데요. 설령 최신 버전이 아니더라도 업데이트 할 이유가 없습니다. 따라서, 실제로 명령어를 수행하면, 아래와 같은 결과가 나오게 됩니다.
이상한 것 같지만, 사실 당연합니다. 단순히 update는 toml의 정보에 따라 lock 파일에 쓰기 때문입니다. 오히려, Pillow를 최신 버전으로 업데이트 하려고 했다면, 오히려 poetry add Pillow@latest 명령어를 썼어야 합니다.
latest는 최신 버전을 의미합니다.
그러면, pillow가 10.3.0 버전이라는 정보가 lock 파일과 toml 파일에 쓰여지게 됩니다.