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가지의 리포지토리에서 검색해서 설치하게됩니다.
- tool.poetry.source: tool.poetry.source에 명시하면 명시된 소스에서 종속성을 설치합니다.
- 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
poetry run 명령
poetry을 이용해서 의존성을 설치한 python 스크립트를 실행할 수 있습니다.
poetry run pytest
단점
1. poetry에서 파이썬 버전을 아래와 같이 지정한 경우, 파이썬 버전을 만족하는 파이썬 인터프리터가 설치되어있어야합니다. poetry가 직접 이 파이썬 인터프리터를 설치해주지 않습니다. 따라서, 가상환경을 이용해서 파이썬 인터프리터 버전을 미리 사전에 맞추어야합니다.
poetry로 가상환경에서 의존성설치하기
$ poetry shell
poetry shell 명령어는 Poetry를 사용하여 관리되는 가상환경을 활성화하는 명령어입니다. 이를 통해 사용자는 프로젝트에 필요한 의존성이 설치된 가상환경에서 작업을 할 수 있습니다.
이 명령어를 이용하면 아래와 같은 기능을 이용할 수 있습니다.
- 가상환경 활성화: poetry shell 명령어를 실행하면, Poetry가 해당 프로젝트에 대해 생성한 가상환경이 활성화됩니다. 이는 가상환경 내의 Python 인터프리터와 패키지들을 사용할 수 있게 해줍니다.
- 쉘 시작: 활성화된 가상환경 내에서 새로운 쉘이 시작됩니다. 이 쉘에서는 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]