Poetry는 파이썬 개발 시 의존성 관리와 패키징을 위한 툴이다. pip와 venv를 통해 프로젝트의 가상환경을 자동으로 생성하고 의존성을 관리해줌으로써 개발용이성을 향상시켜준다.
여러 개발자가 동일한 환경에서 개발할 수 있도록 지원을 한다. 따라서 개발자의 머신에서 Global로 설치된 의존성이 아닌 프로젝트에 필요한 버전의 의존성을 동일하게 유지해 준다.
아래 전체적인 흐름을 정리한 그림이다.
위의 흐름에 맞춰서 하나씩 정리해본다.
1. Poetry 설치
poetry를 사용하기 위해 설치가 필요하다. 나는 1.4.2 버전이 설치된 상태이다.
$ pip install poetry
$ poetry -V
Poetry (version 1.4.2)
2. 프로젝트에 poetry 초기화 하기
$poetry init$ 명령어를 사용하여 초기화를 진행한다. 나는 모든 설정을 기본으로 설정하였고, 초기화가 완료되면 pyproject.toml 파일이 생성된 것을 확인할 수 있다.
$poetry init
This command will guide you through creating your pyproject.toml config.
Package name [test]:
Version [0.1.0]:
Description []:
Author [Seungha Son <linuxias@gmail.com>, n to skip]:
License []:
Compatible Python versions [^3.8]:
Would you like to define your main dependencies interactively? (yes/no) [yes]
You can specify a package in the following forms:
- A single name (requests): this will search for matches on PyPI
- A name and a constraint (requests@^2.23.0)
- A git url (git+https://github.com/python-poetry/poetry.git)
- A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop)
- A file path (../my-package/my-package.whl)
- A directory (../my-package/)
- A url (https://example.com/packages/my-package-0.1.0.tar.gz)
Package to add or search for (leave blank to skip):
Would you like to define your development dependencies interactively? (yes/no) [yes]
Package to add or search for (leave blank to skip):
Generated file
[tool.poetry]
name = "test"
version = "0.1.0"
description = ""
authors = ["Seungha Son <linuxias@gmail.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.8"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
3. 의존성 설치
처음으로 poetry install을 사용하여 의존성을 설치하게 되면, 자동으로 가상환경이 생성된다. poetry env list 명령어로 확인 시 가상환경이 생성된 것을 확인할 수 있다.
$Project/test poetry install
Creating virtualenv test-_ESsOsQl-py3.8 in /home/linuxias/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (0.1s)
Writing lock file
$poetry env list
test-_ESsOsQl-py3.8 (Activated)
여기서 의존성을 설치하는 방법은 2가지 이다.
- pyproject.toml을 직접 수정한 후 poetry install
- poetry add 명령어를 사용하기
여기서는 poetry add를 사용한 방식만 정리한다. numpy와 pandas를 설치해보자. numpy는 버전을 명시하지 않고 설치하고 pandas는 버전을 1.5.2로 명시하고 설치한다.
$poetry add numpy
Using version ^1.24.3 for numpy
Updating dependencies
Resolving dependencies... (0.1s)
Writing lock file
Package operations: 1 install, 0 updates, 0 removals
• Installing numpy (1.24.3)
$poetry add pandas==1.5.2
Updating dependencies
Resolving dependencies... (0.1s)
Writing lock file
Package operations: 4 installs, 0 updates, 0 removals
• Installing six (1.16.0)
• Installing python-dateutil (2.8.2)
• Installing pytz (2023.3)
• Installing pandas (1.5.2)
설치를 진행하면 해당 패키지가 필요로한 의존성이 자동 설치된다. 이 때 pyproject.toml 파일을 다시 한번 살펴보자.
버전을 명시하지 않은 numpy는 버전앞에 ^ 가 prefix로 존재하고, 특정 버전을 명시한 pandas의 경우에는 ^가 없이 1.5.2 버전명만 명시가 되어 있다. 2가지의 차이는 무엇일까?
[tool.poetry.dependencies]
python = "^3.8"
numpy = "^1.24.3"
pandas = "1.5.2"
^(캐럿) 의 의미는 ( >= 1.24.3, < 2.0.0) 의 의미입니다. 즉 2.9999....99999 버전까지도 설치가 된다는 얘기입니다. 즉 numpy의 버전을 최소 1.24.3 버전부터, 2.0.0 버전 내에서 의존성을 관리해준다는 것입니다. Major 버전은 두고, Minor, Release 버전의 변경을 통한 의존성은 관리해준다는 의미입니다.
특정 버전을 명시하게되면 이러한 ^(캐럿)이 추가되지 않습니다. Major.Minor.Release 버전이 고정된 상태에서 의존성을 관리하게 됩니다.
Poetry + Jupyter notebook
이제 Poetry 가상환경에서 Jupyter Kernel을 생성하고, Jupyter notebook 을 실행해 보자.
$ poetry shell
Spawning shell within /home/linuxias/.cache/pypoetry/virtualenvs/test-_ESsOsQl-py3.8
(test-py3.8) $poetry run ipython kernel install --user --name="test-jupyter-kernel"
Installed kernelspec test-jupyter-kernel in /home/linuxias/.local/share/jupyter/kernels/test-jupyter-kernel
(test-py3.8) $poetry run jupyter-notebook
poetry shell로 가상환경에 접속하고, 새로운 jupyter kernel을 생성한다. 그 이후에 jupyter-notebook을 실행시켜주면 완료!
'Language > Python' 카테고리의 다른 글
[numpy] r_, c_ 함수에 대하여 (0) | 2023.12.02 |
---|---|
[Python] Sliding Window (0) | 2023.08.24 |
[TroubleShooting] pyenv 문제 해결 (0) | 2023.04.05 |
abstract class에서 abstract property 생성하기 (0) | 2019.05.28 |
[Python] 문자열에 문자열 리스트의 요소가 포함되어 있는지 찾기 (1) | 2019.03.20 |