Intern | 의존성 관리자 Poetry

김민철·2021년 2월 18일
0

인턴

목록 보기
1/3
post-thumbnail

프로젝트를 진행하다 보면 여러 패키지들을 설치하게 됩니다. 만약 내가 진행하는 프로젝트가 2개 있고, 한 프로젝트에선 A패키지를 1.0 버전을 사용하고, 다른 패키지에선 1.1 버전을 사용해야 된다면 어떻게 설치해야 될까요 ?

이런 문제를 해결하기위해 가상환경(virtual environment)을 만들어줍니다. 가상환경이란 독립된 실행공간을 의미합니다. 각 프로젝트에 맞는 가상환경을 만들어 패키지 버전을 관리할 수 있습니다. 각 가상환경들은 독립이라 다른 프로젝트에 영향을 주지 않습니다.

poetry 는 의존성 관리를 도와주는 툴 입니다.
'의존성 관리' 란 프로젝트가 사용하는 라이브러리를 별도로 관리하는 것이 의존성 관리 입니다. 프로젝트에 사용중인 라이브러리는 버전이 업데이트가 될 수 있습니다. 또한 이 라이브러리들이 의존하는 다른 라이브러리가 존재할 수도 있습니다. 이런걸 매 번 확인하기가 어렵고 시간적으로 낭비입니다.

그럼 의존성 관리를 하지 않으면 어떻게 될까요 ?
협업하는 다른 개발자들이 실행할 수 없습니다. 의존성이 맞게 설치되어 있지 않으면 에러가 발생합니다.
그렇기 때문에 의존성 관리가 필요합니다.

Why poetry ?

기존의 의존성 관리로 사용하던 pip는 항상 전역에 모든 라이브러리를 설치합니다. 하지만 poetry 는 프로젝트 별로 라이브러리 설치합니다. 즉 프로젝트 별로 가상환경을 생성할 수 있고, 의존성 관리도 할 수 있습니다.

그러면 간단히 poetry를 사용해보면서 알아보겠습니다.
poetry 는 pyproject.toml (requirements.txt 정도로 생각) 이라는 의존성 관리 파일로 개발환경에 필요한 라이브러리를 관리합니다.

pyproject.toml은 프로젝트를 만들면 생성됩니다.

#poetry 프로젝트 만드는 명령어
poetry new project-name

이미 존재하는 프로젝트에서는

poetry init

위 명령어를 사용해 환경을 만듭니다.

iam 이라는 프로젝트를 만들었습니다.
프로젝트 디렉토리 구조를 보겠습니다.

pyproject.toml 파일이 생겼습니다. 이제 가상환경이 만들어진걸까요 ?
아직 아닙니다. 관리할 라이브러리가 추가되어야 가상환경이 생성됩니다.

poetry add ~ 명령어로 필요한 라이브러리를 추가했습니다. 사진의 2번째 줄을 보면, 가상환경이 이때 생성된다는걸 볼 수 있습니다.

pyproject.toml 파일이 프로젝트에 사용되는 라이브러리를 모아둔 파일이라고 했습니다. 그럼 이 라이브러리들이 의존하는, 라이브러리들은 어느 파일에 모아질까요 ?
바로 poetry.lock 파일에 모아집니다.

위 사진은 iam 이라는 프로젝트를 만들고 ls -al을 통해 확인한 파일들입니다. 아직 의존성관리에 django를 추가하기 전입니다.

다음은 poetry add django 후 의 상태를 보겠습니다.

아까와 다르게 poetry.lock 파일이 생겼습니다. 즉, 관리할 파일이 생겨야 poetry.lock이 생성됩니다.

poetry show 명령어를 통해, poetry.lock에 추가되어 있는 라이브러리들을 볼 수 있습니다. 이 라이브러리들이 현재 프로젝트에 필요한 모든 라이브러리 입니다. 이들은 제가 추가한 django와 django가 의존하는 라이브러리 들입니다.

poetry show --tree 명령어를 통해 구조를 자세히 볼 수 있습니다.

가상환경은 poetry shell 명령어로 진입할 수 있습니다.

가상환경에 들어와 python3 의 위치를 찾은 모습입니다. 확실히 가상환경이라는 것을 알 수 있습니다.

설정을 다 했으면, 까먹지 말고 peotry.lock 파일을 협업하는 개발자에 주면 됩니다.

poetry install 

명령어를 사용하면 poetry.lock 을 참고하여 라이브러리를 설치하게 됩니다. 즉, 내가 설정한 개발환경과 동일한 환경을 만들 수 있습니다!

정리

여러 개발자들과 협업 프로젝트를 진행하려면, 의존성 관리가 필요합니다. poetry를 사용하면, 가상환경과 의존성을 동시에 관리할 수 있습니다.


참고
공식문서
블로그 글 - 의존성 관리 도구

0개의 댓글