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