[Python] PyCharm์์ Poetry๋ฅผ ์ด์ฉํ ๋ํ๋์ ๊ด๋ฆฌ
์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ํ๋์์ ๊ด๋ฆฌ๋ ์ด์ ์ ํ์ด ์๋ ํ์๊ฐ ๋์์ต๋๋ค. ์ฌํ๊น์ง Python ์ธ์ด๋ฅผ ์ด์ฉํด ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ์์ ๋๋ requirement๋ฅผ ์ด์ฉํ์ฌ ํ๊ฒฝ๋ณ๋ก ๋ํ๋์ ๊ด๋ฆฌ๋ฅผ ํ์์ต๋๋ค.
๊ทธ๋ฌ๋ requirements๋ ํ๋์ ๋ํ๋์๋ฅผ ์ค์นํ ๋ ํ์ ์์๊น์ง ์ค์นํด์ฃผ์ง ์์ ์ข ์๋๋ ๋ํ๋์๋ฅผ ์๋์ผ๋ก ์ค์นํด์ผ ํ๋ ๋ถํธํจ์ด ์์ต๋๋ค.
Poetry
Poetry - Python dependency management and packaging made easy.
Intuitive CLI Poetry's commands are intuitive and easy to use, with sensible defaults while still being configurable. Soon extensible with a plugin system
python-poetry.org
Poetry๋ Node.js์ package.json๊ณผ ๋น์ทํ ๋ชจ์ต์ผ๋ก ๋ช ๋ น์ด ํํ๋ก ๋ํ๋์๋ฅผ ์ค์น/์ญ์ ๊ฐ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ๋์ด ์์ด ์ค์นํ๋ ค๋ ๋ํ๋์์ ํ์ ๋ํ๋์๊น์ง ์๋์ผ๋ก ์ค์นํด์ฃผ๋ ํธ๋ฆฌํจ์ ๋ํ์ฌ Python ๊ฐ๋ฐ์ ์์ฃผ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ ๋๊ตฌ์ ๋๋ค. Python 2.7, 3.5 ์ด์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
Mac, Ubuntu์์๋ ์์ ๋งํฌ๋ฅผ ์ด์ฉํด ํ์ดํ ๋ค์ ์ํ๋ ํ์ด์ฌ์ ๋ฒ์ ๋ช ๋ น์ด๋ฅผ ๋ฃ์ด์ฃผ๋ฉด Poetry ์ค์น๊ฐ ์๋ฃ๋ฉ๋๋ค.
Using PyCharm
PyCharm์์ Poetry๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ฌ๊ทธ์ธ ์ค์น์ ๋ช ๊ฐ์ง ์ฃผ์ ์ค์ ์ด ํ์ํฉ๋๋ค.
๋จผ์ ํ๋ฌ๊ทธ์ธ์์ Poetry ํ๋ฌ๊ทธ์ธ์ ์ค์นํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด New environment using ๋ฉ๋ด์ Poetry๋ผ๋ ๋ฉ๋ด๊ฐ ์๊ธฐ๊ฒ ๋ฉ๋๋ค. PyCharm์์ ์๋์ผ๋ก Poetry ๋ช ๋ น์ด์ ์์น๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ ๋ช ๋ น์ด ์์น๋ ๋ณ๋๋ก ์ค์ ํ์ง ์๊ณ , main.py ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ์ต์ ์ ์ฒดํฌ๋ฅผ ๋๋ฅธ ํ ํ๋ก์ ํธ ์์ฑ์ ์งํํด๋ด ์๋ค.
๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ด ํ๋ก์ ํธ๊ฐ ์์ฑ๋๋ฉด์ pyproject.toml ํ์ผ์ด ๋ง๋ค์ด์ง๋๋ค. Poetry์์๋ pyproject.toml ํ์ผ์ ํตํด ๋ํ๋์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
ํ์ผ์ ๋ด์ฉ์ ํ๊ฒจ๋ง ๋ด๋ ์์๋ค์ํผ poetry์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฐํฌ ํ๊ฒฝ ์์ด Node.js์ฒ๋ผ ๊ฐ๋ฐ ํ๊ฒฝ๋ง์ ์ํ ๋ํ๋์๋ฅผ ๋ณ๋๋ก ๋ง๋ จํด์ค๋๋ค.
Management Dependencies
์ด์ Poetry๋ฅผ ์ค์นํ์ผ๋ ๋ํ๋์๋ฅผ ์ด๋ป๊ฒ ์ค์นํ๊ณ ๊ด๋ฆฌํ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
$ poetry add requests
๊ธฐ๋ณธ์ ์ผ๋ก add ๋ช ๋ น์ด๋ฅผ ํตํด ๋ํ๋์๋ฅผ ์ค์นํ ์ ์์ต๋๋ค. ์ด๋ Node.js์์ ์ ๊ณตํ๋ yarn๊ณผ ์ ์ฌํจ์ ์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด pyproject.toml ํ์ผ์๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ฉฐ ๋ฒ์ ์ ๋ช ์ํ์ง ์์ ๊ฒฝ์ฐ ์ต์ ๋ฒ์ ์ ๋ํ๋์๋ฅผ ์ค์นํ๊ฒ ๋ฉ๋๋ค. ์ด์ ๋ง์ถฐ ํ์ ๋ํ๋์๋ ๊ฐ์ด ์ค์นํด์ค๋๋ค.
$ poetry remove requests
๋ํ๋์๋ฅผ ์ ๊ฑฐํ ๊ฒฝ์ฐ remove ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ์ญ์ ํ์ ๋ํ๋์์ ์ํฅ์ ๋ฐ์ต๋๋ค. ๋ง์ฝ ํ์ ๋ํ๋์์ ์ค๋ณต๋๋ ๋ค๋ฅธ ๋ํ๋์๊ฐ ์์ ๊ฒฝ์ฐ ๋ํ๋์ ์ง์ฅ์ ์ ์ํด์ผ ํฉ๋๋ค.
$ poetry add --dev pytest
๊ฐ๋ฐ ํ๊ฒฝ์ ๋ํ ๋ํ๋์๋ฅผ ์ค์ ํ ๋ --dev๋ผ๋ ์ถ๊ฐ ์ธ์๋ฅผ ๋ถ์ฌ์ค๋๋ค.
์ ๊ฑฐํ ๋๋ ๋์ผํ๊ฒ remove ๋ช ๋ น์ด๋ฅผ ์ฃผ๊ณ --dev ์ธ์๋ฅผ ์ฃผ๋ฉด dev dependeny์์ ์ํ๋ ํจํค์ง๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
Architecture
Poetry๋ฅผ ๊ณ์ ์ด์ฉํ๋ฉด์ ์ด๋ฌํ ์๋ฌธ์ ์ด ๋ค ๊ฒ์ ๋๋ค. ๊ธฐ์กด์ PyCharm์์ requirements๋ฅผ ์ฌ์ฉํ ๋๋ Virtualenv๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ง๋ค ๋ค๋ฅด๊ฒ ๋ํ๋์๋ฅผ ์ฃผ๊ธฐ ์ํด ํ๊ฒฝ์ ๋๋์๊ณ , ์ด ํ๊ฒฝ์ ํ๋ก์ ํธ ์์ ํด๋์ venv ํด๋๋ก ์ ๊ณต๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ, Poetry๋ก ํ๊ฒฝ ์ค์ ์ ํ ๋ค, PyCharm ์์ ํ๋ก์ ํธ์ venv ํด๋๊ฐ ์ด๋์๋ ๋ณด์ด์ง ์์ต๋๋ค. ์๋ง ์ด ๋ถ๋ถ์ ์ธ์งํ์ ๋ถ์ด์๋ผ๋ฉด Poetry๋ก ๋ํ๋์ ๊ด๋ฆฌํ ๋ ๋ก์ปฌ ํ๊ฒฝ์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ์ค ์๋ ์์ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์์์ ์คํฌ๋ฆฐ์ท์ ์์ธํ ๋ณด์๋ฉด External Libraries ๋ถ๋ถ์ Poetry ํ๊ฒฝ๊ณผ ํจ๊ป ํ๋ก์ ํธ ์ด๋ฆ์ด ์ ํ์๋ ๊ฒ์ ๋ณด์ค ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฒฝ๋ก์๋ virtualenv ํ๊ฒฝ์ด ์ด๋์ ์ค์น๊ฐ ๋์ด ์๋์ง๊ฐ ๋์ ์๋๋ฐ์. ์ด์ฒ๋ผ Poetry๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ํ๋์ ๊ด๋ฆฌ๋ฅผ Virtualenv๋ฅผ ์์ฑํ ๋ค ์งํํฉ๋๋ค.
requirements๋ ๋ค๋ฅธ ์ ์ ํ๋ก์ ํธ์ venv์ ์์น๊ฐ ์๋ก ๋ค๋ฅธ ์์น์ ์๋ค๋ ์ ์ ๋๋ค. ์ด๋ ๊ฒ ๋์ด ์์์ผ๋ก์จ Git์ด๋ SVN ๋ฑ๊ณผ ๊ฐ์ ํ์ ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ์ ์ค์๋ก ๊ฐ์ ํ๊ฒฝ๊น์ง ์ ๋ก๋ ๋๋ ์ค์๋ฅผ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ Poetry ํ๋ฌ๊ทธ์ธ์ ํตํด ์๋์ผ๋ก ํฐ๋ฏธ๋ ์คํ์ ๊ฐ์ ํ๊ฒฝ์ผ๋ก ์์ด ๋ง์ถฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ๋ํ๋์ ๊ด๋ฆฌ๋ฅผ ์ํด ์์ ์ ์ํ๋ ๋ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
๋ด ํ๋ก์ ํธ ํ๊ฒฝ์ ์ด๋ค ํจํค์ง๊ฐ ์ค์น ๋์๋์ง(ํ์ ๋ํ๋์ ํฌํจ) ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ [File] -> [Settings]๋ฅผ ํด๋ฆญํ์ฌ ์ข์ธก ์ฌ์ด๋๋ฐ์์ Project Python Interpreter๋ฅผ ํด๋ฆญํ๋ฉด ์ค์น๋ ๋ํ๋์๋ฅผ ํ์ธํจ๊ณผ ๋์์ Poetry ํ๊ฒฝ์ ์๋ก ๋ง๋ค๊ณ ์ค์ ํ๋ ๋ฑ ๊ณ ๊ธ์ ์ธ ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
How to deploy
๋ ๋ค๋ฅธ ์๋ฌธ์ ์ด ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฐฐํฌ๋ ์ด๋ค์์ผ๋ก ํ ์ ์์๊น์? ๊ธฐ๋ณธ์ ์ผ๋ก Virtualenv๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฐฐํฌ์ ๋ด๊ฐ ์๋์ผ๋ก poetry ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ Virtualenv๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ๊ฒ์ผ๊น์? PyCharm์์ ํ๋ฌ๊ทธ์ธ์ ์ด์ฉํ์ฌ ์๋์ผ๋ก ์์ฑํ์์ง๋ง ๋ฐฐํฌ๋ฅผ ํด์ผํ ๋ ์ด๋ฐ ๊ณผ์ ์ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ฃ ?
๊ทธ๋ด ๋ Poetry ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๋ ๊ธฐ๋ณธ ์ต์ ์์ virtualenv๋ฅผ ์ฌ์ฉํ์ง ์์์ผ๋ก ์ค์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
$ poetry config virtualenvs.create false
poetry config ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ ํ๊ฒฝ ์์ฑ ์ต์ ์ ์ฌ์ฉํ์ง ์์(false)๋ก ๋ฐ๊พธ๋ฉด ๋ชจ๋ ํ๋ก์ ํธ์ ๋ํด์ Poetry ํ๊ฒฝ ์ฌ์ฉ์ ๋ก์ปฌ ํ๊ฒฝ์ Python์์ ๋์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ์ต์ ์ ๋ฐฐํฌํ ๋๋ง ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์๋ํ๋ฉด ์ต๊ทผ์๋ ์ปจํ ์ด๋๋ฅผ ์ด์ฉํ ๋ฐฐํฌ ํ๊ฒฝ์ด ๊ถ์ฅ๋๊ณ , ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด Docker๋ฅผ ์์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ๋ ์ด๋ค์์ผ๋ก ๊ฐ๋ ๊ฒ์ด ์ข์๊น์?
FROM python:3
MAINTAINER N.K
WORKDIR /usr/src/app
RUN pip install poetry
RUN poetry config virtualenvs.create false
COPY . .
RUN poetry install --no-dev
COPY . .
# CMD []
poetry๋ฅผ ์ค์นํ ์์๋ pip๋ก๋ ์ค์นํ ์ ์๊ธฐ ๋๋ฌธ์ Python์ ๊ธฐ๋ณธ ์ปจํ ์ด๋ ํ๊ฒฝ์์ pip๋ก poetry๋ฅผ ์ค์นํ๊ณ , ๊ฐ์ ํ๊ฒฝ ์ค์น ์ต์ ์ ๋นํ์ฑํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ pyproject.toml์ ์ค์ ๋ ๋ํ๋์๋ฅผ ์ ์ฒด ์ค์นํ ๊ฒฝ์ฐ poetry install ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ ๋ํ๋์๋ฅผ ์ ์ธํ๊ธฐ ์ํด --no-dev ์ธ์๊น์ง ์ถ๊ฐ๋ก ์ค์ ํ๋ฉด ๊น๋ํ ๋ฐฐํฌ ํ๊ฒฝ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋ง์น๋ฉฐ..
์ต๊ทผ Python์ ์์ฃผ ์ฌ์ฉํ๋ฉด์ ๋ํ๋์ ๊ด๋ฆฌ์ ๋ง์ ๋ถํธํจ์ ๋๊ผ์ต๋๋ค. ๊ธฐ์กด์๋ requirements๋ก ์ ์ฌ์ฉํ์๋๋ฐ ์ ๋ํ ์ต๊ทผ๋ค์ด ๊ทธ๋ฐ ๋ถํธํจ์ ์์ฃผ ๋๋ผ๊ฒ ๋ ๊ฒ์ ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ๋ฃ์ด ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์ ๊ฐ๋ฐ์ ํ๊ฒ ๋จ์ผ๋ก์จ ๊ทธ๋ ๊ฒ ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก Poetry๋ฅผ ๋ํ๋์ ๊ด๋ฆฌ์ ์ฌ์ฉํจ์ผ๋ก์จ ํธ๋ฆฌํ๋ ์ ์ ํ์ ๋ํ๋์ ๊ด๋ฆฌ๋ ์์์ง๋ง ๋ฌด์๋ณด๋ค๋ ๋ํ๋์๊ฐ ํผ๋์ด ๋ฐ์๋์์ ๋ ์๋ก ํ๊ฒฝ์ ๊ตฌ์ถํ๊ณ ๋ค์ ์ค์ ํ๋ ๊ฒ์ด ์ฌ์ ๋ค๋ ์ ์ด์์ต๋๋ค. ๋ํ๋์๋ฅผ ๊ด๋ฆฌํ๋ค๋ณด๋ฉด ๋ค๋ฅธ ๋ํ๋์์ ํผ์ ์ด ๋ฐ์ํ์ฌ ์ ๋๋ก ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ์๊ธฐ ์คํ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๊ฐํน ๋ฐ์ํ๊ฒ ๋๋๋ฐ์. requirements๋ฅผ ์ฌ์ฉํ์ ๋๋ venv๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ค์ venv๊น์ง ์ฌ ๊ตฌ์ถํด์ผํ๋ ๋ถํธํจ์ ํธ์ํ๊ณ , ๊ฑฐ๊ธฐ์ ๋๋ถ์ด PyCharm์์ ํด๋น venv ์ ๋ณด๊น์ง ์๋์ผ๋ก ๋ฐ๊ฟ์ผํ๋ค๋ ์ ์ ๊ทธ์ผ๋ง๋ก ์ง์ฅ์ด์์ต๋๋ค.
๊ทธ๋ฌ๋ Poetry๋ ์๋ก์ด ํ๊ฒฝ์ ์ค์ ํ๋ ๋ฐ๋ PyCharm์ ๋ถ์ด ์๋ ํ๋ฌ๊ทธ์ธ๋ค์ด ์น์ ํ๊ฒ ์ํ๋๋๋ก ๋ง๋ค์ด์ฃผ๊ณ ํ๋ก์ ํธ ์ค์ ๋ ์ฝ๊ฒ ํด๋ฆญ๋ง์ผ๋ก ์ด๋ค์ง๋ ๋ถ๋ถ์ด ๋ง์์ผ๋ฉฐ ์ด๋ฐ ๊ธ์ํฉ์ ๋๋นํ ์ ์๋ ์ฐจ์ ์ฑ ์ด ์ ๋ฅผ Poetry๋ก ์ด๋๋ ๋ฐ ์ฃผ์์ ์ด ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.