Poetry 설치

Poetry은 "https://install.python-poetry.org/"에 있고, 파이썬으로 excute가능하게 되어있어서, Linux, MacOS, WSL에서아래와 같은 명령어로 설치가능합니다.

$ curl -sSL https://install.python-poetry.org | python3 -

// 환경변수까지 추가합니다.
// .bashrc에 "excutebable binary을 바로 환경변수로 추가합니다"
$ vi ~/.bashrc

// vi에서 아래를 추가
"export PATH="/home/heon/.local/bin:$PATH"

$ poetry --version
Poetry (version 1.8.3)

 

TOML(Tom's obvious Minimal Language) 포맷

TOML파일은 structured data을 저장하는 목적으로 JSON포맷과 달리 여러 기능을 지원합니다.

  • key-value로 이뤄져있습니다.
  • 사람이 쉽게 읽고 쓸 수 있는 형태로 디자인되었습니다.
  • 간단한 구조를 가지고 있고, 주석 기능이 포함되어 있습니다.
  • TOML은 각각의 설정 항목을 [...] 섹션으로 그룹화합니다.  

아래와 같은 형태로 []을 이용하여 그룹화가 가능합니다. [too.poetry]은 Poetry프로젝트의 metadata을 저장하는 부분입니다.  이후에 [tool.poetry.dependencies]로 필수프로젝트의 의존성을 설치하고,  [tool.poetry.dev-dependencies]은 개발에 필요한 부분만 의존성으로 설치할 수 있습니다. 개발이기 때문에, 배포환경(production)에서는 필요하지 않는 것들이 포함될 수 있어 분리할 수 있습니다.

[tool.poetry]
name = "example-project"
version = "1.0.0"
description = "This is an example project"
authors = ["John Doe <john@example.com>"]

[tool.poetry.prod]
python = "^3.8"
requests = "^2.25.1"

[tool.poetry.dev]
pytest = "^6.2.2"

 

파이썬 프로젝트가 이미 있는경우 poetry로 초기화: poetry init

보통 개발이 충분히 진행된 경우에 poetry로 배포를 염두해서 작업하기에, 파이썬 프로젝트가 이미 있을 수 있습니다. 이런 경우 다음의 명령어로 초기화해서 사용할 수 있습니다. 초기화하는 경우 toml파일의 간략히 만들어줍니다.

$ poetry init

 

$ cat pyproject.toml 
[tool.poetry]
name = "testname"
version = "0.2.1"
description = ""
authors = [".... hoheon0509@gmail.com>"]
license = "MIT"
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.8"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

 

종속성 명시하기

poetry에서 종속성을 명시하는 부분은 "[tool.poetry.dependencies]"을 명시하면됩니다. 이 명시된 종속성들은 2가지의 리포지토리에서 검색해서 설치하게됩니다. 

  1. tool.poetry.source: tool.poetry.source에 명시하면 명시된 소스에서 종속성을 설치합니다.
  2. PyPI: 디폴트로 PyPI에서 검색해 설치합니다.

최신버전을 설치하고싶으면 "*"로 명시합니다.

[tool.poetry.dependencies]
python = "^3.8"
fastapi = "*"

또는 CLI을 이용해서 추가가 가능합니다. 추가하면 추가하면서 설치도 동시에 진행됩니다.

$ poetry add pytorch

 이 때, 설치 환경에 따른 지정도 가능합니다.

$ poetry add torch --extras dev

 

 

 

개발/배포 환경에 따른 종속성설치: poetry install 

poetry은 여러 옵션이 있어 상황에 맞게 설치할 수 있습니다.

  • --no-root: 루트 패키지를 매번 설치할 것인지 여부("--no-root" 지정시 스킵됨)
  • --extras [group명]: 그룹명 맞춰서 설치할 수 있습니다.

 

// 필수종속성만 설치하는 경우
$ poetry install

// 필수 + 개발환경 종속성
poetry install --extras dev

// 필수 + 배포환경 종속성
poetry install --extras prod

--https://python-poetry.org/docs/#installing-with-the-official-installer

 

Introduction | Documentation | Poetry - Python dependency management and packaging made easy

If you installed using the deprecated get-poetry.py script, you should remove the path it uses manually, e.g. rm -rf "${POETRY_HOME:-~/.poetry}" Also remove ~/.poetry/bin from your $PATH in your shell configuration, if it is present.

python-poetry.org

 

poetry run 명령

poetry을 이용해서 의존성을 설치한 python 스크립트를 실행할 수 있습니다.

poetry run pytest

 

단점

1. poetry에서 파이썬 버전을 아래와 같이 지정한 경우, 파이썬 버전을 만족하는 파이썬 인터프리터가 설치되어있어야합니다.  poetry가 직접 이 파이썬 인터프리터를 설치해주지 않습니다. 따라서, 가상환경을 이용해서 파이썬 인터프리터 버전을 미리 사전에 맞추어야합니다.

 

 

poetry로 가상환경에서 의존성설치하기

$ poetry shell

poetry shell 명령어는 Poetry를 사용하여 관리되는 가상환경을 활성화하는 명령어입니다. 이를 통해 사용자는 프로젝트에 필요한 의존성이 설치된 가상환경에서 작업을 할 수 있습니다.

이 명령어를 이용하면 아래와 같은 기능을 이용할 수 있습니다.

  1. 가상환경 활성화: poetry shell 명령어를 실행하면, Poetry가 해당 프로젝트에 대해 생성한 가상환경이 활성화됩니다. 이는 가상환경 내의 Python 인터프리터와 패키지들을 사용할 수 있게 해줍니다.
  2. 쉘 시작: 활성화된 가상환경 내에서 새로운 쉘이 시작됩니다. 이 쉘에서는 pyproject.toml 파일에 정의된 의존성이 자동으로 적용됩니다.

poetry shell로 가상환경을 만들었다면, 이미 작성된 toml파일을 이용해서, 의존성을 설치해주면 됩니다.

$ poetry install

poetry 가상환경이 활성화되어있기 때문에, 이 의존성을 poetry 가상환경내에 설치가 됩니다.

실제로, 파이썬의 의존성의 주소를 확인해보면 다음과 같습니다.

>>> import torch
torch.__version__

>>> torch.__version__
'2.3.1+cu121'

>>> torch.__path__
['/mnt/unity_ssd/home/heon_slurm/.cache/pypoetry/virtualenvs/seedp-project-wf8_zn9U-py3.11/lib/python3.11/site-packages/torch']

 

가상환경의 주소는 아래와 같습니다. 이 주소에 디렉토리에 접근이 가능하다면, poetry 가상환경을 다른 노드나 다른 사용자가 사용할 수도 있습니다.

$ poetry env info --path
/data/home/heon_slurm/.cache/pypoetry/virtualenvs/seedp-project-wf8_zn9U-py3.11
source [poetry_env_path]/bin/activate

 

환경 삭제

poetry env list라는 명령어로 환경 목록을 출력합니다.

$ poetry env list

 

그리고 `poetry env remove [환경명]`의 명령어를 이용해 삭제합니다.

$ poetry env remove [env_name]
반응형

+ Recent posts