KR_VirtualEnv - somaz94/python-study GitHub Wiki
ํ์ด์ฌ ๊ฐ์ํ๊ฒฝ์ ํ๋ก์ ํธ๋ณ๋ก ๋
๋ฆฝ๋ ํ์ด์ฌ ํ๊ฒฝ์ ๊ตฌ์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ์ด๋ค. ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ์์ ํ์ํ ํจํค์ง ๋ฒ์ ์ด ์ถฉ๋ํ ๋ ํนํ ์ ์ฉํ๋ค.
๊ฐ์ํ๊ฒฝ์ ์ฃผ์ ๋ชฉ์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ํ๋ก์ ํธ๋ณ ์์กด์ฑ ๊ฒฉ๋ฆฌ
- ์์คํ ํ์ด์ฌ ํ๊ฒฝ ๋ณดํธ
- ์ฌํ ๊ฐ๋ฅํ ๊ฐ๋ฐ ํ๊ฒฝ ์ ๊ณต
- ๋ฐฐํฌ ํ๊ฒฝ๊ณผ์ ์ผ๊ด์ฑ ์ ์ง
# venv ์์ฑ
python -m venv myenv
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ
# Windows
myenv\Scripts\activate
# Linux/Mac
source myenv/bin/activate
# ๊ฐ์ํ๊ฒฝ ๋นํ์ฑํ
deactivate
# ํ์ฌ ์ค์น๋ ํจํค์ง ํ์ธ
pip list
# ํจํค์ง ์ค์น
pip install package_name
# ํน์ ๋ฒ์ ์ค์น
pip install package_name==1.0.0
# ํจํค์ง ์
๊ทธ๋ ์ด๋
pip install --upgrade package_name
# ์๊ตฌ์ฌํญ ํ์ผ ์์ฑ
pip freeze > requirements.txt
# ์๊ตฌ์ฌํญ ํ์ผ๋ก๋ถํฐ ์ค์น
pip install -r requirements.txt
# ํจํค์ง ์ ๊ฑฐ
pip uninstall package_name
โ
ํน์ง:
- ๋ ๋ฆฝ๋ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ ํ๊ฒฝ ์ ๊ณต
- ํ๋ก์ ํธ๋ณ ํจํค์ง ๊ด๋ฆฌ๋ก ์์กด์ฑ ์ถฉ๋ ๋ฐฉ์ง
- ์์คํ ํ์ด์ฌ ํ๊ฒฝ ์ค์ผ ๋ฐฉ์ง
- ํจํค์ง ๋ฒ์ ๋ช ์๋ฅผ ํตํ ์ฌํ ๊ฐ๋ฅํ ํ๊ฒฝ ๊ตฌ์ฑ
- ํ๋ก์ ํธ ์ด์์ฑ ํฅ์
virtualenvwrapper๋ ์ฌ๋ฌ ๊ฐ์ํ๊ฒฝ์ ํธ๋ฆฌํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ๋๊ตฌ์ด๋ค. ๊ฐ์ํ๊ฒฝ ์์ฑ, ์ญ์ , ์ ํ ๋ฑ์ ์์
์ ๊ฐ์ํํด์ค๋ค.
# virtualenvwrapper ์ค์น
pip install virtualenvwrapper
# Windows์ ๊ฒฝ์ฐ
pip install virtualenvwrapper-win
# ํ๊ฒฝ ๋ณ์ ์ค์ (.bashrc ๋๋ .zshrc์ ์ถ๊ฐ)
export WORKON_HOME=$HOME/.virtualenvs # ๊ฐ์ํ๊ฒฝ ์ ์ฅ ์์น
export PROJECT_HOME=$HOME/projects # ํ๋ก์ ํธ ์ ์ฅ ์์น
source /usr/local/bin/virtualenvwrapper.sh
# ์ ๊ฐ์ํ๊ฒฝ ์์ฑ
mkvirtualenv myproject
# ํน์ ํ์ด์ฌ ๋ฒ์ ์ผ๋ก ๊ฐ์ํ๊ฒฝ ์์ฑ
mkvirtualenv -p python3.8 myproject
# ๊ฐ์ํ๊ฒฝ ๋ชฉ๋ก ๋ณด๊ธฐ
workon
# ํน์ ๊ฐ์ํ๊ฒฝ์ผ๋ก ์ ํ
workon myproject
# ๊ฐ์ํ๊ฒฝ ์ญ์
rmvirtualenv myproject
# ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์ ๊ฐ์ํ๊ฒฝ ์ฐ๊ฒฐ
mkproject newproject
# ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ก์ ํธ๋ก ์ค์
setvirtualenvproject
# ๊ฐ์ํ๊ฒฝ ๋ณต์
cpvirtualenv source_env target_env
โ
ํน์ง:
- ์ค์ ์ง์ค์ ๊ฐ์ํ๊ฒฝ ๊ด๋ฆฌ
- ํ๊ฒฝ ๊ฐ ๋น ๋ฅธ ์ ํ ๊ธฐ๋ฅ ์ ๊ณต
- ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์ ๊ฐ์ํ๊ฒฝ ์ฐ๋
- ํ๊ฒฝ ์ค์ ์๋ํ (postactivate, predeactivate ํ )
- ํ๊ฒฝ ๋ชฉ๋ก ๊ด๋ฆฌ ๋ฐ ํ์ ์ฉ์ด
- ํญ ์์ฑ ์ง์์ผ๋ก ๋ช ๋ น์ด ์ ๋ ฅ ํธ์์ฑ ํฅ์
Poetry๋ ํ๋์ ์ธ ํ์ด์ฌ ์์กด์ฑ ๊ด๋ฆฌ ๋ฐ ํจํค์ง ๋๊ตฌ์ด๋ค. ํจํค์ง ๋ฒ์ ํด๊ฒฐ, ์์กด์ฑ ๊ด๋ฆฌ, ํ๋ก์ ํธ ๋น๋์ ์ด๋ฅด๋ ์ ์ฒด ์ํฌํ๋ก์ฐ๋ฅผ ์ง์ํ๋ค.
Poetry์ ํต์ฌ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค:
- ์ ํํ ์์กด์ฑ ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ๋ฐ๊ณผ ํ๋ก๋์ ์์กด์ฑ ๊ตฌ๋ถ
- ๋ฝ ํ์ผ์ ํตํ ์์กด์ฑ ์ ๊ธ
- ํ์ด์ฌ ํจํค์ง ๋น๋ ๋ฐ ๋ฐฐํฌ ๊ธฐ๋ฅ
# Poetry ์ค์น
curl -sSL https://install.python-poetry.org | python3 -
# ์ ํ๋ก์ ํธ ์์ฑ
poetry new myproject
# ๊ธฐ์กด ํ๋ก์ ํธ์ Poetry ์ด๊ธฐํ
poetry init
# ์์กด์ฑ ์ถ๊ฐ
poetry add requests
# ๊ฐ๋ฐ ์์กด์ฑ ์ถ๊ฐ
poetry add pytest --dev
# ์์กด์ฑ ์ค์น
poetry install
# ํ๋ก๋์
์์กด์ฑ๋ง ์ค์น
poetry install --no-dev
# ๊ฐ์ํ๊ฒฝ ์คํ
poetry shell
# ์คํฌ๋ฆฝํธ ์คํ
poetry run python script.py
# ์์กด์ฑ ์
๋ฐ์ดํธ
poetry update
# ํ์ฌ ์์กด์ฑ ๋ณด๊ธฐ
poetry show
# ์ทจ์ฝ์ ๊ฒ์ฌ
poetry check
# ํจํค์ง ๋น๋
poetry build
# ํจํค์ง ๊ฒ์
poetry publish
โ
ํน์ง:
-
pyproject.toml
ํ์ผ์ ์ฌ์ฉํ ํ์คํ๋ ๊ตฌ์ฑ - ์์กด์ฑ ๋ฒ์ ์ถฉ๋ ์๋ ํด๊ฒฐ
- ์ ํํ๊ณ ๊ฒฐ์ ์ ์ธ ์ ๊ธ ํ์ผ ์์ฑ
- ํตํฉ ๋น๋ ์์คํ ์ผ๋ก ํจํค์ง ๋ฐฐํฌ ๊ฐ์ํ
- ํ๊ฒฝ ๊ฒฉ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ํ๊ฒฝ ์๋ ์์ฑ
- ์์กด์ฑ ๊ทธ๋ํ ์๊ฐํ ์ง์
- ๊ตฌ์กฐํ๋ ํ๋ก์ ํธ ํ ํ๋ฆฟ ์ ๊ณต
Pipenv๋ pip์ virtualenv๋ฅผ ๊ฒฐํฉํ์ฌ ํ๋ก์ ํธ๋ณ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ ๋๊ตฌ์ด๋ค. Pipfile๊ณผ Pipfile.lock์ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ๋ช
์ํ๊ณ ์ถ์ ํ๋ค.
Pipenv์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ์๋ ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ๊ด๋ฆฌ
- ํจํค์ง ์ค์น ๋ฐ ์ ๊ฑฐ ์ Pipfile ์๋ ์ ๋ฐ์ดํธ
- ํ์ ์์กด์ฑ์ ํฌํจํ ๋ชจ๋ ํจํค์ง์ ํด์ ๊ฒ์ฆ
- ์์กด์ฑ ๊ทธ๋ํ ์๊ฐํ
# Pipenv ์ค์น
pip install pipenv
# ์ ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํจํค์ง ์ค์น
pipenv install requests
# ๊ฐ๋ฐ ์์กด์ฑ ์ค์น
pipenv install pytest --dev
# ํน์ ๋ฒ์ ์ค์น
pipenv install requests==2.25.1
# ๊ฐ์ํ๊ฒฝ ์คํ
pipenv shell
# ์คํฌ๋ฆฝํธ ์คํ
pipenv run python script.py
# ์์กด์ฑ ์ ๊ธ
pipenv lock
# ์์กด์ฑ ๊ทธ๋ํ ํ์ธ
pipenv graph
# ์ทจ์ฝ์ ๊ฒ์ฌ
pipenv check
# ๊ฐ์ํ๊ฒฝ ์์น ํ์ธ
pipenv --venv
# ๊ฐ์ํ๊ฒฝ ์ ๊ฑฐ
pipenv --rm
โ
ํน์ง:
- Pipfile๊ณผ Pipfile.lock์ผ๋ก ์์กด์ฑ ๋ช ํํ ๋ฌธ์ํ
- ๊ฐ๋ฐ ๋ฐ ํ๋ก๋์ ์์กด์ฑ ๋ถ๋ฆฌ
- ๋ณด์ ์ทจ์ฝ์ ์๋ ๊ฒ์ฌ ๊ธฐ๋ฅ
- ์ ์ฐํ ํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ (.env ํ์ผ ์๋ ๋ก๋ฉ)
- ํ์ ์์กด์ฑ ํด์ ๊ฒ์ฆ์ผ๋ก ์์ ํ ํจํค์ง ์ค์น
- pip์ virtualenv ๊ธฐ๋ฅ ํตํฉ์ผ๋ก ์ผ๊ด๋ ์ํฌํ๋ก์ฐ
- ์์กด์ฑ ์ถ๊ฐ/์ ๊ฑฐ ์ ์์กด์ฑ ํธ๋ฆฌ ์๋ ์ ๋ฐ์ดํธ
Conda๋ ์คํ์์ค ํจํค์ง ๋ฐ ํ๊ฒฝ ๊ด๋ฆฌ ์์คํ
์ผ๋ก, ๋ฐ์ดํฐ ๊ณผํ ๋ฐ ๊ณผํ ์ปดํจํ
๋ถ์ผ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ค. ๋ค์ํ ์ธ์ด(Python, R ๋ฑ)์ ํจํค์ง๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
Conda์ ์ฃผ์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ๋ฐ์ด๋๋ฆฌ ํจํค์ง ๋ฐฐํฌ๋ก ๋ณต์กํ ๊ณผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐํธ ์ค์น
- ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ง์
- ํ๋ซํผ ๊ฐ ์ผ๊ด๋ ํ๊ฒฝ ๊ตฌ์ฑ
- ์ปค๋ฎค๋ํฐ ์ฑ๋์ ํตํ ๋ค์ํ ํจํค์ง ์ ๊ณต
# Conda ์ค์น (Miniconda ๋๋ Anaconda)
# https://docs.conda.io/en/latest/miniconda.html
# Conda ํ๊ฒฝ ์์ฑ
conda create --name myenv python=3.8
# ํ๊ฒฝ ํ์ฑํ
conda activate myenv
# ํ๊ฒฝ ๋นํ์ฑํ
conda deactivate
# ํจํค์ง ์ค์น
conda install numpy pandas
# ํน์ ์ฑ๋์์ ํจํค์ง ์ค์น
conda install -c conda-forge matplotlib
# ํจํค์ง ์
๋ฐ์ดํธ
conda update numpy
# ํ๊ฒฝ ๋ด ๋ชจ๋ ํจํค์ง ์
๋ฐ์ดํธ
conda update --all
# ํ๊ฒฝ ๋ชฉ๋ก ํ์ธ
conda env list
# ํจํค์ง ๋ชฉ๋ก ํ์ธ
conda list
# ํ๊ฒฝ ๋ด๋ณด๋ด๊ธฐ
conda env export > environment.yml
# ํ๊ฒฝ ๊ฐ์ ธ์ค๊ธฐ
conda env create -f environment.yml
# ํ๊ฒฝ ๋ณต์
conda create --name clone_env --clone myenv
# ํ๊ฒฝ ์ ๊ฑฐ
conda env remove --name myenv
# ์ฌ์ฉํ์ง ์๋ ํจํค์ง ์ ๋ฆฌ
conda clean --all
โ
ํน์ง:
- ๊ณผํ ๊ณ์ฐ ๋ฐ ๋ฐ์ดํฐ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ต์ ํ
- Python ์ธ ๋ค๋ฅธ ์ธ์ด ํจํค์ง ํตํฉ ๊ด๋ฆฌ
- ๋ฐ์ด๋๋ฆฌ ํธํ์ฑ ๋ฌธ์ ์๋ ํด๊ฒฐ
- ์ปดํ์ผ๋ฌ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์๋ ์ฒ๋ฆฌ
- ํฌ๋ก์ค ํ๋ซํผ ํ๊ฒฝ ์ผ๊ด์ฑ ๋ณด์ฅ
- conda-forge ๋ฑ ์ปค๋ฎค๋ํฐ ์ฑ๋ ํ์ฉ ๊ฐ๋ฅ
- ๊ฐ์ํ๊ฒฝ์ ์์ ํ ๊ฒฉ๋ฆฌ๋ก ์์คํ ๋ณดํธ
pyenv๋ ์ฌ๋ฌ ๋ฒ์ ์ ํ์ด์ฌ์ ์์คํ
์ ์ค์นํ๊ณ ์ ํํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ์ด๋ค. ํ๋ก์ ํธ๋ณ๋ก ๋ค๋ฅธ ํ์ด์ฌ ๋ฒ์ ์ด ํ์ํ ๋ ์ ์ฉํ๋ค.
pyenv์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ๋ค์ํ ๋ฒ์ ์ ํ์ด์ฌ ์ค์น ๋ฐ ๊ด๋ฆฌ
- ์ ์ญ ๋๋ ๋๋ ํ ๋ฆฌ๋ณ ํ์ด์ฌ ๋ฒ์ ์ง์
- virtualenv์์ ํตํฉ
# pyenv ์ค์น (Linux/macOS)
# https://github.com/pyenv/pyenv#installation
# ์ค์น ๊ฐ๋ฅํ ํ์ด์ฌ ๋ฒ์ ํ์ธ
pyenv install --list
# ํน์ ๋ฒ์ ์ค์น
pyenv install 3.9.7
# ์ค์น๋ ๋ฒ์ ๋ชฉ๋ก ํ์ธ
pyenv versions
# ์ ์ญ ํ์ด์ฌ ๋ฒ์ ์ค์
pyenv global 3.9.7
# ๋๋ ํ ๋ฆฌ๋ณ ํ์ด์ฌ ๋ฒ์ ์ค์
pyenv local 3.8.12
# ํ์ฌ ์ธ์
์ ํ์ด์ฌ ๋ฒ์ ์ค์
pyenv shell 3.7.12
# pyenv-virtualenv ํ๋ฌ๊ทธ์ธ์ ํตํ ๊ฐ์ํ๊ฒฝ ์์ฑ
pyenv virtualenv 3.9.7 myproject
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ
pyenv activate myproject
# ๊ฐ์ํ๊ฒฝ ๋นํ์ฑํ
pyenv deactivate
# ๊ฐ์ํ๊ฒฝ ์ญ์
pyenv uninstall myproject
โ
ํน์ง:
- ์ฌ๋ฌ ํ์ด์ฌ ๋ฒ์ ์ ์ฌ์ด ์ ํ ๋ฐ ๊ด๋ฆฌ
- ํ๋ก์ ํธ๋ณ ํ์ด์ฌ ๋ฒ์ ์๋ ์ ํ (.python-version ํ์ผ)
- ์์คํ ํ์ด์ฌ ๋ณ๊ฒฝ ์์ด ๋ค์ํ ๋ฒ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋น๋ ์ต์ ์ปค์คํฐ๋ง์ด์ง ์ง์
- ํ๋ฌ๊ทธ์ธ ์์คํ ์ ํตํ ๊ธฐ๋ฅ ํ์ฅ
- ๋ ๊ฑฐ์ ํ๋ก์ ํธ ์ง์์ ์ํ ์ด์ ๋ฒ์ ํ์ด์ฌ ์ ์ง ๊ฐ๋ฅ
- ํ์ด์ฌ ๊ฐ๋ฐ ๋ฒ์ ๋ฐ ํฌํฌ ๋ฒ์ ์ค์น ์ง์
โ
๋ชจ๋ฒ ์ฌ๋ก:
-
ํ๋ก์ ํธ๋ณ ๋ ๋ฆฝ ํ๊ฒฝ ๊ตฌ์ฑ: ๋ชจ๋ ํ๋ก์ ํธ์ ๋ ๋ฆฝ๋ ๊ฐ์ํ๊ฒฝ์ ์ฌ์ฉํ์ฌ ์์กด์ฑ ์ถฉ๋์ ๋ฐฉ์งํ์.
-
์์กด์ฑ ๋ฒ์ ๋ช ์: ๋ชจ๋ ํจํค์ง์ ๋ฒ์ ์ ๋ช ํํ ์ง์ ํ์ฌ ์ฌํ ๊ฐ๋ฅํ ํ๊ฒฝ์ ๊ตฌ์ฑํ์.
-
๊ฐ๋ฐ/์ด์ ํ๊ฒฝ ๋ถ๋ฆฌ: ๊ฐ๋ฐ ๋๊ตฌ๋ ๊ฐ๋ฐ ์์กด์ฑ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ํ๋ก๋์ ํ๊ฒฝ์ ๋ถํ์ํ ํจํค์ง๊ฐ ์ค์น๋์ง ์๋๋ก ํ์.
-
ํ๋ก์ ํธ์ ๋ง๋ ๋๊ตฌ ์ ํ:
- ๋จ์ํ ํ๋ก์ ํธ:
venv
- ์ฌ๋ฌ ํ๋ก์ ํธ ๊ด๋ฆฌ:
virtualenvwrapper
- ๊ณผํ/๋ฐ์ดํฐ ํ๋ก์ ํธ:
conda
- ํจํค์ง ๋ฐฐํฌ ํ์:
poetry
- ์์กด์ฑ ๊ด๋ฆฌ ์ค์ฌ:
pipenv
- ๋จ์ํ ํ๋ก์ ํธ:
-
๋ฒ์ ์ปจํธ๋กค์ ํ๊ฒฝ ์ ์ ํ์ผ ํฌํจ:
requirements.txt
,Pipfile
,pyproject.toml
,environment.yml
๋ฑ์ ๋ฒ์ ๊ด๋ฆฌ์ ํฌํจํ์. -
๊ฐ์ํ๊ฒฝ ๋๋ ํ ๋ฆฌ ์ ์ธ: ๊ฐ์ํ๊ฒฝ ์์ฒด๋
.gitignore
์ ํฌํจ์์ผ ๋ฒ์ ๊ด๋ฆฌ์์ ์ ์ธํ์. -
CI/CD ํ์ดํ๋ผ์ธ ํ์ฉ: ๋ฐฐํฌ ์ ๋์ผํ ํ๊ฒฝ ๊ตฌ์ฑ ๋ช ๋ น์ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ์.
-
์ฃผ๊ธฐ์ ์ธ ์์กด์ฑ ๊ฒ์ฌ: ๋ณด์ ์ทจ์ฝ์ ๋ฐ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ํจํค์ง๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ํ์ธํ์.
-
ํ๋ก์ ํธ ๋ฌธ์์ ํ๊ฒฝ ์ค์ ๋ฐฉ๋ฒ ํฌํจ: README ํ์ผ์ ํ๊ฒฝ ์ค์ ๋จ๊ณ๋ฅผ ๋ช ํํ ๊ธฐ์ ํ์ฌ ํ์ ์ ์ฉ์ดํ๊ฒ ํ์.
-
ํ๊ฒฝ ๋ณ์ ๋ถ๋ฆฌ: ๋ฏผ๊ฐํ ์ ๋ณด๋
.env
ํ์ผ์ด๋ ํ๊ฒฝ ๋ณ์๋ก ๋ถ๋ฆฌํ๊ณ ๋ฒ์ ๊ด๋ฆฌ์์ ์ ์ธํ์.