Poetry

2025-01-05 Poetry 2.0 버전 발표

Announcing Poetry 2.0.0

Poetry 2.0.0에서는 pyproject.toml 파일 구조가 변경되어, 기존의 [tool.poetry] 섹션이 [project] 섹션으로 대체되었습니다. 이는 PEP 621을 준수하기 위한 것으로, poetry check 명령어를 통해 이전된 속성들을 확인하고 마이그레이션할 수 있습니다.

또한, Poetry 2.0.0에서는 다음과 같은 주요 변경 사항이 있습니다:

Breaking Changes in Poetry 2.0.0

PEP621이란?

PEP 621은 Python 프로젝트의 핵심 메타데이터를 pyproject.toml 파일의 [project] 섹션에 표준화하여 정의하는 방법을 명시한 문서입니다. 이 표준은 패키징 관련 도구들이 일관되고 효율적으로 메타데이터를 처리할 수 있도록 돕습니다.

주요 내용:

이러한 표준화를 통해 Python 패키징 생태계의 일관성과 효율성이 향상되며, 사용자와 도구 개발자 모두에게 이점을 제공합니다.

poetry를 사용하여 가상환경 설정

## 폴더 생성
> mkdir oz-backend-django

## 폴더 이동
> cd oz-backend-django

## poetry 초기화
> poetry init

## poetry 의존성 설치 및 가상환경 세팅
> poetry install

## poetry 의존성 설치 및 가상환경 세팅 (poetry.lock파일 사용)
> poetry install --no-root

## 가상환경 접속하기
> poetry shell # lagacy
> poetry env activate # FROM 2.0.0

CheetSheets

Poetry 설치

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

또는 Homebrew를 사용:

brew install poetry

또는 pipx를 사용

pipx install poetry

새로운 프로젝트 생성

poetry new my-project

기존 프로젝트 초기화

poetry init

가상 환경 활성화

poetry shell  # Deprecated
poetry env activate  # FROM 2.0.0

의존성 추가

poetry add <패키지명>

개발 의존성 추가

poetry add --dev <패키지명>

패키지 제거

poetry remove <패키지명>

의존성 설치

poetry install
poetry install --no-root

poetry.lock으로 설치하는 것과 pyproject.toml로 설치하는 것의 차이

의존성 업데이트

poetry update

스크립트 실행

poetry run <명령어>

패키지 버전 고정

poetry lock

프로젝트 테스트

poetry run pytest

배포용 패키지 빌드

poetry build

PyPI에 배포

poetry publish

의존성 목록 보기

poetry show --tree

가상 환경 관리

poetry env list
poetry env use <python 경로>

pyproject.toml 예시

[tool.poetry]
name = "my-project"
version = "0.1.0"
description = "A sample Python project"
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = "^3.9"
requests = "^2.25.1"

[tool.poetry.dev-dependencies]
pytest = "^6.2.3"

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

poetry 설치 시 .venv 폴더가 프로젝트 내에 생성이 되지 않으시나요?

poetry config virtualenvs.in-project true
poetry config virtualenvs.path "./.venv"