Python 가상 환경 깔끔한 관리법
파이썬에서 가상 환경 관리하는 방법은 다양하다. 그 중 개인적으로 선호하고 지금 사용 중인 방법을 간단하게 정리했다.
파이썬 가상 환경이란?
파이썬을 이용하다 보면 프로젝트마다 요구하는 파이썬 버전 및 패키지의 버전이 다른 것을 알 수 있다. 프로젝트마다 서로 다른 파이썬 및 패키지 버전을 사용할 수 있도록 도와주는 것, 다시 말해 프로젝트마다 파이썬, 패키지 버전이 종속된 ‘환경’이 파이썬 가상 환경이다.
가상 환경을 제공하는 도구로 Anaconda가 유명하나, 최근 유료화 소식이 떴고 꽤 무거우며 사용법이 비교적 불편해서 나는 안 쓴다.
파이썬 버전 관리: pyenv
Windows에서는 pyenv-win
을 설치하면 된다.
기존 시스템에 설치된 파이썬 사용하기
pyenv global system
위 명령어로 global 파이썬 버전을 시스템으로 설정하면, 기존 버전을 사용하는 것도 가능하다.
여러 개의 파이썬 버전을 설치하고 간편하게 명령어로 버전을 바꿔 가며 사용할 수 있고, 프로젝트 폴더별로 따로 파이썬 버전을 지정할 수도 있는 편리한 툴이다.
버전별로 완전히 독립적인 파이썬을 여러 개 설치하는 것과 같아서, 설치한 버전별로 자연스럽게 패키지도 따로 관리된다.
pyenv
는 공식적으로는 Windows를 지원하지 않으나, pyenv-win이라는 Windows용으로 만들어진 버전을 설치하여 사용할 수도 있다. 나는 Windows에서도 이걸로 pyenv
를 사용하고 있다.
다만 pyenv-win
은 공식 pyenv
와 달리 이미 기존에 시스템에 설치된 파이썬을 사용하지 못 하고 오직 pyenv
로 설치한 버전만 선택 가능하다 소소한 단점이 있다.
참고로 Ruby 용으로 나온 rbenv도 있는데 pyenv
와 사용법이 거의 동일하다.
pyenv 설치 방법
- 공식
pyenv
curl https://pyenv.run | bash
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"
pyenv 사용법
매우 단순하고 간편하다.
먼저 pyenv install -l
로 설치 가능한 버전을 확인한다.
pyenv install <버전>
로 원하는 버전을 설치하고,
pyenv global <설치된 버전>
로 시스템 전체에서 사용할 Python 버전을 선택한다.
이때 버전 대신 system
을 입력하면 원래 시스템에 설치되어 있던 Python을 사용할 수 있다. 단 pyenv-win
에서는 지원하지 않는다.
pyenv local <설치된 버전>
프로젝트 폴더 최상단에서 이 명령어를 입력하면 해당 프로젝트에서만 사용할 Python 버전을 선택할 수 있다.
이때 입력한 버전 정보은 해당 경로에 생성되는 .python-version
파일에 저장된다.
업데이트 방법
- 공식
pyenv
pyenv update
pyenv-win
&"${env:PYENV_HOME}\install-pyenv-win.ps1"
패키지 버전 관리: pipenv
Python에서 공식적으로 권장하는 방법이라고 한다. pipenv
를 써서도 파이썬 버전을 선택하여 사용할 수 있기는 하다.
근데 난 pipenv
만 사용하려고 했더니 문제를 겪었다. 파이썬 3.11에서 설치한 pipenv로 파이썬 3.6 환경을 만들려고 시도했더니 오류가 났던 것이다. 그래서 난 파이썬 버전은 pyenv
로 관리하고 pipenv
로는 패키지 버전을 관리하는 방법을 택했다.
pipenv 설치 방법
pip install pipenv --user
pipenv 사용법
pip로 설치 가능한 패키지를 설치할 때 pip
대신 pipenv
를 입력해서 설치하면 된다.
pipenv install <package>
설치된 패키지는 Pipfile
이라는 파일에 저장된다.
Pipfile
에 적힌 패키지들을 한 번에 설치하려면,
pipenv install
를 입력하면 된다.
pipenv 환경에서 Python 프로그램을 실행하려면 pipenv run
을 사용한다.
pipenv run python main.py
또는 pipenv shell
로 아예 상시 pipenv
환경인 쉘을 spawn하여 사용할 수도 있다.
현재 설치된 패키지들의 버전을 저장하고 싶다면,
pipenv lock
를 입력하여 Pipfile.lock
을 생성한다. 이렇게 하면 requirements.txt
와 유사하게 고정된 버전을 기록할 수 있다.
pipenv sync
을 입력하면 Pipfile.lock
에 적힌 버전들을 한 번에 설치할 수 있다.
프로젝트별 격리된 가상 환경: venv
pipenv
를 쓰면 엄격하게 패키지들의 버전을 고정시킬 수가 있지만, 아무래도 Pipfile.lock
을 신경쓰는 게 번거로울 수가 있다.
그래서 일반적으로는 가상 환경으로 venv
를 많이 쓰는 것 같다. 가장 큰 특징은 pip
로 설치하는 패키지들이 프로젝트 하위 폴더에 설치된다는 점이다.
그래서 프로젝트의 특수성에 따라 패키지들의 소스 코드를 임의로 수정해야 할 때 등에 유용하다.
venv 사용법
python -m venv .venv
프로젝트 폴더 루트에서 이렇게 하면 가상 환경이 생성된다.
.venv/scripts/activate.ps1 # Windows Powershell 기준
운영 체제에 따라 알맞은 확장자의 스크립트를 실행하면 가상 환경이 활성화되어 이제 pip
명령어로 패키지들을 설치하면 가상 환경에 깔리고, 파이썬을 실행하면 가상 환경의 패키지들을 import
하게 된다.
macOS 같은 경우는 다음과 같이 명령어를 입력해야 한다.
source .venv/bin/activate