본문 바로가기

MLOps

파이썬 프로젝트를 위한 가상환경 설정 1 : conda, venv

가상환경의 필요성 

가상환경이란 Python 프로젝트 별로 독립적인 실행 환경을 만드는 도구입니다. 가상환경을 통해 서로 다른 파이썬 버전과 패키지 조합을 가진 프로젝트를 여러 개 관리할 수 있습니다. 처음 데이터 분석을 배우게 되면 설치된 파이썬 버전에 맞춰 패키지를 설치하게 되는데요. 이후 여러 프로젝트를 진행하다보면 프로젝트에서 요구하는 특정 라이브러리에 따라 파이썬 버전도 다르게 설치해야 하고, 라이브러리와 종속된 패키지 버전을 따로 관리해줘야 합니다. 

 

예시 그림과 같이 프로젝트 A에서 필요한 pandas 라이브러리를 1.3 버전으로 설치했고, 그에 따라 numpy 라이브러리가 1.20.3 버전으로 설치되었을 때, 이후 프로젝트 B에서 필요한 라이브러리의 종속된 numpy 버전이 기존 설치된 Numpy 버전의 조건과 맞지 않아 충돌이 일어날 수 있습니다. 프로젝트마다 특정 버전의 라이브러리가 필요하다면 이러한 충돌을 방지하기 위해 무조건 환경을 분리하여 관리할 필요가 있습니다. 

가상환경을 통해 프로젝트 별로 버전 관리를 독립적으로 할 수 있고, 각 버전 정보들이 가상환경에 기록되기 때문에 환경 재현과 배포에 용이합니다. 만약 가상환경 분리 없이 로컬 컴퓨터에 패키지를 계속 설치해 사용하게 된다면 프로젝트마다 필요한 패키지가 어떤 건지 나중에 알기 어려워집니다. 하지만 가상환경을 분리하면 해당 환경에 설치된 패키지들을 requiremets.txt로 저장하여 버전을 기록하거나 environment.yml 파일로 패키지 버전과 파이썬 버전까지 기록할 수 있습니다. 

그럼 가상환경을 어떻게 설정할 수 있을까요?

현재 데이터 분석가, 데이터 사이언티스트들 사이에서 특정 가상환경 도구가 표준으로 정해져 있지는 않습니다. 개인의 편의 혹은 회사에서 주로 사용하는 방법을 그대로 쓰고 있다고 보여지는데요. 저 또한 아나콘다가 설치되어 있어 자연스럽게 conda 를 이용해 가상환경을 만들곤 했습니다. 그러다 맥북을 쓰게 되면서 anaconda 없이 사용하다 보니 venv를 사용하게 되었는데요. 문득, 가상환경들의 차이는 뭔지 궁금해져 각각의 가상환경들의 사용법과 장단점을 비교해보고 싶었습니다. 이번에 작성할 가상환경은 기존에 사용했던 conda, venv 로 설치방법과 특징들을 살펴볼 예정입니다. 이후, 다른 가상환경들(poetry, pipenv 등)을 사용해보고 최종 비교하는 글도 올려보도록 하겠습니다. 

Conda(Anaconda/Miniconda)

특징 

장점

  • 데이터 과학 관련 패키지가 함께 설치되어 데이터 과학 및 머신러닝에 적합.
  • 여러 언어 지원 : Python뿐만 아니라 R, C++, Java 같은 비Python 패키지도 관리 가능.
  • 의존성 충돌 방지 :패키지 간의 의존성을 체크하여 충돌을 방지
  • 환경 복제 용이 : enviroment.yml 파일을 통해 가상환경을 내보내 재현
  • GUI 도구(Anaconda Navigator) 제공 : GUI로 가상환경 생성 및 패키지 설치 가능
  • 크로스 플랫폼 : Window, Mac, Linux 등 다양한 OS에서 사용할 수 있어 호환성이 높음.

단점

  • 설치 및 관리에 Anaconda 또는 Miniconda가 필요.
  • pandas, numpy 등이 기본으로 설치되어 있어 설치 용량이 큼
  • 팀/회사에서 사용 시 라이센스 비용 지불 


사용법 

1) 가상환경 설치 

conda를 사용하기 위해서는 anaconda 혹은 miniconda를 설치해서 사용해야 합니다. 

(1) https://www.anaconda.com/ 접속 후 오른쪽 상단 Free Download 클릭

(2) 이메일 제출

(3) anaconda 설치 프로그램 실행

(4) anaconda 설치 프로그램 실행

  • Just Me → C:\Users\Julie\anaconda3 현재 사용자 계정에 독립적으로 설치. default는 recommended
  • All Users → C:\ProgramData\anaconda3 컴퓨터의 모든 사용자 계정에 설치. 관리자 권한 필요.
  • Just Me 추천 이유  4가지  
    • 권한 문제 회피
      • "All Users"로 설치하면 시스템 전체에 아나콘다가 설치되어야 하므로, 관리자 권한이 필요합니다. 하지만 "Just Me"를 선택하면 사용자의 홈 디렉토리에 설치되며, 관리자 권한 없이도 설치 및 관리가 가능합니다.
    • 환경 설정의 독립성
      • "Just Me" 설치는 다른 사용자의 설정에 영향을 미치지 않으므로, 사용자가 자신의 환경을 자유롭게 설정하고 관리할 수 있습니다. 이는 여러 사용자가 한 컴퓨터를 공유하거나, 서로 다른 Python 환경이 필요한 경우에 유용합니다.
      • "All Users"로 설치하면 시스템의 PATH에 추가되므로, 다른 사용자 또는 시스템 관리자가 설정을 변경하거나 제거할 경우, 설치한 아나콘다 환경이 손상되거나 사용이 불가능해질 수 있습니다. "Just Me"로 설치하면 사용자 별로 환경 변수가 설정되므로, 다른 사용자나 시스템 환경 변경의 영향을 받지 않습니다.
    • 기존 Python 환경과의 충돌
      • "All Users"로 설치하면 아나콘다가 시스템 경로(PATH)에 추가되어, 기존에 설치된 다른 Python 배포판(예: Python.org에서 설치한 Python, Pyenv, 다른 Conda 환경 등)과 경로 충돌이 발생할 수 있습니다. 이로 인해 특정 Python 실행 파일이나 라이브러리를 호출했을 때, 의도하지 않은 버전이 실행될 수 있습니다.
    • 업데이트 및 삭제의 용이성
      • "Just Me"로 설치하면 사용자는 자신의 디렉토리에서 아나콘다를 직접 관리할 수 있어, 업데이트나 삭제 작업이 더 간편합니다.

여기서도 PATH Add를 추천 하지 않는 이유는 기존 Python 설치와 충돌을 방지하고, 환경의 독립성을 유지하기 위해입니다. PATH 설정이 잘 되어 있지 않아서 vscode에서 터미널을 열어 conda 명령어가 동작되지 않는다면 환경변수에 PATH를 설정하는 것이 아니라 아래 TIP에서 설명하는 conda init을 사용하는 것을 추천드립니다. 

TIP: Miniconda/Anaconda 설치 후 conda init 명령을 사용하면, PATH를 추가하지 않고도 특정 터미널(Powershell, cmd 등)에서 conda를 사용할 수 있는 설정을 자동으로 생성해줍니다. 이를 활용하면 시스템 PATH를 수정하지 않아도 conda를 편리하게 사용 가능합니다. 

  • Conda Init
    • conda 명령어가 기본 쉘 환경에서 제대로 인식되도록 설정하는 역할
    • CMD 창에서 conda 명령어 인식 되지 않을 때는 시스템의 PATH 환경 변수에 추가되지 않았기 때문에 특정 쉘 환경에만 활성화되도록 설정되어 있음 (anaconda prompt)
    • 시스템 또는 사용자 환경변수의 PATH에 직접 추가되지 않지만, 쉘 환경 설정 파일( 예: PowerShell의 profile.ps1 또는 Bash의 ~/.bashrc)에 경로를 자동으로 추가되어 cmd에서도 conda 명령어가 작동 

2) 가상환경 목록 보기 

# conda 가상환경 목록 보기 
conda env list

3) 가상환경 생성 

# conda 가상환경 생성 
conda create --name <env_name> python=3.8

4) 가상환경 활성화

# 가상환경 활성화 
conda activate <env_name>

5) 가상환경 제거

# 가상환경 제거 
conda env remove --name <env_name>

+) 패키지 설치 

# 패키지 설치 
conda install <package>

 

Venv 

(1) 특징 

맥북에서 사용하고 있는 가상환경은 venv로 Python 기본 패키지(python 3.3 이상)로 제공되는 가상환경 관리 도구입니다. 장점은 가볍고 간단해서 추가 설치가 필요 없으며, Python 설치 시 함께 제공된다는 것으로 맥북에서 아나콘다 설치 없이 바로 사용 가능해서 venv로 사용하게 되었습니다.

장점

  • Python 3.3 버전부터 표준 라이브러리에 포함되어 별도 설치 필요 없음
  • conda에 비해 가볍고 단순한 구조를 가져 빠르게 환경을 생성할 수 있음 
  • 프로젝트 디렉토리 내 가상환경을 생성하여 프로젝트 별 독립적인 환경을 쉽게 관리 가능. 해당 디렉토리 삭제로 제거 

단점

  • 환경 관리 부족: 복잡한 패키지 의존성이나 여러 Python 버전을 관리하기 어려움.
  • 패키지 관리 도구 한계: Python 패키지만 관리 가능 (R 등 다른 언어 지원 안 함)
  • 각 프로젝트마다 필요한 패키지를 처음부터 설치해야 함 (기본 분석 패키지 설치 지원 x, 패키지 공유 x)
  • 디스크 공간 사용 : 각 가상환경이 python 인터프리터와 패키지 복사본을 포함하여 여러 프로젝트를 관리할 때는 디스크 공간을 크게 차지 할 수 있음. conda의 경우 하드 링크를 사용해 패키지 파일을 공유하고 청소 기능으로 디스크 공간을 효율적으로 관리. 

(2) 사용법 

venv의 설치는 Python 3.3 부터 기본으로 내장되어 있어 설치가 필요 없고, 가상환경 목록을 보는 기능을 제공하고 있지 않다. 생성된 디렉토리를 통해 확인해야 한다. 

1) 가상환경 생성 

# 가상환경 생성 
python -m venv <env_name>

2) 가상환경 활성화

- Windows 

# 가상환경 활성화 (Windows)
<env_name>\Scripts\activate

- Mac

# 가상환경 활성화 (Mac)
source <env_name>/bin/activate

3) 가상환경 제거

venv는 가상환경을 제거하는 명령어를 제공하지 않아 생성된 가상환경 디렉토리를 직접 삭제하면 됩니다. 

# 가상환경 디렉토리 제거 
rm -rf <env_name>

 

결론

  • 데이터 분석가, 사이언티스트로 이미 anaconda가 설치되어 있다 -> conda
  • 데이터 분석 프로젝트를 해보고 싶은데 뭘 설치해야 할 지 모르겠고, 이것 저것 시도해보고 싶다. -> conda 
  • 아나콘다 설치 없이 간단하고 단순한 파이썬 프로젝트를 만들고 테스트해보고 싶다 -> venv

'MLOps' 카테고리의 다른 글

[LLM] GCP 이용해 LLM 환경 구축하기  (2) 2024.10.13