가상환경을 구축할 때, poetry를 사용한다.
이에 대해서 정리해보자.
✅ Python 프로젝트의 패키지 및 의존성 관리를 위한 도구 Poetry
pyproject.toml
를 통해 의존성과 패키징 정보 등을 한곳에 관리✅ 종종 pip와 pipenv의 장점을 결합했다는 평가를 받는다
pyproject.toml
에 프로젝트 정보와 의존성 명확히 기재✅ Poetry를 이용해 프로젝트를 생성하면, 프로젝트 루트 경로에 pyproject.toml
파일이 생긴다.
setup.py
, requirements.txt
를 대체하여, 한 파일에 모두 정리하는 방식# 프로젝트 생성: poetry new
# -- my_project 폴더가 생성되고 기본적인 Python 패키지 구조가 자동 구성됨
poetry new my_project
# 패키지 추가: poetry add
# -- requests 라이브러리를 프로젝트에 추가, pyproject.toml에 requests가 의존성으로 기록됨
# -- 이 과정에서 Poetry가 자동으로 가상 환경 생성
cd my_project
poetry add requests
# 패키지 제거
poetry remove requests
# 패키지 업데이트
# -- 특정 버전으로 업/다운그레이드도 가능: poetry add requests==2.26.0
poetry update requests
# 패키지 검색
poetry search <package_name>
# 버전 범위 지정
# -- ^2.25.1 표기는 2.x 버전대에서 하위 호환이 가능한 버전을 허용한다는 의미
[tool.poetry.dependencies]
requests = "^2.25.1"
# 특정 파이썬 버전 사용하기
# -- 프로젝트별로 특정 버전 사용하려면,
# -- pyproject.toml의 [tool.poetry.dependencies] 섹션에 python 버전 범위 지정하거나
# -- 아래 명령어로 설정
poetry env use python3.9
# 가상 환경 위치 설정 및 변경
# -- 현재 프로젝트에서 사용 중인 가상 환경 경로 확인
poetry env info
# -- 별도 디렉터리(.venv)를 프로젝트 내부에 사용하고 싶다면
poetry config virtualenvs.in-project true
poetry install
# poetry 환경에서 명령어 실행: poetry run
# -- 가상 환경 내부에서 python main.py 수행
poetry run python main.py
# poetry shell을 실행하면 현재 터미널 세션이 가상 환경으로 활성화
# -- 그 뒤에는 python main.py 처럼 바로 실행 가능
# 환경을 빠져나가려면 exit
# scripts 섹션을 이용한 명령어 alias 등록
# -- pyproject.toml 내에 scripts 섹션을 설정하면, 자주 쓰는 명령어를 단축어처럼 사용 가능
[tool.poetry.scripts]
start = "my_project.main:run"
# -- 이후 poetry run start 명령으로 myproject/main.py의 run() 함수를 바로 실행 가능
Poetry는 Python 프로젝트의 의존성 관리와 패키징을 위한 현대적인 도구이다.
기존의 pip + virtualenv + requirements.txt 조합을 대체하는 올인원 솔루션이라고 볼 수 있다.
✅ 의존성 관리
pyproject.toml
파일을 통해 프로젝트 메타데이터와 의존성을 선언적으로 관리poetry.lock
파일로 정확한 버전을 고정하여 재현 가능한 환경 보장✅ 가상환경 통합
✅ 패키징과 배포
# Poetry 설치
curl -sSL https://install.python-poetry.org | python3 -
# 새 프로젝트 시작
poetry new my-project
cd my-project
# 기존 프로젝트에 Poetry 설정
poetry init
# 의존성 추가
poetry add requests
poetry add pytest --group dev # 개발 의존성
# 가상환경에서 명령 실행
poetry run python main.py
poetry run pytest
# 가상환경 활성화
poetry shell
# 의존성 설치
poetry install
pyproject.toml
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.28.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.0.0"
poetry.lock
# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand.
package = []
[metadata]
lock-version = "2.1"
python-versions = ">=3.11"
content-hash = "---"
기존 Python 프로젝트에서 흔히 겪는 문제들:
requirements.txt
, setup.py
, setup.cfg
… 파일이 따로 놀아서 관리가 번거로움pip
만 쓰면 의존성 충돌 버전 해결이 까다로움virtualenv
, venv
따로 쓰면서 가상환경 위치 관리가 불편함sdist
, wheel
)가 복잡함➡️ Poetry는 이를 하나의 도구 + 하나의 설정 파일(pyproject.toml) 로 깔끔히 해결
(1) ✅ 가상환경 관리
poetry shell
로 진입, poetry run python
으로 실행.venv/
안에 둘 수도 있고, 전역 관리도 가능(2) ✅ 의존성 관리
poetry add requests
→ requests
설치 + 버전 기록poetry remove requests
→ 제거poetry update
→ lock 파일 기준 업데이트poetry.lock
파일을 만들어 재현성 있는 환경 보장(3) ✅ 패키징 & 배포
poetry build
→ wheel, sdist 생성poetry publish
→ PyPI 업로드pyproject.toml
안의 메타데이터(name
, version
, authors
, packages
)로 패키지 정의(4) ✅ 일관된 설정 파일
pyproject.toml
한 파일 안에서 정의됨 (의존성, 파이썬 버전, 패키징 설정, 스크립트 등)# 새 프로젝트 생성
poetry new myproj
cd myproj
# 가상환경 생성 및 설치
poetry install
# 패키지 추가
poetry add fastapi uvicorn
# 가상환경 진입
poetry shell
기능 | pip + venv | Poetry |
---|---|---|
가상환경 생성 | python -m venv 따로 필요 | poetry install 시 자동 생성 |
의존성 기록 | requirements.txt 수동 작성 | pyproject.toml 자동 관리 |
버전 고정 | pip freeze > requirements.txt | poetry.lock 자동 관리 |
배포 지원 | setup.py 직접 작성 | poetry build/publish 자동 지원 |
add
, remove
로 직관적 의존성 관리