Pipenv๋ฅผ ๋ง์คํฐํ์ฌ ํ์ด์ฌ ํ๋ก์ ํธ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ ๊ฐ์ ํ๊ฒฝ์ผ๋ก ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ๊ฐ์ํํ์ธ์. ๋ชจ๋ฒ ์ฌ๋ก์ ๊ณ ๊ธ ๊ธฐ์ ์ ๋ฐฐ์๋ณด์ธ์.
Pipenv ๊ฐ์ ํ๊ฒฝ: ์ต์ ํ๋ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ ๊ฐ์ด๋
ํ์ด์ฌ ๊ฐ๋ฐ ์ธ๊ณ์์ ํ๋ก์ ํธ ์์กด์ฑ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์ผ๊ด์ฑ, ์ฌํ์ฑ์ ์ ์งํ๊ณ ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. Pipenv๋ ํจํค์ง ๊ด๋ฆฌ(์: `pip`)์ ๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ(์: `virtualenv`)๋ฅผ ๊ฒฐํฉํ์ฌ ์ด ๊ณผ์ ์ ๋จ์ํํ๋ ๊ฐ๋ ฅํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ๋๊ตฌ๋ก ๋ถ์ํ์ต๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ Pipenv์ ๋ํด ์์์ผ ํ ๋ชจ๋ ๊ฒ, ์ฆ ๊ธฐ๋ณธ ์ค์ ๋ถํฐ ๊ณ ๊ธ ์ฌ์ฉ๋ฒ๊น์ง ์๋ดํ์ฌ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์ต์ ํํ๊ณ ํ๋ก์ ํธ๊ฐ ์ ์ ๋ฆฌ๋๊ณ ์ด์ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ Pipenv๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์?
์์ธํ ๋ด์ฉ์ ์ดํด๋ณด๊ธฐ ์ ์, ์ Pipenv๊ฐ ํ์ด์ฌ ํ๋ก์ ํธ ๊ด๋ฆฌ์ ๋ ๋์ ์ ํ์ธ์ง ์ดํดํด ๋ด ์๋ค. ์ ํต์ ์ธ ๋ฐฉ๋ฒ์ ์ข ์ข `pip`์ `virtualenv`๋ฅผ ๋ณ๋๋ก ์ฌ์ฉํ์ฌ ๋ถ์ผ์น์ ๊ด๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. Pipenv๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค:
- ํจํค์ง ๊ด๋ฆฌ์ ๊ฐ์ ํ๊ฒฝ์ ๊ฒฐํฉ: Pipenv๋ ๋ ๊ธฐ๋ฅ์ ์๋ฒฝํ๊ฒ ํตํฉํ์ฌ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๊ฒฐ์ ๋ก ์ ๋น๋: Pipenv๋ `Pipfile`๊ณผ `Pipfile.lock`์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ค๋ฅธ ํ๊ฒฝ์์ ์ฌํ ๊ฐ๋ฅํ ๋น๋๋ฅผ ๋ณด์ฅํฉ๋๋ค. `Pipfile`์ ํ๋ก์ ํธ์ ์ง์ ์ ์ธ ์์กด์ฑ์ ๋์ดํ๊ณ , `Pipfile.lock`์ ๋ชจ๋ ์์กด์ฑ(์ ์ด ์์กด์ฑ ํฌํจ)์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํ์ฌ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๋ ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๋จ์ํ๋ ์ํฌํ๋ก์ฐ: Pipenv๋ ๊น๋ํ๊ณ ์ง๊ด์ ์ธ ์ปค๋งจ๋ ๋ผ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ์ค์น, ์ ๊ฑฐ, ์์กด์ฑ ๊ด๋ฆฌ์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์์ ์ ๊ฐ๋จํ๊ฒ ๋ง๋ญ๋๋ค.
- ํฅ์๋ ๋ณด์: `Pipfile.lock` ํ์ผ์ ํ๋ก์ ํธ๊ฐ ์ฒ์ ์ค์ ๋์์ ๋์ ๋์ผํ ํจํค์ง ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ์ฌ, ํ ์คํธ๋์ง ์์ ์ ๋ฒ์ ๊ณผ ๊ด๋ จ๋ ๋ณด์ ์ทจ์ฝ์ ์ ์ํ์ ์ค์ ๋๋ค.
- `pyproject.toml` ์ง์: Pipenv๋ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ์ํ ํ๋์ ์ธ `pyproject.toml` ํ์ค์ ์ฑํํ์ฌ ๋ค๋ฅธ ๋น๋ ๋๊ตฌ ๋ฐ ์ํฌํ๋ก์ฐ์ ํธํ๋ฉ๋๋ค.
์ค์น ๋ฐ ์ค์
Pipenv ์ฌ์ฉ์ ์์ํ๊ธฐ ์ ์ ๋จผ์ ์ค์นํด์ผ ํฉ๋๋ค. ๋ค์์ `pip`๋ฅผ ์ฌ์ฉํ์ฌ Pipenv๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๋๋ค:
pip install pipenv
์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ํ์ด์ฌ ํจํค์ง์์ ์ถฉ๋์ ํผํ๊ธฐ ์ํด ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ Pipenv๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ์ํด `pipx`๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
pip install pipx
pipx ensurepath
pipx install pipenv
์ค์น ํ, ๋ฒ์ ์ ํ์ธํ์ฌ Pipenv๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์๋์ง ํ์ธํ์ธ์:
pipenv --version
์ด ๋ช ๋ น์ ์ค์น๋ Pipenv ๋ฒ์ ์ ์ถ๋ ฅํด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: ๊ฐ์ ํ๊ฒฝ ์์ฑ ๋ฐ ๊ด๋ฆฌ
์ ํ๋ก์ ํธ ์์ฑํ๊ธฐ
Pipenv๋ก ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ค๋ฉด ํฐ๋ฏธ๋์์ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ ํ ๋ค์์ ์คํํ์ธ์:
pipenv install
์ด ๋ช ๋ น์ ํ๋ก์ ํธ๋ฅผ ์ํ ์ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ณ , `Pipfile`๊ณผ `Pipfile.lock`์ด ์๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์์ฑํฉ๋๋ค. ๊ฐ์ ํ๊ฒฝ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ ํธ ๋ด์ ์จ๊ฒจ์ง `.venv` ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๊ฑฐ๋ Pipenv๊ฐ ๊ด๋ฆฌํ๋ ์ค์ ์์น์ ์ ์ฅ๋ฉ๋๋ค.
๊ฐ์ ํ๊ฒฝ ํ์ฑํํ๊ธฐ
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ธ์:
pipenv shell
์ด ๋ช ๋ น์ ๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ๋ ์ ์ ธ์ ์ฝ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ปค๋งจ๋ ํ๋กฌํํธ ์์ ๊ดํธ ์์ ๊ฐ์ ํ๊ฒฝ ์ด๋ฆ์ด ํ์๋์ด ํ๊ฒฝ์ด ํ์ฑ ์ํ์์ ๋ํ๋ ๋๋ค.
ํจํค์ง ์ค์นํ๊ธฐ
๊ฐ์ ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด `pipenv install` ๋ช ๋ น ๋ค์์ ํจํค์ง ์ด๋ฆ์ ์ ๋ ฅํ์ธ์:
pipenv install requests
pipenv install flask
์ด ๋ช ๋ น๋ค์ `requests`์ `flask` ํจํค์ง๋ฅผ ์ค์นํ๊ณ `Pipfile`์ ์ถ๊ฐํฉ๋๋ค. Pipenv๋ ์๋์ผ๋ก `Pipfile.lock`์ ์ ๋ฐ์ดํธํ์ฌ ์ค์น๋ ํจํค์ง์ ๊ทธ ์์กด์ฑ์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํฉ๋๋ค.
ํจํค์ง๋ฅผ ์ค์นํ ๋ ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ ํ ์๋ ์์ต๋๋ค:
pipenv install requests==2.26.0
์ด ๋ช ๋ น์ `requests` ํจํค์ง์ 2.26.0 ๋ฒ์ ์ ์ค์นํฉ๋๋ค.
๊ฐ๋ฐ ์์กด์ฑ ์ค์นํ๊ธฐ
์ข ์ข ํ ์คํธ ํ๋ ์์ํฌ๋ ๋ฆฐํฐ์ ๊ฐ์ด ๊ฐ๋ฐ ์ค์๋ง ํ์ํ ํจํค์ง๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ํจํค์ง๋ `--dev` ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์์กด์ฑ์ผ๋ก ์ค์นํ ์ ์์ต๋๋ค:
pipenv install pytest --dev
pipenv install flake8 --dev
์ด ํจํค์ง๋ค์ `Pipfile`์ `[dev-packages]` ์น์ ์ ์ถ๊ฐ๋ฉ๋๋ค.
ํจํค์ง ์ ๊ฑฐํ๊ธฐ
ํจํค์ง๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด `pipenv uninstall` ๋ช ๋ น์ ์ฌ์ฉํ์ธ์:
pipenv uninstall requests
์ด ๋ช ๋ น์ ๊ฐ์ ํ๊ฒฝ์์ `requests` ํจํค์ง๋ฅผ ์ ๊ฑฐํ๊ณ `Pipfile`๊ณผ `Pipfile.lock`์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ค์น๋ ํจํค์ง ๋ชฉ๋ก ๋ณด๊ธฐ
๊ฐ์ ํ๊ฒฝ์ ์ค์น๋ ํจํค์ง ๋ชฉ๋ก์ ๋ณด๋ ค๋ฉด `pipenv graph` ๋ช ๋ น์ ์ฌ์ฉํ์ธ์:
pipenv graph
์ด ๋ช ๋ น์ ์ค์น๋ ํจํค์ง์ ๊ทธ ์์กด์ฑ์ ๋ณด์ฌ์ฃผ๋ ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ํ์ํฉ๋๋ค.
๊ฐ์ ํ๊ฒฝ์์ ๋ช ๋ น์ด ์คํํ๊ธฐ
`pipenv run`์ ์ฌ์ฉํ๋ฉด ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ์ง ์๊ณ ๋ ๊ทธ ์์์ ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค:
pipenv run python your_script.py
์ด ๋ช ๋ น์ ๊ฐ์ ํ๊ฒฝ ๋ด์ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ `your_script.py` ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
๊ณ ๊ธ ์ฌ์ฉ๋ฒ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
`Pipfile` ๋ฐ `Pipfile.lock` ๋ค๋ฃจ๊ธฐ
`Pipfile`๊ณผ `Pipfile.lock`์ Pipenv์์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ํต์ฌ ํ์ผ์ ๋๋ค. `Pipfile`์ ํ๋ก์ ํธ์ ์ง์ ์ ์ธ ์์กด์ฑ์ ๋์ดํ๊ณ , `Pipfile.lock`์ ๋ชจ๋ ์์กด์ฑ(์ ์ด ์์กด์ฑ ํฌํจ)์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํฉ๋๋ค. ์ด ํ์ผ๋ค์ด ์ด๋ป๊ฒ ์๋ํ๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
`Pipfile` ๊ตฌ์กฐ:
`Pipfile`์ ํ๋ก์ ํธ์ ์์กด์ฑ, ํ์ด์ฌ ๋ฒ์ ๋ฐ ๊ธฐํ ์ค์ ์ ๋ํ ์ ๋ณด๋ฅผ ํฌํจํ๋ TOML ํ์ผ์ ๋๋ค. ๋ค์์ ๊ธฐ๋ณธ ์์ ์ ๋๋ค:
[requires]
python_version = "3.9"
[packages]
requests = "*"
flask = "*"
[dev-packages]
pytest = "*"
[source]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
- `[requires]`: ํ๋ก์ ํธ์ ํ์ํ ํ์ด์ฌ ๋ฒ์ ์ ์ง์ ํฉ๋๋ค.
- `[packages]`: ํ๋ก์ ํธ์ ์ง์ ์ ์ธ ์์กด์ฑ์ ๋์ดํฉ๋๋ค. `"*"`๋ ๋ชจ๋ ๋ฒ์ ์ ํ์ฉํจ์ ๋ํ๋ด์ง๋ง, ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- `[dev-packages]`: ๊ฐ๋ฐ ์์กด์ฑ์ ๋์ดํฉ๋๋ค.
- `[source]`: ์ฌ์ฉํ ํจํค์ง ์ธ๋ฑ์ค๋ฅผ ์ง์ ํฉ๋๋ค.
`Pipfile.lock` ๊ตฌ์กฐ:
`Pipfile.lock`์ ๋ชจ๋ ํจํค์ง์ ๊ทธ ์์กด์ฑ์ ์ ํํ ๋ฒ์ ์ ํฌํจํ๋ JSON ํ์ผ์ ๋๋ค. ์ด ํ์ผ์ Pipenv์ ์ํด ์๋์ผ๋ก ์์ฑ๋๊ณ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์ด ํ์ผ์ ์๋์ผ๋ก ํธ์งํด์๋ ์ ๋ฉ๋๋ค.
์์กด์ฑ ์ ๋ฐ์ดํธํ๊ธฐ:
์์กด์ฑ์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด `pipenv update` ๋ช ๋ น์ ์ฌ์ฉํ์ธ์. ์ด ๋ช ๋ น์ `Pipfile`์ ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต์ ๋ฒ์ ์ผ๋ก ๋ชจ๋ ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๊ทธ์ ๋ฐ๋ผ `Pipfile.lock`์ ์ ๋ฐ์ดํธํฉ๋๋ค:
pipenv update
ํน์ ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด `pipenv update` ๋ช ๋ น ๋ค์์ ํจํค์ง ์ด๋ฆ์ ์ ๋ ฅํ์ธ์:
pipenv update requests
๋ค๋ฅธ ํ์ด์ฌ ๋ฒ์ ์ฌ์ฉํ๊ธฐ
Pipenv๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ์ ๋ํ ํ์ด์ฌ ๋ฒ์ ์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค:
pipenv --python 3.9
์ด ๋ช ๋ น์ ํ์ด์ฌ 3.9๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํฉ๋๋ค. Pipenv๋ ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ์ด์ฌ ๋ฒ์ ์ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค. `Pipfile`์์๋ ํ์ด์ฌ ๋ฒ์ ์ ์ง์ ํ ์ ์์ต๋๋ค:
[requires]
python_version = "3.9"
์ฌ๋ฌ ํ๊ฒฝ์์ ์์ ํ๊ธฐ
๋ง์ ํ๋ก์ ํธ์์ ๊ฐ๋ฐ, ํ ์คํธ, ํ๋ก๋์ ๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋ค๋ฅธ ํ๊ฒฝ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ํ๊ฒฝ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, `PIPENV_DEV` ํ๊ฒฝ ๋ณ์๋ฅผ `1`๋ก ์ค์ ํ์ฌ ๊ฐ๋ฐ ์์กด์ฑ์ ์ค์นํ ์ ์์ต๋๋ค:
PIPENV_DEV=1 pipenv install
๋ค๋ฅธ ํ๊ฒฝ์ ๋ํด ๋ค๋ฅธ `Pipfile`์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋ฐ ์์กด์ฑ์ ์ํ `Pipfile.dev`์ ํ๋ก๋์ ์์กด์ฑ์ ์ํ `Pipfile.prod`๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ `PIPENV_PIPFILE` ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ `Pipfile`์ ์ง์ ํ ์ ์์ต๋๋ค:
PIPENV_PIPFILE=Pipfile.dev pipenv install
IDE ๋ฐ ํธ์ง๊ธฐ์์ ํตํฉ
VS Code, PyCharm, Sublime Text์ ๊ฐ์ ๋๋ถ๋ถ์ ์ธ๊ธฐ ์๋ IDE ๋ฐ ํธ์ง๊ธฐ๋ Pipenv๋ฅผ ๋ด์ฅ ์ง์ํฉ๋๋ค. ์ด ํตํฉ์ ํตํด IDE์์ ์ง์ ๊ฐ์ ํ๊ฒฝ๊ณผ ์์กด์ฑ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
VS Code:
VS Code๋ Pipenv ๊ฐ์ ํ๊ฒฝ์ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค. VS Code ์ฐฝ์ ์ค๋ฅธ์ชฝ ํ๋จ์์ ์ฌ์ฉํ ๊ฐ์ ํ๊ฒฝ์ ์ ํํ ์ ์์ต๋๋ค. ๋ํ `settings.json` ํ์ผ์์ `python.pythonPath` ์ค์ ์ ์ง์ ํ์ฌ Pipenv๋ฅผ ์ฌ์ฉํ๋๋ก VS Code๋ฅผ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค:
"python.pythonPath": "${workspaceFolder}/.venv/bin/python"
PyCharm:
PyCharm๋ Pipenv ๊ฐ์ ํ๊ฒฝ์ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค. ํ๋ก์ ํธ ์ธํฐํ๋ฆฌํฐ ์ค์ ์์ ์ฌ์ฉํ ๊ฐ์ ํ๊ฒฝ์ ์ ํํ ์ ์์ต๋๋ค. PyCharm์ ๋ํ Pipenv ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ ๊ฐ์ ํ๊ฒฝ ๋ด์์ ๋ช ๋ น์ ์คํํ๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
๋ณด์ ๊ณ ๋ ค์ฌํญ
Pipenv๋ฅผ ์ฌ์ฉํ ๋ ๋ณด์ ๊ณ ๋ ค์ฌํญ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ํจํค์ง ํด์ ํ์ธ: Pipenv๋ ๋ค์ด๋ก๋ํ ํจํค์ง์ ํด์๋ฅผ ์๋์ผ๋ก ํ์ธํ์ฌ ๋ณ์กฐ๋์ง ์์๋์ง ํ์ธํฉ๋๋ค.
- ์์กด์ฑ์ ์ต์ ์ํ๋ก ์ ์ง: ๋ณด์ ์ทจ์ฝ์ ์ ํจ์นํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ์์กด์ฑ์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ธ์.
- ๊ฐ์ ํ๊ฒฝ ์ฌ์ฉ: ํญ์ ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ์์กด์ฑ์ ๊ฒฉ๋ฆฌํ๊ณ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ถฉ๋์ ๋ฐฉ์งํ์ธ์.
- `Pipfile.lock` ๊ฒํ : ์ฃผ๊ธฐ์ ์ผ๋ก `Pipfile.lock` ํ์ผ์ ๊ฒํ ํ์ฌ ํจํค์ง์ ๊ทธ ์์กด์ฑ์ด ์์๊ณผ ์ผ์นํ๋์ง ํ์ธํ์ธ์.
์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฐ ๋ฌธ์ ํด๊ฒฐ
`Pipfile.lock` ์ถฉ๋
`Pipfile.lock` ์ถฉ๋์ ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ํ๋ก์ ํธ์์ ์์ ํ๊ณ ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ ์์กด์ฑ์ ๊ฐ์ง ๋ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ถฉ๋์ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
- ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ํ์ด์ฌ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ธ์.
- `pipenv update`๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ์์กด์ฑ์ ์ ๋ฐ์ดํธํ์ธ์.
- ์ ๋ฐ์ดํธ๋ `Pipfile.lock`์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ปค๋ฐํ์ธ์.
- ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ `pipenv install`์ ์คํํ์ฌ ํ๊ฒฝ์ ๋๊ธฐํํ๋๋ก ํ์ธ์.
ํจํค์ง ์ค์น ์คํจ
ํจํค์ง ์ค์น ์คํจ๋ ๋คํธ์ํฌ ๋ฌธ์ , ํธํ๋์ง ์๋ ์์กด์ฑ ๋๋ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ฝ๊ณผ ๊ฐ์ ๋ค์ํ ์ด์ ๋ก ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์์ ์๋ํด ๋ณด์ธ์:
- ์ธํฐ๋ท ์ฐ๊ฒฐ์ ํ์ธํ์ธ์.
- ํ์ํ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํ์ธ์.
- ํน์ ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ค์นํด ๋ณด์ธ์.
- ๋์์ ๋ฐ์ผ๋ ค๋ฉด ํจํค์ง์ ๋ฌธ์๋ ์ปค๋ฎค๋ํฐ ํฌ๋ผ์ ์ฐธ์กฐํ์ธ์.
๊ฐ์ ํ๊ฒฝ ํ์ฑํ ๋ฌธ์
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์ ๋จ๊ณ๋ฅผ ์๋ํด ๋ณด์ธ์:
- ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์ ์๋์ง ํ์ธํ์ธ์.
- `pipenv shell`์ ๋ค์ ์คํํด ๋ณด์ธ์.
- ์ฌ์ฉ์ ์ง์ ์ ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๋๋ก ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์.
์ค์ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
Flask ๋๋ Django๋ฅผ ์ฌ์ฉํ ์น ๊ฐ๋ฐ
Pipenv๋ Flask๋ Django์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์น ๊ฐ๋ฐ ํ๋ก์ ํธ์ ํนํ ์ ์ฉํฉ๋๋ค. ์น ํ๋ ์์ํฌ ์์ฒด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅํฐ ๋ฐ ๊ธฐํ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ์์กด์ฑ ๊ด๋ฆฌ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Django ํ๋ก์ ํธ๋ `django`, `psycopg2`(PostgreSQL์ฉ), `djangorestframework`์ ๊ฐ์ ์์กด์ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค. Pipenv๋ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ํจํค์ง์ ๋์ผํ ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ์ฌ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
๋ฐ์ดํฐ ๊ณผํ ํ๋ก์ ํธ
๋ฐ์ดํฐ ๊ณผํ ํ๋ก์ ํธ๋ ์ข ์ข `numpy`, `pandas`, `scikit-learn`, `matplotlib`์ ๊ฐ์ ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํฉ๋๋ค. Pipenv๋ ์ด๋ฌํ ์์กด์ฑ์ ๊ด๋ฆฌํ์ฌ ๋ฐ์ดํฐ ๊ณผํ ํ๊ฒฝ์ด ์ฌ๋ฌ ๋จธ์ ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ผ๊ด๋๋๋ก ๋ณด์ฅํฉ๋๋ค. Pipenv๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฐ์ดํฐ ๊ณผํ์๋ค์ ์์กด์ฑ ์ถฉ๋์ ๋ํ ๊ฑฑ์ ์์ด ๋๋ฃ๋ค๊ณผ ํ๋ก์ ํธ๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ํ๋ก๋์ ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์๋ํ ์คํฌ๋ฆฝํธ ๋ฐ ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ
๋ ์์ ์๋ํ ์คํฌ๋ฆฝํธ๋ ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ์ ๊ฒฝ์ฐ์๋ Pipenv๋ ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ์คํฌ๋ฆฝํธ์ ํ์ํ ์์กด์ฑ์ ๊ฒฉ๋ฆฌํ์ฌ ์์คํ ์ ๋ค๋ฅธ ํ์ด์ฌ ์ค์น์ ๊ฐ์ญํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ๋์ผํ ํจํค์ง์ ๋ค๋ฅธ ๋ฒ์ ์ด ํ์ํ ์ฌ๋ฌ ์คํฌ๋ฆฝํธ๊ฐ ์์ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
์์ : ๊ฐ๋จํ ์น ์คํฌ๋ ์ดํผ
์น์ฌ์ดํธ์์ ๋ฐ์ดํฐ๋ฅผ ์คํฌ๋ ์ดํํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๊ณ ์์ํด ๋ณด์ธ์. HTML ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ `requests` ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฅผ ํ์ฑํ๊ธฐ ์ํ `beautifulsoup4`๊ฐ ํ์ํ ๊ฒ์ ๋๋ค. Pipenv๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์์กด์ฑ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค:
pipenv install requests beautifulsoup4
์ด๋ฅผ ํตํด ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ์์คํ ์ ๊ด๊ณ์์ด ํญ์ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ๋ฐ๋ฅธ ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
Pipenv์ ๋์
Pipenv๋ ํ๋ฅญํ ๋๊ตฌ์ด์ง๋ง, ํ์ด์ฌ ์์กด์ฑ๊ณผ ๊ฐ์ ํ๊ฒฝ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ค๋ฅธ ์ต์ ๋ ์์ต๋๋ค:
- `venv` (๋ด์ฅ): ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ `venv` ๋ชจ๋์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ ํ๊ฒฝ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํจํค์ง ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํฌํจํ์ง ์์ผ๋ฏ๋ก ์ฌ์ ํ `pip`๋ฅผ ๋ณ๋๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- `virtualenv`: ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ธฐ ์ํ ์ธ๊ธฐ ์๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. `venv`์ ๋ง์ฐฌ๊ฐ์ง๋ก ํจํค์ง ๊ด๋ฆฌ๋ฅผ ์ํด `pip`๊ฐ ํ์ํฉ๋๋ค.
- `poetry`: Pipenv์ ์ ์ฌํ๊ฒ ํจํค์ง ๊ด๋ฆฌ์ ๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ๋ฅผ ๊ฒฐํฉํ ๋ ๋ค๋ฅธ ํ๋์ ์ธ ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค. Poetry ๋ํ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ์ํด `pyproject.toml` ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
- `conda`: ํ์ด์ฌ, R, ์๋ฐ์คํฌ๋ฆฝํธ, C, C++, ์๋ฐ ๋ฑ ๋ชจ๋ ์ธ์ด๋ฅผ ์ํ ํจํค์ง, ์์กด์ฑ ๋ฐ ํ๊ฒฝ ๊ด๋ฆฌ ์์คํ ์ ๋๋ค. Conda๋ ์คํ ์์ค์ด๋ฉฐ Anaconda, Inc.์์ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
์ด๋ฌํ ๊ฐ ๋๊ตฌ์๋ ๊ณ ์ ํ ์ฅ๋จ์ ์ด ์์ต๋๋ค. Pipenv๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ํฌํ๋ก์ฐ๊ฐ ํ์ํ ํ๋ก์ ํธ์ ์ข์ ์ ํ์ด๋ฉฐ, Poetry๋ ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด๋ ๋ค๋ฅธ ๋น๋ ๋๊ตฌ์์ ํตํฉ์ด ํ์ํ ํ๋ก์ ํธ์ ์ ํธ๋ ์ ์์ต๋๋ค. `conda`๋ ํผํฉ ์ธ์ด ํ๋ก์ ํธ์ ํ๊ฒฝ์ ๊ด๋ฆฌํ ๋ ๋ฐ์ด๋ฉ๋๋ค. `venv`์ `virtualenv`๋ ๊ธฐ๋ณธ์ ์ธ ํ๊ฒฝ ๊ฒฉ๋ฆฌ์ ์ ์ฉํ์ง๋ง Pipenv์ Poetry์ ์์กด์ฑ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๋ถ์กฑํฉ๋๋ค.
๊ฒฐ๋ก
Pipenv๋ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ํํ๊ณ ์ฌํ ๊ฐ๋ฅํ ๋น๋๋ฅผ ๋ณด์ฅํจ์ผ๋ก์จ ํ์ด์ฌ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค. ํต์ฌ ๊ฐ๋ ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ ์ ์ ๋ฆฌ๋๊ณ , ์ด์ ๊ฐ๋ฅํ๋ฉฐ, ์์ ํ ํ์ด์ฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ํ๋ , Pipenv๋ ์์กด์ฑ์ ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฝ๋ ์์ฑ์ ์ง์คํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
์ด๊ธฐ ์ค์ ๋ถํฐ ๊ณ ๊ธ ๊ตฌ์ฑ๊น์ง, Pipenv๋ฅผ ๋ง์คํฐํ๋ฉด ์์ฐ์ฑ์ด ํฅ์๋๊ณ ์ฌ๋ฌ ๋ค๋ฅธ ํ๋ซํผ๊ณผ ํ์ ๊ฐ์ ์ผ๊ด๋ ํ๊ฒฝ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. Pipenv๋ฅผ ๋ฐ์๋ค์ด๊ณ ํ์ด์ฌ ๊ฐ๋ฐ ๊ฒฝํ์ ํ ๋จ๊ณ ๋์ด์ฌ๋ฆฌ์ธ์.