코드로 우주평화
Poetry로 프로젝트 패키지를 관리하자 본문
Poetry는 왜 사용하는가?
Poetry는 파이썬에서 종속성 관리 및 패키징을 위한 도구입니다.
즉, 프로젝트가 의존하고있는 라이브러리 패키지를 설치 및 삭제 등 효과적으로 관리할 수 있습니다.
때문에 Poetry는 pip의 requirements나 virtualenv를 대체할 수 있습니다.
poetry를 pip로 설치하는 방법은 다음과 같습니다.
pip install --user poetry
다른 경로의 설치 방법은 공식문서를 참고하기 바랍니다.
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 명령어를 사용해 빌드와 배포가 가능합니다.
자세한 사용방법은 공식문서를 참고해주세요.
'나는 이렇게 학습한다 > Library' 카테고리의 다른 글
SQLAlchemy를 이용해 csv파일 DB업로드 하는 방법(feat. psql) (2) | 2022.04.21 |
---|---|
SQLAlchemy, ‘PasswordType’으로 손쉽게 암호화하자 (0) | 2022.04.12 |
pre-commit 에서 ‘flake8’ 과 ‘black’ 커스텀 문제 (0) | 2022.04.07 |
pre-commit 을 이용해 commit 전 코드 체크를 자동화하자. (0) | 2022.04.06 |
APScheduler를 이용해 비동기 작업을 예약하자 (0) | 2022.01.18 |