Poetry๋Š” Python์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ํŒจํ‚ค์ง•์„ ์œ„ํ•œ ํ˜„๋Œ€์ ์ธ ๋„๊ตฌ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” macOS ํ™˜๊ฒฝ์—์„œ Poetry๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์— ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃฌ๋‹ค.

Poetry ์„ค์น˜

Homebrew๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์น˜ (๊ถŒ์žฅ)

brew install poetry

๊ณต์‹ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ

curl -sSL https://install.python-poetry.org | python3 -

์„ค์น˜ ํ™•์ธ

poetry --version

ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •

1. ์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

poetry new my-project
cd my-project
 
# ๋˜๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ ์ดˆ๊ธฐํ™”
poetry init

2. ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ •

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์— ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•œ๋‹ค.

# ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์— ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •
poetry config virtualenvs.in-project true
 
# ๊ฐ€์ƒํ™˜๊ฒฝ ๊ฒฝ๋กœ ์„ค์ •
poetry config virtualenvs.path "./.venv"
 
# ์˜์กด์„ฑ ์„ค์น˜ ๋ฐ ์—…๋ฐ์ดํŠธ
poetry install && poetry update

์˜์กด์„ฑ ๊ด€๋ฆฌ

1. ํŒจํ‚ค์ง€ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ

# ํŒจํ‚ค์ง€ ์ถ”๊ฐ€
poetry add requests pandas numpy
 
# ๊ฐœ๋ฐœ ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€
poetry add pytest black isort --dev
 
# ํŒจํ‚ค์ง€ ์ œ๊ฑฐ
poetry remove requests

2. requirements.txt ๋ณ€ํ™˜

requirements.txt ์ƒ์„ฑ

# ๊ธฐ๋ณธ ์ƒ์„ฑ
poetry export --without-hashes --format=requirements.txt > requirements.txt
 
# ๊ฐœ๋ฐœ ์˜์กด์„ฑ ํฌํ•จ
poetry export --without-hashes --format=requirements.txt --dev > requirements.txt

requirements.txt์—์„œ ์˜์กด์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ

poetry add $(cat requirements.txt)

VSCode ํ†ตํ•ฉ

1. Python ์ต์Šคํ…์…˜ ์„ค์น˜

Command + Shift + X๋ฅผ ๋ˆŒ๋Ÿฌ ์ต์Šคํ…์…˜ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ์—ด๊ณ  โ€˜Pythonโ€™์„ ์„ค์น˜ํ•œ๋‹ค.

2. ํ”„๋กœ์ ํŠธ ์„ค์ •

.vscode/settings.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค:

{
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
    "python.formatting.provider": "black",
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true
}

3. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์„ ํƒ

  1. Command + Shift + P๋ฅผ ๋ˆŒ๋Ÿฌ ๋ช…๋ น ํŒ”๋ ˆํŠธ๋ฅผ ์—ฐ๋‹ค
  2. โ€œPython: Select Interpreterโ€ ์ž…๋ ฅ
  3. .venv/bin/python์„ ์„ ํƒํ•œ๋‹ค

์œ ์šฉํ•œ ํŒ

1. PATH ์„ค์ •

Poetry๊ฐ€ ์„ค์น˜๋˜์—ˆ์ง€๋งŒ ๋ช…๋ น์–ด๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ~/.zshrc ๋˜๋Š” ~/.bash_profile์— ์ถ”๊ฐ€:

export PATH="$HOME/.local/bin:$PATH"

2. pyenv์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ

macOS์—์„œ ์—ฌ๋Ÿฌ Python ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด pyenv์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค:

# pyenv ์„ค์น˜
brew install pyenv
 
# Python ๋ฒ„์ „ ์„ค์น˜
pyenv install 3.9.9
 
# ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  Python ๋ฒ„์ „ ์ง€์ •
pyenv local 3.9.9
 
# Poetry๊ฐ€ pyenv์˜ Python์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •
poetry env use $(pyenv which python)

3. ์ž๋™ ์™„์„ฑ ์„ค์ •

zsh์—์„œ Poetry ๋ช…๋ น์–ด ์ž๋™ ์™„์„ฑ์„ ํ™œ์„ฑํ™”:

# ~/.zshrc์— ์ถ”๊ฐ€
poetry completions zsh > ~/.zfunc/_poetry
echo 'fpath+=~/.zfunc' >> ~/.zshrc
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc

๋ฌธ์ œ ํ•ด๊ฒฐ

1. ๊ฐ€์ƒํ™˜๊ฒฝ ์žฌ์„ค์ •

# ๊ฐ€์ƒํ™˜๊ฒฝ ์‚ญ์ œ
poetry env remove python
 
# ์บ์‹œ ์ •๋ฆฌ
poetry cache clear . --all
 
# ์˜์กด์„ฑ ์žฌ์„ค์น˜
poetry install

2. ๊ถŒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ

# Poetry ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ์ˆ˜์ •
sudo chown -R $(whoami) ~/Library/Caches/pypoetry