Python & Code Issue

[python] poetry 설치 가이드 및 에러 해결

cherie-ssom 2024. 11. 21. 12:52

1. Poetry란?

python에서 프로젝트의 의존성 및 가상 환경 관리를 자동으로 처리할 수 있는 도구이다. 

주요 특징으로 python의 표준라이브러리만 사용하며 pyproject.toml 파일로 의존성 관리를 하며, poetry.lock 파일을 이용해 실제로 설치된 버전을 기록하고 고정할 수 있다. 

 

즉, .toml 파일로 의존성의 범위를 설정하고, .lock 파일로 실제로 설치된 버전을 기록할 수 있다.

 

이를 사용하면 각 프로젝트 마다 가상 환경을 자동으로 생성하고 관리할 수 있고, 프로젝트별로 독립적으로 필요한 패키지들을 설치하고 관리하며 패키지 배포 기능도 있어 편리하다. pip를 사용하면 전역적으로 설치가 되기도 하고 여러 패키지 간의 의존성 버전충돌 문제를 직접 관리해야 한다..(이 패키지를 받기 위해 다른 것도 설치되고 삭제할 때도 귀찮고 등등..) 

 

이러한 툴을 사용해보기 전에 일단 설치를 먼저 진행해 보자.

 

2. poetry 설치 순서

아니나 다를까, 항상 설치를 시작하면 시작부터 에러가 발생한다. 

 

설치 후 poetry가 제대로 설치되었는지 확인하기 위해 poetry --version을 확인하니까 다음과 같은 에러가 발생했다.

 

"poetry: 'poetry' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오."라는 에러가 등장했다.

 

이 에러가 나는 경우는 크게 두 가지라고 한다.

우선, 설치가 재대로 되지 않았거나 환경변수가 재대로 설정되지 않았거나.

 

사실 나의 경우 설치가 재대로 안되었던 것이다. 설치 코드를 다르게 입력해서 에러가 난 것이다....

 

일단 나는 다음과 같은 순서를 통해 문제를 해결했다. 

 

1. WindowPowerShell 실행

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

 

관리자 권한으로 실행 후 다음과 같은 명령어를 입력해주면 poetry를 설치할 수 있다.

 

이후에 설치 확인을 위해서 poetry --version을 입력했는데, 나와 같은 에러가 난다면 아래에 있는 코드로 다시 설치를 해보자.(나의 경우 아래의 코드를 먼저 설치를 해서 성공적으로 설치가 됐지만 이후에 버전을 확인하니 계속 에러가 났었다.)

 

아마 microsoft store에서 파이썬을 설치한 경우에는 아래의 코드로 설치해야 하는 듯하다. (그것도 모르고.. 계속,, 이 코드로 시도했었다..)

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

 

이렇게 해서 정상적으로 설치가 되었을 것이다.

 

2. 환경 변수 설정

 

두 개 중 한 개로 설치가 정상적으로 마무리가 되었다면, 아마 설치 경로가 뜰 것이다. (내 기억엔 그랬다.)

설치된 경로를 복사해서 시스템 환경 변수 편집을 눌러주고 환경 변수에 들어가서 path에 추가해 주면 된다.

(속성 > 고급 시스템 설정 > 고급 > 환경 변수)

그리고 사용자 환경 변수에 path를 누르고 편집하기 하면 새로운 경로를 넣을 수 있다. 

 

나의 경우 (%USERPROFILE%\AppData\Roaming\Python\Scripts) 요렇게 추가해 주었다.

(대부분 여기에 생성된다고 하는데,, 당연히 다를 수 있음!)

 

3. 설치 확인

 

이렇게 환경변수 설정까지 끝났으면 powershell을 껐다가 다시 켜준다.

이후에 poetry --version 혹은 poetry 혹은 Get-Command poetry라고 입력했을 때, 정상적으로 출력이 되면 설치가 모두 정상적으로 완료가 된 것이다!

 

만약에,,, 설치 후에 확인을 했는데 나와 같은 에러가 난다면, 다시 1번으로 돌아가서 다른 코드로 한번 설치를 해보고,

그게 아니라면 powershell에서 python을 입력 후 정상적으로 작동하는지 확인을 해보는 것을 추천. 만약에 python이 이상하면 재설치 후에 다시 해보면 될 수도 있당.

 

만약 전부 안된다면,, 처음부터 삭제 후 재설치를 권장한다.

 

3. poetry 사용방법  

1. 프로젝트 생성 및 초기화

poetry new {프로젝트명}

 

예를 들어, poetry new test 이런 식으로 작성한다면 test라는 이름의 새로운 프로젝트가 만들어진다.

만들어진 폴더에 접근을 하려면 cd {프로젝트명} 작성하면 되고, code . 이라고 작성하면 이제 vscode가 켜진다.

 

다음과 같은 화면으로 뜬다.

 

생성된 프로젝트 초기화를 위해서는 아래와 같은 명령어를 입력하면 된다. 

즉, poetry 기반 프로젝트를 만들겠다는 선언이고, 여기에 dependencies, 프로젝트명, 버전 등을 설정하게 되는 것이다.

poetry init

 

* 이때, poetry init으로 새로운 환경을 만들고 나서, 기존에 만들어져 있던 아나콘다 가상환경을 기준으로 설정할 수도 있다.

이미 존재하고 있는 환경을 poetry에서 쓰고 싶다면, 기존 환경에서 사용하는 python 버전을 명시적으로 지정해주면 된다. 

 

아나콘다 프롬프트 키고 > conda activate your_envs_name 후 가상환경을 activate 해주고, where python이라고 하면 파이썬 실행파일 경로를 알 수 있다. 
이렇게 검색하면 본인의 가상환경 경로를 알 수 있다. 그럼 그 경로를 아래와 같이 지정해주면, 원래 있던 환경을 기준으로 만들 수 있다. 

poetry env use your_python_path

 

2. 의존성 설치

 

pyproject.toml과 poetry.lock에 정의된 의존성들을 설치하는 데 사용하는 코드는 아래와 같다.

poetry install

 

프로젝트에서 필요한 의존성 패키지들을 설치한다. 앞서 간단하게 설명했듯이 의존성 목록은 pyproject.toml 파일에 정의되어 있으며, 정확한 패키지 버전을 고정시키는 것은 poetry.lock 파일에서 확인할 수 있다.

(바로 위의 그림에서 볼 수 있듯이 내가 설치한 패키지의 버전과 목록이 .toml 파일에 작성되어 있다.)

 

.toml 파일에 내가 설치하고 싶은 패키지를 작성하고 파일을 저장한 후에 다시 터미널로 돌아와서 poetry insatll 해주면 되는데, 아마 의존성 문제를 확인하라는 빨간 문구가 뜬다. 그렇다면, 아래와 같이 입력해주고 다시 poetry install 해주면 된다.

poetry lock

 

그러면 의존성 확인과 함께 패키지 설치가 완료된다.

 

 

(여기서는 빨간 문구 부분을 실수로 캡쳐하지 못했는데, .toml 파일에 원하는 패키지를 작성 후 터미널로 돌아와서 poetry install 누르면 문구가 뜨고, 그 뒷 부분 부터 수행한 코드이다.)    

 

3. 패키지 설치 및 제거

poetry add {패키지명}
poetry remove {패키지명}

 

필요한 패키지를 설치하는 또 다른 방법이다. 

 

필요한 패키지를 설치할 때는 add, 제거할 때는 remove를 사용하면 된다.

패키지를 설치하려고 할 때, python 버전과 맞지 않다는 에러가 나온다면 다시 vscode의 .toml 파일로 돌아가서 python 버전을 올려주거나 내려줘서 변경 후에 다시 powershell로 돌아와서 설치해 주면 된다.

 

2번 방법을 사용해도 되지만, 3번 방법이 조금 더 간단한 것 같다.

 

4.  현재 패키지 확인

 

현재 프로젝트의 설치된 패키지를 확인할 때는 다음과 같은 코드를 작성해 준다.

poetry show

 

이렇게 해서 간단하게 poetry가 뭔지, 어떻게 설치하고 사용하는지 간략하게 알아보았다.

나도 아직 배우는 단계지만, 잘 쓰면 정말 유용할 것 같다.

(사실 잘 모르는 부분이 많아서 틀린 것이 있다면 알려주세요 ㅠ)

 

하지만 항상 느끼는 것이지만 사용보다는 설치에서 힘을 빼는 것 같다..