Poetry ์‚ฌ์šฉํ•˜๊ธฐ

Poetry ์‚ฌ์šฉํ•˜๊ธฐ#

supposed to be surdarla logo

Surdarla

Nov 29 Wed 13:15, 2023

1 min read

Poetry Poetry-github

: Python packaging and dependency management made easy
pyproject.toml์ด๋ผ๋Š” ํŒŒ์ผ ํ•˜๋‚˜๋กœ setup.py, requirements.txt, pip๋“ฑ ์–ด์ฉŒ๊ตฌ ์ €์ฉŒ๊ตฌ ๋Œ€๋ถ€๋ถ„์˜ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” python์˜ ๋…ธ๋ ฅ๋“ค์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

๋งŽ์€ ์žฅ์ ๋“ค์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ์šฐ์„  ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒฐ๊ณผ๋กœ๋Š” ์ด๋ ‡๋‹ค.

  1. ํ”„๋กœ์ ํŠธ ๊ฒฉ๋ฆฌ: Poetry๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ์„ ์ž๋™์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ์„ค์น˜ํ•œ๋‹ค. ์ด๋Š” pip์—์„œ๋Š” ์ˆ˜๋™์œผ๋กœ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, Poetry์—์„œ๋Š” ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  2. ํŒจํ‚ค์ง€ ๋ฐฐํฌ: pip๋Š” ํŒจํ‚ค์ง€ ์„ค์น˜ ๋„๊ตฌ๋กœ ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ, Poetry๋Š” ํŒจํ‚ค์ง€ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•œ๋‹ค. ์ด๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ PyPI์— ๊ฒŒ์‹œํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐ ๋„์›€๋œ๋‹ค.

  3. ๊ฒฐ์ •๋ก ์  ์„ค์น˜: Poetry.lock ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ฒ„์ „๋ณ„๋กœ ์ถ”์ ํ•œ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ ์žฌํ˜„ํ•  ๋•Œ ๋„์›€๋œ๋‹ค.

[tool.poetry]
name = "my-package"
version = "0.1.0"
description = "The description of the package"

license = "MIT"

authors = [
    "Sรฉbastien Eustace <sebastien@eustace.io>"
]

repository = "https://github.com/python-poetry/poetry"
homepage = "https://python-poetry.org"

# README file(s) are used as the package description
readme = ["README.md", "LICENSE"]

# Keywords (translated to tags on the package index)
keywords = ["packaging", "poetry"]

[tool.poetry.dependencies]
# Compatible Python versions
python = ">=3.8"
# Standard dependency with semver constraints
aiohttp = "^3.8.1"
# Dependency with extras
requests = { version = "^2.28", extras = ["security"] }
# Version-specific dependencies with prereleases allowed
tomli = { version = "^2.0.1", python = "<3.11", allow-prereleases = true }
# Git dependencies
cleo = { git = "https://github.com/python-poetry/cleo.git", branch = "master" }
# Optional dependencies (installed by extras)
pendulum = { version = "^2.1.2", optional = true }

# Dependency groups are supported for organizing your dependencies
[tool.poetry.group.dev.dependencies]
pytest = "^7.1.2"
pytest-cov = "^3.0"

# ...and can be installed only when explicitly requested
[tool.poetry.group.docs]
optional = true
[tool.poetry.group.docs.dependencies]
Sphinx = "^5.1.1"

# Python-style entrypoints and scripts are easily expressed
[tool.poetry.scripts]
my-script = "my_package:main"

main functions#

์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด ์ดํ•ด๋œ๋‹ค.

# ์„ค์น˜ : py๊ฐ€ ์•„๋‹ˆ๋ผ python์œผ๋กœ ํ•ด์ค˜์•ผํ•œ๋‹ค.
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

# ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
poetry new your-project-name

# ๊ธฐ์กด ํด๋”์— poetry ๋ฎ๊ธฐ
poetry init

# pyproject.toml ์ฝ์–ด์„œ poetry.lock ์ƒ์„ฑ - ๊ฐ€์ƒํ™˜๊ฒฝ๋„ ์ƒ์„ฑ
poetry install
poetry add your-package-name

# poetry.lock ๊ฐฑ์‹ 
poetry update

# ํŒจํ‚ค์ง€ ์‚ญ์ œ
poetry remove your-package-name

# lockํŒŒ์ผ์˜ package ๊ตฌ์„ฑ ํ™•์ธ
poetry show --tree

# poetry.lock ํŒŒ์ผ๊ณผ pyproject.toml ํŒŒ์ผ์˜ ์ข…์†์„ฑ์ด ๋™์ผํ•œ์ง€ ํ™•์ธ
poetry check

๊ฐ€์ƒํ™˜๊ฒฝ ์‚ฌ์šฉ

# venv ๋“ค์–ด๊ฐ€๊ธฐ
poetry shell

# venv ๋‚˜๊ฐ€๊ธฐ
exit

# ํ™˜๊ฒฝ์ •๋ณด ํ™•์ธ
poetry env info --path
poetry env list
poetry env remove

requirements.txt -> pyproject.toml#

๊ธฐ์กด์˜ requirements.txt๋ฅผ ์‚ฌ์šฉํ•ด์„œ poetry add๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ž˜๋„ ๊ผด์— ์˜ˆ์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— requirements.txt๋„ ์—ฌ์ „ํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

๋งฅ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด๋˜๊ณ 

cat requirements.txt | xargs poetry add

์œˆ๋„์šฐ powershell์—์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Get-Content requirements.txt | ForEach-Object { poetry add $_ }

๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๋“ค์ด ๋ฐ”๋กœ ํŒŒ์›Œ์‰˜์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋ช…๋ น์–ด๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. xargs๋Š” ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ๊ฐ๊ฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•ด ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” js์—์„œ ์ฒ˜๋Ÿผ foreach๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด์ธ๋‹ค.

๋งŒ์•ฝ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ถŒํ•œ์ด ๋น„ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์œผ๋ฉด Set-ExecutionPolicy remoteSigned๋ฅผ ์ณ์ค€๋‹ค.