[μ€μΉ] pyenv μ΄μ μ€κ³
μλ³Έ κ²μκΈ: https://velog.io/@euisuk-chung/Goodbye-Conda-Hello-PyENV
Anaconda(Conda)
λ λ¨Έμ λ¬λ, λ°μ΄ν°κ³Όν λΆμΌμ λ€μν λΌμ΄λΈλ¬λ¦¬λ€μ΄ μ€μΉλ λ°νμμΈ μλμ½λ€ νμ΄μ¬μμ κΈ°λ³Έμ μΌλ‘ μ 곡λλ κ°μνκ²½ λͺ¨λμ
λλ€. μλμ½λ€λ λΌμ΄μΌμ€ λ¬Έμ κ° μλ λ° ν/νμ¬ λ±μμ μ¬μ© μ λΌμ΄μΌμ€λ₯Ό ꡬ맀ν΄μΌ νλ€λ μ‘°νμ΄ μμ΅λλ€.
π‘ Anaconda is a commercial distribution of Python with the most popular python libraries, you are not permitted to use Anaconda in an organisation with more than 200 employees. - Anaconda
λ μ΄μ λΌμ΄μΌμ€ λ¬Έμ λ‘ μ½λ€λ₯Ό μ¬μ©ν μ μλ μν©μμ λ체ν λ§ν κ°μ νκ²½ λͺ¨λμ μ΄μ¬ν μ°Ύμ보λ μ€ virtualenv
, venv
, pyenv
, pipenv
μ΄ μλ κ²μ νμΈνκ³ , μ΄μ λν΄ κ°λ¨ν μ‘°μ¬λ₯Ό μννμ΅λλ€. μλλ λ³Έ λΈλ‘κ·Έ ν¬μ€νΈμ κ΄λ ¨μλ μ©μ΄λ€μ μ 리ν λ΄μ©μ
λλ€.
-
pip
: pipλ Python ν¨ν€μ§ μΈμ€ν¨λ¬λ‘, Python ν¨ν€μ§λ₯Ό μ€μΉνκ³ κ΄λ¦¬νλ νμ€ λꡬμ λλ€.PyPI(Python Package Index)μμ ν¨ν€μ§λ₯Ό μ°Ύμ μ€μΉν μ μμΌλ©°, μꡬμ¬ν νμΌ(requirements.txt)μ ν΅ν΄ μ¬λ¬ ν¨ν€μ§λ₯Ό μΌκ΄ μ€μΉνλ κ²λ κ°λ₯ν©λλ€.
-
venv
: venvλ Python 3.3 λ²μ μ΄μμμ κΈ°λ³Έμ μΌλ‘ μ 곡λλ κ°μ νκ²½ μμ± λꡬμ λλ€.μ΄ λꡬλ₯Ό μ¬μ©νλ©΄ κ° νλ‘μ νΈμ λ 립λ Python νκ²½μ μμ±ν μ μμ΄, μλ‘ λ€λ₯Έ νλ‘μ νΈμμ μλ‘ λ€λ₯Έ ν¨ν€μ§ λ²μ μ κ΄λ¦¬ν μ μμ΅λλ€.
virtualenv
: virtualenvλ venvλ³΄λ€ λ μ€λμ λΆν° μ¬μ©λμ΄ μ¨ κ°μ νκ²½ λꡬλ‘, venvκ° λμ€κΈ° μ μ λ리 μ¬μ©λμμ΅λλ€. venvμ λ§μ°¬κ°μ§λ‘ λ 립λ Python νκ²½μ μ 곡νμ§λ§, μ΄μ λ²μ μ Pythonμμλ μ¬μ©ν μ μμΌλ©° μΆκ°μ μΈ κΈ°λ₯μ μ 곡ν©λλ€. (λ³λμ μ€μΉ νμ)-
pyenv
: pyenvλ λ€μν λ²μ μ Pythonμ μ€μΉνκ³ κ΄λ¦¬ν μ μκ² ν΄μ£Όλ λꡬμ λλ€.pyenvλ₯Ό μ¬μ©νλ©΄ μμ€ν μ κΈ°λ³Έ Python λ²μ μ λ³κ²½νμ§ μκ³ λ, νλ‘μ νΈλ³λ‘ λ€λ₯Έ Python λ²μ μ μ¬μ©ν μ μμ΅λλ€.(λ³λμ μ€μΉ νμ)
-
pipenv
: pipenvλ ν¨ν€μ§ κ΄λ¦¬μ κ°μ νκ²½ κ΄λ¦¬λ₯Ό νλμ λκ΅¬λ‘ ν΅ν©ν κ²μ λλ€.Pipfileκ³Ό Pipfile.lockμ μ¬μ©νμ¬ ν¨ν€μ§μ μμ‘΄μ±μ κ΄λ¦¬νλ©°, κ°μ νκ²½μ μλμΌλ‘ μμ±νκ³ κ΄λ¦¬ν μ μμ΅λλ€.(λ³λμ μ€μΉ νμ)
μ΄λ² κΈμμλ νμ΄μ¬ λ²μ 컨νΈλ‘€μ ν΅ν΄ λ²μ λ³λ‘ κ°μνκ²½μ λ§λ€ μ μλ pyenv
μ λν κΈμ μμ±ν΄λ³΄λ‘ νκ² μ΅λλ€. λ€μ νΈμλ νμ΄μ¬ λ²μ κ΄λ¦¬λ₯Ό μν PyENVμ ν¨κ» ν¨ν€μ§ κ΄λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ νκ² ν΄μ£Όλ pipenv
μ λν΄μ μκ°νκ³ μ΄λ₯Ό νμ©ν΄μ κ°λ°/λΆμ νκ²½μ μ€μ ν΄λ³΄λλ‘ νκ² μ΅λλ€.
PyENV
μμμλ κ°λ³κ² μκ°νκΈ΄ νμ§λ§, PyENVλ λ€μν λ²μ μ νμ΄μ¬μ κ΄λ¦¬νκ³ μ¬μ©ν μ μκ² ν΄μ£Όλ μΈκΈ° μλ λꡬμ λλ€. νΉν ν μμ€ν μμ μ¬λ¬ νμ΄μ¬ λ²μ μ κ°νΈνκ² μ€μΉνκ³ μ νν μ μλλ‘ μ§μν©λλ€. μ΄λ νμ΄μ¬ κ°λ°μλ μμ€ν κ΄λ¦¬μκ° μ¬λ¬ νλ‘μ νΈμμ λ€μν νμ΄μ¬ λ²μ μ νΈνμ±μ μ μ§νλ©΄μ μμ ν μ μλλ‘ λμ΅λλ€.
PyENVλ₯Ό μ¬μ©νλ μ΄μ
- λ€μ€ νμ΄μ¬ λ²μ κ΄λ¦¬: νλ‘μ νΈλ§λ€ μꡬνλ νμ΄μ¬ λ²μ μ΄ λ€λ₯Ό μ μμ΅λλ€. PyENVλ₯Ό μ¬μ©νλ©΄ μμ€ν μ κΈ°λ³Έ νμ΄μ¬ νκ²½μ λ³κ²½νμ§ μκ³ λ μ¬λ¬ λ²μ μ νμ΄μ¬μ μ€μΉνκ³ κ΄λ¦¬ν μ μμ΅λλ€.
- νκ²½ λΆλ¦¬: PyENVλ κ° νλ‘μ νΈλ³λ‘ λ 립μ μΈ νμ΄μ¬ νκ²½μ μ€μ ν μ μλλ‘ λμμ€λλ€. μ΄λ₯Ό ν΅ν΄ μλ‘ λ€λ₯Έ μμ‘΄μ±μ κ°μ§ νλ‘μ νΈκ° μλ‘ μν₯μ λ―ΈμΉμ§ μκ³ λ 립μ μΌλ‘ μλν μ μμ΅λλ€.
- κ°νΈν λ²μ μ ν: PyENVλ₯Ό μ¬μ©νλ©΄ 컀맨λ λΌμΈ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μ½κ² νμ΄μ¬ λ²μ μ μ νν μ μμ΅λλ€. μ΄λ κ°λ° μ€μ νΉμ νμ΄μ¬ λ²μ μΌλ‘μ ν μ€νΈλ₯Ό λΉ λ₯΄κ² μνν μ μκ² ν΄μ€λλ€.
- νΈνμ± ν μ€νΈ: λ€μν νμ΄μ¬ λ²μ μμ μ ν리μΌμ΄μ μ ν μ€νΈνκ³ μΆμ λ PyENVλ μ΄λ₯Ό κ°νΈνκ² λ§λ€μ΄ μ€λλ€. μ΄λ μννΈμ¨μ΄κ° λ€μν νκ²½μμλ μ λλ‘ μλνλμ§ λ³΄μ₯νλ λ° μ€μν©λλ€.
- μμ€ν νμ΄μ¬κ³Όμ λ 립μ±: PyENVλ μμ€ν μ μ¬μ μ μ€μΉλ νμ΄μ¬μ μμ‘΄νμ§ μκ³ μλν©λλ€. μ΄λ μμ€ν νμ΄μ¬μ λ³κ²½νκ±°λ μ κ·Έλ μ΄λνμ§ μκ³ λ μλ‘μ΄ λ²μ μ νμ΄μ¬μ μνν΄ λ³Ό μ μκ² ν΄μ€λλ€.
PyENVμ μλ λ°©μ
PyENVλ μ¬μ©μμ ν λλ ν 리μ .pyenv
λΌλ λλ ν 리λ₯Ό μμ±νκ³ , μ¬κΈ°μ μ¬λ¬ λ²μ μ νμ΄μ¬μ μ€μΉν©λλ€. μ΄ν νκ²½ μ€μ μ ν΅ν΄ PATH
νκ²½ λ³μμ μ΄ λλ ν 리λ₯Ό μΆκ°νμ¬, ν°λ―Έλμμ νμ΄μ¬μ μ€νν λ PyENVκ° κ΄λ¦¬νλ λ²μ μ μ°μ μ μΌλ‘ μ¬μ©νλλ‘ ν©λλ€. λν, pyenv init
λͺ
λ Ήμ μ¬μ©νμ¬ μμ ꡬμ±νκ³ , νμ΄μ¬ λ²μ μ μ½κ² μ νν μ μλ νκ²½μ μ 곡ν©λλ€.
PyENVλ νμ΄μ¬ λ²μ κ΄λ¦¬λΏλ§ μλλΌ pyenv-virtualenv
νλ¬κ·ΈμΈμ ν΅ν΄ κ° λ²μ μ λν κ°μ νκ²½λ κ΄λ¦¬ν μ μμ΄, κ°λ°μμ μμ
μ λμ± ν¨μ¨μ μΌλ‘ λ§λ€μ΄ μ€λλ€. μ΄λ¬ν κΈ°λ₯ λλΆμ PyENVλ νμ΄μ¬ κ°λ°μλ€ μ¬μ΄μμ νμμ μΈ λκ΅¬λ‘ μ리μ‘κ³ μμ΅λλ€.
PyENV μ€μΉ λ° μ€μ λ°©λ²
PyENVλ₯Ό μ€μΉνκ³ μ€μ νλ κ³Όμ μ μ¬λ¬ λ¨κ³λ‘ λλμ΄μ§λλ€. μ΄ κ³Όμ μ ν΅ν΄ μ¬λ¬ νμ΄μ¬ λ²μ μ μ½κ² κ΄λ¦¬νκ³ νμμ λ°λΌ λ²μ μ μ νν μ μμ΅λλ€. μλμμλ μ°λΆν¬ μμ€ν μ κΈ°μ€μΌλ‘ PyENVλ₯Ό μ€μΉνκ³ νκ²½μ μ€μ νλ λ¨κ³λ³ λ°©λ²μ μ€λͺ ν©λλ€.
βοΈ μλλ LINUX μμ€ν μ κΈ°μ λ‘ μ€λͺ νκ³ μμ΅λλ€. PyENVλ₯Ό Windowsμ μ€μΉνλ λ°©λ²μ λ³Έ κΈ κ°μ₯ λ§μ§λ§ μ₯μμ μ€λͺ νλλ‘ νκ² μ΅λλ€.
1λ¨κ³: μμ€ν ν¨ν€μ§ μ λ°μ΄νΈ
μ€μΉ μ μ μμ€ν ν¨ν€μ§ λͺ©λ‘μ μ΅μ μνλ‘ μ λ°μ΄νΈν©λλ€.
1
sudo apt-get update -y && sudo apt-get upgrade -y
2λ¨κ³: νμ λꡬ μ€μΉ
PyENV μ€μΉμ νμν κΈ°λ³Έ λꡬλ€μ μ€μΉν©λλ€.
1
2
3
4
5
# νμν μμ‘΄μ± μ€μΉ (Ubuntu/Debian κΈ°μ€)
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl git llvm python3-openssl \
libncurses5-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \
libffi-dev liblzma-dev
3λ¨κ³: PyENV μ€μΉ
curl
μ μ¬μ©νμ¬ PyENV μ€μΉ μ€ν¬λ¦½νΈλ₯Ό λ€μ΄λ‘λνκ³ μ€νν©λλ€. μ΄ μ€ν¬λ¦½νΈλ PyENVμ ν¨κ» νμν λͺ¨λ νλ¬κ·ΈμΈμ μ€μΉν©λλ€.
pyenv Github
: https://github.com/pyenv/pyenv
1
curl https://pyenv.run | bash
4λ¨κ³: νκ²½ μ€μ μΆκ°
μ¬μ©μμ ν λλ ν 리μ μμΉν ~/.bashrc
νμΌμ λ€μκ³Ό κ°μ΄ νκ²½ μ€μ μ μΆκ°ν©λλ€. μ΄ μ€μ μ PyENVκ° μμ€ν
μ ν΅ν©λμ΄ μλνλλ‘ λμμ€λλ€.
1
2
3
echo 'export PATH="${HOME}/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'export PATH="${HOME}/.pyenv/bin:$PATH"' >> ~/.bashrc
: μ΄ λͺ λ Ήμ pyenv μ€ν νμΌμ΄ μμΉν λλ ν 리λ₯Ό μμ€ν μ PATH νκ²½ λ³μμ μΆκ°ν©λλ€. PATHλ μμμ μ€ν κ°λ₯ν λͺ λ Ήμ΄λ€μ μ°Ύμ λ μ°Έμ‘°νλ λλ ν 리μ λͺ©λ‘μ ν¬ν¨νκ³ μμ΅λλ€. ${HOME}/.pyenv/binμ PATHμ μΆκ°ν¨μΌλ‘μ¨, μ¬μ©μλ ν°λ―Έλ μ΄λμμλ pyenv λͺ λ Ήμ μ€νν μ μκ² λ©λλ€.echo 'eval "$(pyenv init -)"' >> ~/.bashrc
: pyenv initλ pyenvκ° μ λλ‘ κΈ°λ₯νλλ‘ μ΄κΈ°ννλ λͺ λ Ήμ λλ€. μ΄ λͺ λ Ήμ pyenvλ₯Ό μ¬μ©νμ¬ Python λ²μ μ κ΄λ¦¬ν λ νμν νκ²½ μ€μ μ λ‘λνκ³ , μμ λμμ μμ ν©λλ€. eval λͺ λ Ήμ μ¬κΈ°μ μΆλ ₯λ μ€ν¬λ¦½νΈλ₯Ό μ€ννλ©°, μ΄λ pyenvλ₯Ό μ¬μ©ν λ νμν νκ²½ λ³μλ ν¨μ λ±μ μμ μ€μ ν©λλ€.echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
: μ΄ λͺ λ Ήμ pyenvμ ν¨κ» μ¬μ©λλ pyenv-virtualenv νλ¬κ·ΈμΈμ μ΄κΈ°νν©λλ€. pyenv virtualenv-initμ κ°μ νκ²½μ κ΄λ¦¬νλλ° νμν μ λͺ λ Ήμ΄λ€μ μ 곡ν©λλ€. μ΄ μ€ν¬λ¦½νΈλ₯Ό μ€νν¨μΌλ‘μ¨ μ¬μ©μλ pyenvλ₯Ό μ¬μ©νμ¬ κ° Python λ²μ λ³λ‘ λ 립μ μΈ κ°μ νκ²½μ μ½κ² μμ±νκ³ κ΄λ¦¬ν μ μκ² λ©λλ€.
5λ¨κ³: μ μ€μ μ μ©
λ³κ²½λ νκ²½ μ€μ μ μ μ©νκΈ° μν΄ μμ μ¬μμνκ±°λ λ€μ λͺ λ Ήμ΄λ₯Ό μ€νν©λλ€.
1
2
3
exec "$SHELL"
# or run following code
# source ~/.bashrc
6λ¨κ³: PyENV μλ νμΈ
PyENVκ° μ λλ‘ μ€μΉλμλμ§ νμΈνκΈ° μν΄ λ€μ λͺ λ Ήμ΄λ‘ PyENV λ²μ μ νμΈν©λλ€.
1
pyenv --version
PyENVλ₯Ό μ¬μ©νμ¬ νμ΄μ¬ λ²μ μ€μΉ
1λ¨κ³: μ€μΉ κ°λ₯ν νμ΄μ¬ λ²μ λͺ©λ‘ νμΈ
μ¬μ© κ°λ₯ν νμ΄μ¬ λ²μ λͺ©λ‘μ νμΈν©λλ€.
1
pyenv install --list # check available envs
2λ¨κ³: νμ΄μ¬ λ²μ μ€μΉ
μνλ νμ΄μ¬ λ²μ μ μ€μΉν©λλ€. μλ₯Ό λ€μ΄, νμ΄μ¬ 3.8.10μ μ€μΉνκ³ μΆλ€λ©΄ λ€μκ³Ό κ°μ΄ μ€νν©λλ€.
1
pyenv install 3.8.10 # download env
(μ°Έκ³ ) νΉμ νμ΄μ¬ λ²μ μμ
1
pyenv uninstall 3.8.10
π‘ μ΄? μ μ§μμ Έμ??Β Β» μ΄λκ°μ pythonμ΄ μ΄λ €μκ±°λ, globalλ‘ μ§μ λμ΄ μλ κ²μ λλ€.
3λ¨κ³: μ€μΉλ νμ΄μ¬ λ²μ μ κΈ°λ³Έ λ²μ μΌλ‘ μ€μ
κΈ°λ³Έμ μΌλ‘ default νμ΄μ¬μ μμ€ν μμ μ€μΉλμ΄ μλ νμ΄μ¬μ κΈ°λ³Έ νμ΄μ¬μΌλ‘ μ‘μμ£Όκ² λ©λλ€. μ΄λ² λ¨κ³μμλ μ€μΉλ νμ΄μ¬ λ²μ μ μ μμ μΌλ‘ κΈ°λ³Έ λ²μ μΌλ‘ μ€μ νλλ‘ ν©λλ€.
1
pyenv global 3.8.10 # set global env
4λ¨κ³: λ΄ PyENV νκ²½μ μ€μΉλ νμ΄μ¬ λ²μ 리μ€νΈ νμΈνκΈ°
1
pyenv versions # check installed envs
μ΄μ PyENVλ₯Ό ν΅ν΄ μ¬λ¬ νμ΄μ¬ λ²μ μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€. νμμ λ°λΌ νΉμ νλ‘μ νΈμ λν΄ λ€λ₯Έ λ²μ μ μ§μ νκ±°λ κ°μ νκ²½μ μμ±νμ¬ νλ‘μ νΈ κ°μ λ 립μ±μ μ μ§ν μ μμ΅λλ€.
(μ°Έκ³ ) Windowsμμ PyENV μ€μΉνκΈ°
Windowsμ PyENVλ₯Ό μ€μΉνκΈ° μν΄μλ powershellμ κ΄λ¦¬μ λͺ¨λλ‘ μ€νν©λλ€. κ°λ¨ν μλ λͺ λ Ήμ΄λ₯Ό powershellμ μ λ ₯νμ¬ κΆνμ μ‘°μ ν©λλ€.
1
2
# κΆνμ‘°μ
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
1
2
# pyenv-win μ€μΉ
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
1
2
3
4
5
6
7
8
9
# κ²½λ‘νμΈ
$env:Path
# pyenv μ€ννμΈ
pyenv
# pyenvμμ μ€μΉκ°λ₯ν python λ²μ 리μ€νΈ update
pyenv update
pyenv install --list
λ€μμλ PyENV + pipENVλ₯Ό νμ©ν νκ²½ ꡬμΆμ ν΄λ³΄λλ‘ ν΄μ~~!!
κΈ΄ κΈ μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€ ^^