Poetry를 이용해서 Python Project를 진행했는데, 구성원간의 패키지 버전이 다른 문제와, poetry install
만 해도 poetry.lock이 수정되는 문제가 발생했습니다.
이런 현상으로, poetry에 대한 이해도가 부족함을 느꼈습니다.
poetry에 대한 이해를 높이고, 여러 문제와 그에 맞는 해결방법을 소개하고자 글을 작성하게 되었습니다.
간단하게 Poetry를 왜 사용하는지, 그리고 다른 의존성 관리도구에 비해 어떤 장점이 있는지 소개하겠습니다.
poetry란?
Poetry는 Python 프로젝트의 패키지 관리 및 의존성 관리 도구이다. 기존의 pip과 virtualenv를 대체하여 의존성 관리, 가상 환경 생성, 패키지 배포까지 한 번에 처리할 수 있도록 설계되었습니다.
해당 내용이 주제가 아니므로 간단하게 소개하고 넘어가겠습니다. 궁금한 분들은 더 찾아보시면 좋을 것 같습니다.
주의할 점
- 구성원들은 동일한 poetry version을 사용해야 합니다.
Poetry 설치:
curl -sSL https://install.python-poetry.org | python3 -
Poetry 버전 맞추기: 팀원 간 동일한 Poetry 버전을 사용하도록 설정하는 것이 중요합니다. 특정 버전이 필요하다면 다음과 같이 업데이트하거나 다운그레이드할 수 있습니다.
poetry self update <버전>
패키지 추가 및 관리:
pyproject.toml
을 직접 수정하지 않고 다음 명령어를 사용해야 합니다.poetry add <패키지명>
poetry add <패키지명>@<버전>
-dev
옵션을 추가하여 설치합니다.poetry add <패키지명> --dev
poetry update
poetry install
pyproject.toml 파일은 의존성 버전을 고정하는 경우가 있습니다.
Poetry는 기본적으로 pyproject.toml
에 작성된 버전을 기준으로 패키지를 설치하지만, poetry.lock
에 있는 버전들을 pyproject.toml
에 직접 반영하려면 명령어로 설정할 수 있습니다.
먼저, poetry.lock
에 저장된 모든 패키지와 버전을 확인하려면 다음 명령어를 실행합니다.
poetry show --tree # tree 구조로 설치 패키지 확인
poetry show --no-ansi | awk '{print $1, $2}' # requirments.txt 형태로 확인
한줄 명령어로, pyproject.toml을 생성할 수 있습니다.
poetry export --without-hashes --format=requirements.txt | awk -F '==' '{print $1 " = \"" $2 "\""}' | tee pyproject.toml
poetry self add poetry-plugin-export
poetry install을 할때, 왜 poetry.lock 파일이 수정될까?
Poetry 버전 차이로 인한 poetry.lock
변경
pyproject.toml
을 사용해도 poetry.lock
이 다르게 생성될 수 있습니다.poetry --version # 현재 Poetry 버전 확인
poetry self update <버전> # 특정 버전으로 맞추기
시스템별 의존성 해석 차이
poetry.lock
에는 각 패키지의 해시값이 포함되는데, macOS, Windows, Linux에서 동일한 패키지를 설치하더라도 해시값이 달라질 가능성이 있습니다.poetry install
이 poetry.lock
을 수정하는 경우
poetry install
명령어는 일반적으로 poetry.lock
을 수정하지 않습니다.pyproject.toml
의 패키지 버전 범위가 너무 넓게 설정되어 있으면, Poetry가 최신 버전을 찾으면서 lock 파일이 변경될 수 있습니다.```toml
requests = "^2.0"
```
- 위와 같이 설정하면, `poetry install`을 실행할 때 최신 버전(예: 2.30.0)이 설치될 수 있으며, `poetry.lock`이 수정될 가능성이 있다.
pyproject.toml
에서 패키지 버전을 명확히 지정하는 것이 중요하다.requests = "2.28.1"
poetry install
시 lock이 변경되지 않습니다.개발자의 Poetry 환경 설정 차이
poetry config virtualenvs.in-project true
설정이 다르면, 가상환경이 생성되는 위치가 다를 수 있고, 패키지가 올바르게 설치되지 않을 가능성이 있다.poetry install
실행 시 다른 환경이 적용되면서 poetry.lock
이 다르게 기록될 수 있다..venv
를 사용하도록 일관되게 설정한다.poetry config virtualenvs.in-project true
이전 가상 환경이 반영되는 문제
# 기존 가상환경 조회
peotry env list
# 기존 가상환경 제거
poetry env remove [some-env]
# 새로운 가상환경 생성
poetry install
Poetry를 사용하여 Python 프로젝트의 패키지 및 버전 관리를 체계적으로 수행하면 환경 불일치, 의존성 충돌, 배포 실패 등의 문제를 방지할 수 있습니다. 하지만 올바르게 설정하지 않으면 팀원 간 poetry.lock
이 다르게 생성될 수 있는 문제가 발생할 수 있습니다.
Poetry 버전 통일
poetry --version # 현재 Poetry 버전 확인
poetry self update <버전> # 특정 버전으로 맞추기
패키지 버전 고정
pyproject.toml
에서 패키지 버전을 명확히 지정한다.requests = "2.28.1"
운영 체제(OS) 차이 해결
Poetry 설정 통일
.venv
를 사용하도록 설정하여 일관성을 유지한다.poetry config virtualenvs.in-project true
가상 환경 문제 해결
# 기존 가상환경 조회
peotry env list
# 기존 가상환경 제거
poetry env remove [some-env]
# 새로운 가상환경 생성
poetry install
Poetry를 올바르게 활용하면 패키지 의존성을 안정적으로 관리할 수 있으며, 협업 시 발생하는 버전 충돌 문제를 최소화할 수 있습니다.