Poetry로 시작하기: Python 개발 도구, 넌 꼭 사용해야 합니다
Wenhao Wang
Dev Intern · Leapcell

Python 패키지 관리자 Poetry에 대한 종합적인 초보자 가이드: 기본부터 실제 적용까지의 전체 규모 분석
1. 소개: 왜 Poetry가 필요할까요?
Python 개발 분야에서 패키지 관리는 항상 프로젝트 유지 관리의 핵심 문제였습니다. 기존 도구인 pip
이 기본적인 설치 요구 사항을 충족할 수 있지만 프로젝트 규모가 확장됨에 따라 종속성 해결 및 가상 환경 관리의 단점이 점차 두드러집니다. 예를 들어 패키지를 수동으로 제거할 때 종속성 관계를 자동으로 처리할 수 없어 환경 혼란이나 종속성 충돌이 발생할 수 있습니다. 차세대 패키지 관리 도구인 Poetry는 가상 환경 관리 및 종속성 해결 기능을 통합할 뿐만 아니라 더 명확한 프로젝트 구성 및 릴리스 프로세스를 제공하여 현재 Python 개발자에게 선호되는 솔루션 중 하나가 되었습니다.
이 기사에서는 Poetry의 핵심 기능에 중점을 두고 구체적인 운영 사례를 결합하여 독자가 이 강력한 도구를 입문부터 숙달까지 마스터할 수 있도록 돕습니다. 내용은 설치 및 구성, 가상 환경 관리, 종속성 작업, 일반적인 명령 및 실제 응용 시나리오를 다루며 초보자와 프로젝트 관리 프로세스를 최적화하려는 개발자에게 적합합니다.
2. Poetry의 핵심 개념 분석
2.1 Poetry란 무엇인가요?
Poetry는 통합된 Python 패키지 관리 도구이며 공식적인 위치는 "Python용 종속성 관리"입니다. 기존 패키지 관리자(예: pip
)의 설치 및 삭제 기능이 있을 뿐만 아니라 다음과 같은 추가 기능도 제공합니다.
- 자동 가상 환경 관리:
virtualenv
기능이 내장되어 있어 가상 환경 도구를 별도로 설치할 필요가 없습니다. - 종속성 관계 분석: 패키지 간의 버전 충돌을 자동으로 처리하여 프로젝트 환경의 안정성을 보장할 수 있습니다.
- 프로젝트 구성 및 릴리스:
pyproject.toml
을 통해 프로젝트 메타데이터와 종속성을 일관되게 관리하고 패키지 패키징 및 릴리스를 지원할 수 있습니다.
2.2 주요 용어 설명
- 가상 환경 관리: 서로 다른 프로젝트의 종속성 환경을 격리하여 전역 설치로 인한 버전 오염을 방지합니다. Poetry는 기본적으로 가상 환경을 자동으로 생성하며 경로는 구성할 수 있습니다.
- 종속성 관리(Dependency Management): 직접 설치된 패키지를 관리할 뿐만 아니라 모든 구성 요소의 호환성을 보장하기 위해 기본 종속성을 추적합니다.
- 종속성 해결(Dependency Resolution): 이것은 Poetry의 핵심 강점입니다. 버전 규칙을 충족하는 최적의 종속성 조합을 자동으로 계산하고
pip
가 처리할 수 없는 복잡한 충돌을 해결할 수 있습니다.
2.3 왜 pip
를 버려야 할까요?
pip
의 주요 결함은 종속성 해결 능력이 부족하다는 것입니다. 예를 들어:
- 패키지를 제거할 때 다른 구성 요소에서 종속되어 있는지 여부를 확인할 수 없어 환경이 붕괴될 수 있습니다.
requirements.txt
를 수동으로 유지 관리하는 것은 오류가 발생하기 쉬우며 특히 버전 범위를 처리할 때 자동화된 지원이 부족합니다.- 가상 환경은
venv
를 사용하여 별도로 관리해야 하며 프로세스가 번거롭습니다.
적용 시나리오: pip
는 간단한 스크립트나 임시 작업에 적합하고 Poetry는 중간 규모 및 대규모 프로젝트, 팀 협업 또는 엄격한 종속성 관리가 필요한 시나리오에 더 적합합니다.
3. Poetry 설치 및 기본 구성
3.1 설치 방법 선택
Poetry는 공식적으로 권장되는 두 가지 설치 방법을 제공하며 둘 다 프로젝트 환경과의 격리를 보장하기 위해 독립적인 가상 환경을 기반으로 배포됩니다.
방법 1: 공식 설치 스크립트 사용(권장)
적용 가능한 시스템: macOS/Linux/WSL/Windows
# macOS/Linux/WSL curl -sSL https://install.python-poetry.org | python3 - # Windows (PowerShell) (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
설치 후 Poetry는 시스템별 디렉토리(예: macOS의 ~/.local/bin
)에 배치되며 poetry
명령을 직접 호출하려면 환경 변수 PATH
를 수동으로 구성해야 합니다.
방법 2: pipx
를 통해 설치
적용 가능한 시스템: pipx
를 미리 설치해야 합니다.
pipx install poetry
pipx
는 Poetry를 설치하기 위해 격리된 환경을 자동으로 생성하며 이 도구를 사용하는 데 익숙한 사용자에게 적합합니다.
3.2 환경 변수 구성
설치 후 시스템 PATH
에 Poetry 실행 파일 경로를 추가해야 합니다.
macOS/Linux
셸 구성 파일(예: .zshrc
또는 .bashrc
)을 편집하고 다음을 추가합니다.
export PATH="$PATH:$HOME/.local/bin"
저장하고 터미널을 다시 시작한 다음 poetry --version
을 입력하여 설치를 확인합니다.
Windows
"시스템 속성 → 고급 → 환경 변수"로 이동하여 사용자 변수에서 PATH
를 편집하고 설치 경로(예: %APPDATA%\Python\Scripts
)를 추가합니다.
3.3 별칭 설정(선택 사항)
명령 입력을 단순화하기 위해 셸 구성에 별칭을 추가할 수 있습니다.
alias p='poetry' # poetry를 p로 단순화
4. 처음부터 시작: 프로젝트 및 가상 환경 초기화
4.1 프로젝트 초기화
새 프로젝트 디렉토리를 만들고 Poetry를 초기화합니다.
mkdir poetry-demo && cd poetry-demo poetry init
실행 후 시스템은 사용자에게 프로젝트 메타데이터(예: 이름, 버전, 작성자 등)를 입력하도록 안내하며 대부분의 옵션은 Enter 키를 눌러 기본값을 사용할 수 있습니다. 주요 단계:
- 종속성을 대화형으로 정의할지 묻는 메시지가 표시되면
no
를 선택하고 나중에 수동으로 설치합니다. - 생성된
pyproject.toml
의 내용을 확인하고 마지막으로 프로젝트 구성 파일을 생성합니다.
이때 프로젝트 구조는 다음과 같습니다.
poetry-demo/
└── pyproject.toml
4.2 가상 환경 관리
4.2.1 기본 동작 및 문제
Poetry는 기본적으로 가상 환경을 시스템 캐시 디렉토리(예: macOS의 ~/Library/Caches/pypoetry/virtualenvs
)에 저장하며 명명 규칙은 프로젝트 이름 - 임의 문자열 - Python 버전
입니다. 이 방법은 격리를 달성하지만 프로젝트 마이그레이션 및 직관적인 관리에 도움이 되지 않습니다.
4.2.2 가상 환경 경로 사용자 지정
프로젝트와의 일대일 바인딩을 보장하기 위해 가상 환경을 프로젝트 디렉토리에 저장하는 것이 좋습니다.
poetry config virtualenvs.in-project true # 프로젝트 내부로 설정 poetry env remove python # 이전 환경 제거(있는 경우) poetry env use python # 환경을 다시 생성하고 경로는 프로젝트 루트 디렉토리 아래의 .venv입니다.
이때 가상 환경 경로는 ./.venv
이고 시작 방법은 다음과 같습니다.
poetry shell # 가상 환경 입력 exit # 종료
5. 종속성 관리의 핵심 작업
5.1 패키지 설치
5.1.1 기본 종속성 설치(프로덕션 환경)
poetry add flask # Flask를 설치하고 종속성을 자동으로 처리합니다.
설치 후 pyproject.toml
은 Flask = "^2.1.1"
을 추가하고 동시에 poetry.lock
이 생성되어 모든 기본 종속성(예: click
, jinja2
등)을 기록합니다.
5.1.2 개발 종속성 설치
개발 도구(예: 테스트 프레임워크 및 코드 형식 지정 도구)는 프로덕션 환경을 오염시키지 않도록 dev-dependencies
블록에 설치해야 합니다.
poetry add black --dev # 이전 버전 명령(Poetry <2.0) poetry add black -G dev # 새 버전 명령(Poetry >=2.0, 권장)
이때 pyproject.toml
은 다음을 추가합니다.
[tool.poetry.dev-dependencies] black = "^22.3.0"
5.1.3 버전 범위 지정
Poetry는 고정 버전으로 인한 유지 관리 비용을 피하기 위해 유연한 버전 규칙을 지원합니다.
- ^ 기호: 패치 및 부 버전 업데이트를 허용합니다(예:
^4.2.9
는 >=4.2.9 및 <5.0.0을 의미).poetry add django@^4.2.9
- ~ 기호: 패치 버전 업데이트만 허용합니다(예:
~4.2.9
는 >=4.2.9 및 <4.3.0을 의미).poetry add django@~4.2.9
- 고정 버전: 버전을 엄격하게 잠급니다(예:
==4.2.9
).poetry add django==4.2.9
5.2 패키지 업데이트 및 제거
5.2.1 패키지 업데이트
poetry update # 업그레이드 가능한 모든 패키지를 업데이트합니다. poetry update flask # Flask만 업데이트합니다.
업데이트 논리는 pyproject.toml
의 버전 규칙을 기반으로 하며 종속성 충돌을 자동으로 해결합니다.
5.2.2 패키지 제거
poetry remove flask # Flask 및 사용하지 않는 기본 패키지를 제거합니다.
주요 장점: Poetry는 종속성 관계를 확인하고 더 이상 사용되지 않는 구성 요소만 제거합니다. 예를 들어 black
이 click
에 종속된 경우 flask
를 제거하면 click
이 유지됩니다.
5.3 종속성 목록 보기
5.3.1 모든 패키지 나열
poetry show # 설치된 모든 패키지(종속성 포함)를 표시합니다.
5.3.2 트리 구조로 종속성 계층 표시
poetry show --tree # 트리 다이어그램으로 종속성 관계를 표시합니다.
출력 예:
flask 2.1.1 A simple framework for building complex web applications.
├── click >=8.0
│ └── colorama *
├── importlib-metadata >=3.6.0
│ └── zipp >=0.5
...
6. 고급 작업 및 실제 명령
6.1 requirements.txt
생성(이전 시스템과 호환 가능)
Poetry는 poetry.lock
을 사용하는 것이 좋지만 일부 시나리오(예: Docker 배포)에서는 여전히 requirements.txt
가 필요합니다.
poetry export -f requirements.txt -o requirements.txt --without-hashes
매개변수 설명:
-f
: 출력 형식을requirements.txt
로 지정-o
: 출력 파일 이름 지정--without-hashes
: 해시 값 제거(필수 사항은 아니며 필요에 따라 결정)
6.2 일반적인 명령 목록
명령 | 설명 |
---|---|
poetry init | 프로젝트를 초기화하고 pyproject.toml 을 생성합니다. |
poetry add | 프로덕션 종속성에 패키지를 설치합니다. |
poetry add -G dev | 개발 종속성에 패키지를 설치합니다. |
poetry install | poetry.lock 에 따라 모든 종속성을 설치합니다. |
poetry update | 패키지를 업데이트합니다. |
poetry show --tree | 트리 구조로 종속성 관계를 표시합니다. |
poetry shell | 가상 환경을 시작합니다. |
poetry export | requirements.txt 를 출력합니다. |
poetry lock | 종속성 버전을 잠그고 poetry.lock 을 업데이트합니다. |
7. 일반적인 사용 시나리오 및 솔루션
7.1 새 프로젝트 설정 프로세스
- 디렉토리를 만들고 초기화합니다.
mkdir my-project && cd my-project && poetry init
- 프로젝트 내부에서 가상 환경을 구성합니다.
poetry config virtualenvs.in-project true
- 환경을 시작하고 종속성을 설치합니다.
poetry shell && poetry add flask
7.2 기존 프로젝트를 Poetry로 마이그레이션
- 원본
requirements.txt
를 백업합니다. - Poetry를 초기화합니다.
poetry init --no-interaction
(기본 구성을 빠르게 생성). - 종속성을 하나씩 설치합니다(권장).
poetry add package-name
- 또는 일괄 마이그레이션(위험도가 높음):
cat requirements.txt | xargs poetry add
- 또는 일괄 마이그레이션(위험도가 높음):
- 이전
requirements.txt
를 삭제하고poetry.lock
을 사용하여 종속성을 관리합니다.
7.3 호스트 간에 환경을 다시 생성
- 프로젝트 코드를 복사합니다.
git clone repo-url && cd project-dir
- 종속성을 설치합니다.
poetry install
(poetry.lock
에 따라 환경을 자동으로 생성합니다).
7.4 가상 환경 재구축
프로젝트에서 .venv
디렉토리를 직접 삭제한 다음 다음을 실행합니다.
poetry shell # 환경을 자동으로 재구축하고 시작합니다.
7.5 Docker 배포 모범 사례
Docker 이미지에 Poetry를 설치하지 말고 다단계 빌드(Multi-stage Build)를 사용합니다.
- 첫 번째 단계: Poetry를 사용하여 종속성 빌드
FROM python:3.8-slim AS build RUN pip install poetry WORKDIR /app COPY pyproject.toml poetry.lock ./ RUN poetry export -f requirements.txt --without-hashes -o requirements.txt
- 두 번째 단계: 프로덕션 종속성만 설치
FROM python:3.8-slim COPY --from=build /app/requirements.txt ./ RUN pip install -r requirements.txt
8. 요약: Poetry의 장점과 학습 곡선
8.1 핵심 장점
- 강력한 종속성 해결: 복잡한 버전 충돌을 자동으로 처리하고 환경 안정성을 보장할 수 있습니다.
- 통합 가상 환경: 추가 도구가 필요 없고 클릭 한 번으로 생성 및 관리할 수 있습니다.
- 통합 프로젝트 구성: 모든 메타데이터를
pyproject.toml
을 통해 관리하여 팀 협업이 용이합니다. - 간소화된 릴리스 프로세스: 패키징 기능이 내장되어 있으며 PyPI에 직접 릴리스를 지원합니다.
8.2 학습 제안
- 작은 프로젝트부터 시작: 먼저 간단한 프로젝트에서 기본 명령(예:
add
,shell
,show
)을 연습합니다. - 구성 파일 이해:
pyproject.toml
과poetry.lock
간의 역할 차이를 심층적으로 연구합니다. - 공식 문서 참조: Poetry 문서는 자세하며 특히 버전 규칙과 명령 매개변수 설명에 주의하십시오.
8.3 권장되는 응용 시나리오
- 엄격한 종속성 관리가 필요한 중간 규모 및 대규모 팀 프로젝트.
- 종속성이 자주 업데이트되거나 복잡한 종속성 관계가 있는 프로젝트.
- 교차 환경 배포(예: Docker, Kubernetes)가 필요한 프로젝트.
Poetry의 핵심 기능을 마스터함으로써 개발자는 프로젝트 관리 효율성을 크게 향상시키고 종속성 충돌 위험을 줄이며 배포 프로세스를 간소화할 수 있습니다. 처음에는 학습 비용이 있지만 장기적으로 볼 때 안정성과 생산성 향상은 시도해 볼 가치가 있습니다. 지금 바로 Poetry를 사용하고 현대적인 Python 개발의 편리함을 경험하십시오!
Leapcell: 최고의 서버리스 웹 호스팅
마지막으로 Python 서비스를 배포하는 데 가장 적합한 플랫폼을 추천합니다. Leapcell
🚀 좋아하는 언어로 빌드
JavaScript, Python, Go 또는 Rust로 간편하게 개발하십시오.
🌍 무제한 프로젝트를 무료로 배포
사용하는 만큼만 지불하십시오. 요청도 없고 요금도 없습니다.
⚡ 사용한 만큼 지불, 숨겨진 비용 없음
유휴 요금이 없고 원활한 확장성만 있습니다.
🔹 Twitter에서 팔로우하세요: @LeapcellHQ