<aside>
</aside>
"어? poetry update 했더니 갑자기 프로젝트가 안 돌아가요!" 😱 이런 끔찍한 상황, 겪고 싶지 않으시죠? 오늘은 Poetry 의존성 관리의 심장부, 버전 제약 조건과 업데이트 전략에 대해 깊이 파고들어 보겠습니다. poetry update와 poetry install의 차이점을 명확히 알고, poetry lock과 poetry sync를 자유자재로 사용하며, 의도치 않은 '재앙'을 막는 방법을 배울 거예요. 의존성 충돌(SolverProblemError)이 발생했을 때 해결하는 탐정 기술도 익혀봅시다!
poetry update와 poetry install의 핵심적인 차이점을 설명할 수 있습니다.poetry show --tree를 사용하여 의존성 관계를 시각적으로 파악할 수 있습니다.poetry lock의 -no-update 기본 동작과 -regenerate 옵션의 차이를 이해합니다.이번 챕터는 코드를 변경하는 대신, pyproject.toml을 직접 수정하고 터미널에서 다양한 Poetry 명령어를 실행하며 그 결과를 관찰하는 실습 위주로 진행됩니다.
install vs update : 안정성과 최신성의 줄다리기두 명령어는 비슷해 보이지만, 아주 중요한 차이가 있습니다.
poetry install: poetry.lock 파일 우선! lock 파일이 있으면, pyproject.toml은 거의 쳐다보지도 않고 lock 파일에 적힌 그대로 설치합니다. 안정성과 재현성을 최우선으로 생각하는 명령어죠.poetry update: pyproject.toml 파일 우선! pyproject.toml에 명시된 버전 범위(^, ~ 등) 내에서 가장 최신 버전의 패키지를 찾아서 설치하려고 시도합니다. 그리고 그 결과를 poetry.lock 파일에 새로 덮어씁니다. 최신 기능을 사용하고 싶을 때 쓰는 명령어예요.graph TD
A["pyproject.toml<br/>fastapi >=0.111,<1.0"]
B["poetry.lock<br/>fastapi == 0.111.0"]
C[".venv"]
subgraph "poetry install"
B --"기준"--> C
end
subgraph "poetry update"
A --"기준"--> B_new["poetry.lock<br/>(fastapi가 0.112.x로<br/>업데이트되면 그 버전으로 갱신)"]
B_new --> C_new[".venv (갱신)"]
end
ℹ️ 참고: Poetry 2.x에서 poetry lock의 기본 동작은 --no-update 입니다(잠겨있는 범위를 최대한 유지). 또한 과거 install --sync는 poetry sync로 대체되었습니다. (Poetry)