나는 이렇게 학습한다/Library

Poetry로 프로젝트 패키지를 관리하자

daco2020 2022. 4. 11. 19:34
반응형

Poetry는 왜 사용하는가?

 

Poetry는 파이썬에서 종속성 관리 및 패키징을 위한 도구입니다.

즉, 프로젝트가 의존하고있는 라이브러리 패키지를 설치 및 삭제 등 효과적으로 관리할 수 있습니다.

때문에 Poetry는 pip의 requirements나 virtualenv를 대체할 수 있습니다.

 

 

 

poetry를 pip로 설치하는 방법은 다음과 같습니다.

pip install --user poetry

다른 경로의 설치 방법은 공식문서를 참고하기 바랍니다.

installation

 

 

Poetry로 프로젝트 생성하기

 

poetry를 설치했다면 이제 shell에서 poetry 명령어를 사용할 수 있습니다.

poetry new project-name 

위의 명령어를 통해 새로운 프로젝트를 생성할 수 있습니다.

 

 

생성된 프로젝트는 다음과 같은 트리구조를 갖습니다.

.
└── project-name
    ├── README.rst
    ├── project_name
    │   └── __init__.py
    ├── pyproject.toml
    └── tests
        ├── __init__.py
        └── test_project_name.py

 

 

만약 이미 프로젝트 파일이 있다면 새로운 프로젝트를 생성하지 않고 ‘pyproject.toml’ 파일만 추가할 수 있습니다.

poetry init

init 의 경우, 패키지 이름과 기타 설정 값들을 입력하라는 메시지가 나옵니다.

이 메시지들은 입력해도 되고, 공란으로 모두 넘겨도 됩니다.

(이후 생성되는 ‘pyproject.toml’ 파일에서 수정할 수 있음)

 

 

이제 ‘pyproject.toml’ 파일이 생성되었고 poetry를 사용할 수 있습니다.

 

 

 

 

Poetry로 패키지 설치하기

 

예시로 FastAPI를 설치해보겠습니다.

poetry add FastAPI
# pyproject.toml

[tool.poetry]
name = "poetry-practice"
version = "0.1.0"
description = ""
authors = ["daco2020 <dacokim@gmail.com>"]

[tool.poetry.dependencies]
python = "^3.10"
fastapi = "^0.75.1"

[tool.poetry.dev-dependencies]

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

fastapi가 자동으로 추가된 것을 확인할 수 있습니다.

 

 

 

 

이번에는 dev-dependencies에 black 라이브러리를 추가해보겠습니다.

poetry add black --dev
# pyproject.toml

[tool.poetry]
name = "poetry-practice"
version = "0.1.0"
description = ""
authors = ["daco2020 <dacokim@gmail.com>"]

[tool.poetry.dependencies]
python = "^3.10"
fastapi = "^0.75.1"

[tool.poetry.dev-dependencies]
black = "^22.3.0"

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

black도 정상적으로 추가된 것을 볼 수 있습니다.

 

 

 

 

이제 show 명령어를 통해 설치된 패키지를 확인해보겠습니다.

poetry show
anyio             3.5.0  High level compatibility layer for multiple asynchronous event loop implementations
attrs             21.4.0 Classes Without Boilerplate
black             22.3.0 The uncompromising code formatter.
click             8.1.2  Composable command line interface toolkit
fastapi           0.75.1 FastAPI framework, high performance, easy to learn, fast to code, ready for production
idna              3.3    Internationalized Domain Names in Applications (IDNA)
more-itertools    8.12.0 More routines for operating on iterables, beyond itertools
mypy-extensions   0.4.3  Experimental type system extensions for programs checked with the mypy typechecker.
packaging         21.3   Core utilities for Python packages
pathspec          0.9.0  Utility library for gitignore style pattern matching of file paths.
platformdirs      2.5.1  A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
pluggy            0.13.1 plugin and hook calling mechanisms for python
py                1.11.0 library with cross-python path, ini-parsing, io, code, log facilities
pydantic          1.9.0  Data validation and settings management using python 3.6 type hinting
pyparsing         3.0.8  pyparsing module - Classes and methods to define and execute parsing grammars
pytest            5.4.3  pytest: simple powerful testing with Python
sniffio           1.2.0  Sniff out which async library your code is running under
starlette         0.17.1 The little ASGI library that shines.
tomli             2.0.1  A lil' TOML parser
typing-extensions 4.1.1  Backported and Experimental Type Hints for Python 3.6+
wcwidth           0.2.5  Measures the displayed width of unicode strings in a terminal

 

 

 

Poetry에서 패키지 삭제하기

 

이제 설치한 패키지를 삭제해보겠습니다.

poetry remove fastapi
poetry remove --dev black # dev 패키지의 경우 ‘—dev’를 붙여주어야 합니다.

 

# pyproject.toml

[tool.poetry]
name = "project-name"
version = "0.1.0"
description = ""
authors = ["daco2020 <dacokim@gmail.com>"]

[tool.poetry.dependencies]
python = "^3.10"

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

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

패키지가 잘 삭제된 것을 볼 수 있습니다.

 

 

 

 

show 명령어로 자세히 확인해보겠습니다.

poetry show
attrs          21.4.0 Classes Without Boilerplate
more-itertools 8.12.0 More routines for operating on iterables, beyond itertools
packaging      21.3   Core utilities for Python packages
pluggy         0.13.1 plugin and hook calling mechanisms for python
py             1.11.0 library with cross-python path, ini-parsing, io, code, log facilities
pyparsing      3.0.8  pyparsing module - Classes and methods to define and execute parsing grammars
pytest         5.4.3  pytest: simple powerful testing with Python
wcwidth        0.2.5  Measures the displayed width of unicode strings in a terminal

관련된 패키지들이 모두 삭제 된 것을 볼 수 있습니다.

 

 

 

 

마무리

poetry에 대한 기본 사용법을 알아보았습니다.

 

poetry를 사용하면 기존 requirements 보다 더 수월하게 패키지를 관리할 수 있습니다.

뿐만 아니라 build, publish 명령어를 사용해 빌드와 배포가 가능합니다.

 

 

자세한 사용방법은 공식문서를 참고해주세요.

 

Poetry - Python dependency management and packaging made easy

Dependency resolver Poetry comes with an exhaustive dependency resolver, which will always find a solution if it exists. And get a detailed explanation if no solution exists. Isolation Poetry either uses your configured virtualenvs or creates its own to al

python-poetry.org

 

 

 

 

반응형