conda 가상환경 사용하기

Updated:

이번 포스터에서는 python virtual environment, 아나콘다를 활용한 파이썬 가상환경 구축에 대하여 알아보겠습니다.

Anaconda

Linux 계열에는 기본적으로 파이썬이 설치되어 있습니다 (물론 2.x 지만요..).

물론 추가적으로 python3 를 설치하고 pip3를 통하여 package들을 설치 할 수 있습니다. 또한 기본 python을 사용하여도 가상 환경 구축이 가능 합니다.

하지만 가상환경을 사용하는 경우에 anaconda의 가상환경을 사용하는것이 시스템 파이썬의 가상환경을 사용하는 것에 비해 매우 직관적이고 편하기 때문에 Anaconda의 인기가 높은 것 같습니다.

가상환경

그렇다면, 우리는 왜 가상환경을 사용해야 할까요? 그냥 OS-based python을 그대로 사용하면 안 될까요?

제가 내린 답은 코드 공유에 있습니다.

우리는 자신의 코드를 자신만 사용하는 환경에 있지 않습니다. 다시 말해서 나의 코드를 다른 사람이 그 사람의 환경에서 돌리는 상황도 있으며, 다른 사람의 코드를 나의 환경에서 돌리는 경우도 있습니다.

실례로 github은 전 세계적으로 매우 활발한 코드 저장소 (물론 버전 관리가 큰 목적이지만요,)이며 나의 코드를 github에 활발히 공유하기도하며, 다른 사람의 좋은 코드를 clone하여 나의 환경에서 사용하기도 합니다.

이러한 상황에서 base 환경만 사용한다면 어떤 문제가 발생할까요?

답은 바로 package들 사이의 의존성에 있습니다. 나의 base 환경에는 pytorch version 1.4가 설치되어 있으며, github에 올라와 있는 내가 사용하고 싶은 코드는 pytorch version 0.4로 짜여있다고 가정해보죠. pytorch verion 1.4와 0.4는 요구하는 numpy version이 다릅니다. 이러한 상황에서 base environment만 사용하고 있다면 각 코드를 실행시킬때마다 pytorch와 numpy의 버전 업그레이드 (or 다운그레이드)를 해주어야겠죠. 이러한 package가 하나라면 해볼만 하겠지만 여러 dependency가 복잡하게 얽힌다면.. 상상만해도 화가 날것만 같습니다.

이런 문제를 해결해주는 툴이 가상환경입니다. 각 python project별로 가상환경을 만들어 해당 Project에 맞는 패키지 버전들을 설치한다면 위의 문제를 겪지 않고 깔끔하게 환경을 관리할 수 있습니다.

Anaconda 설치하기

설치파일을 받는 방법에는 두 가지가 있습니다:

  1. wget 사용

     cd /path/to/download/folder
    
     # Install miniconda
     wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    
     # Install anaconda
     wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
    
  2. 직접 다운

    Anaconda Link

Anaconda에는 anaconda (full-version)과 miniconda (lite-version) 이 있습니다. 저희는 가상환경을 구축한 후 필요한 패키지들을 어차피 추가할 예정이며, full-version의 모든 패키지들을 사용할 경우가 별로 없기 때문에 개인적으로는 miniconda를 설치하셔도 아무 불편함이 없지않을까 생각합니다.

설치 파일을 받은 후에,

# +x 명령어를 통하여 실행 권한 부여. Miniconda까지 입력하신 후
# tab 키를 누르시면 다운 받으신 버전에 맞추어 자동 완성 되십니다.
sudo chmod +x ./Miniconda~~.sh

# Install miniconda
./Miniconda~~.sh

가상환경 사용하기

conda를 설치하셨으니 지금부터 conda를 활용하는 방법에 대하여 알아보겠습니다.

가상환경 생성

conda를 설치하셨으면 가상환경을 생성이 역시 첫 번째 테스크가 될 것 같습니다. 가상환경 생성은 아래와 같이 할 수 있습니다:

# python version 3.6을 사용하는 가상환경 생성
conda create -n env_name python=3.6

# python version 3.7을 사용하며, 필요한 Package들이
#  requirements.txt에 정리되어 있는 경우 가상환경 생성
conda create -n env_name python=3.7 requirements.txt

위의 라인에서 requirements.txt는 현재 shell을 실행하는 디렉토리에 존재해야 합니다.

env_name은 typing 하기 쉽고, 직관적인 이름으로 지으시기를 추천 드립니다. 논문의 nickname (fgsm, gan, wgan-gp, …)으로 짓는 것이 가장 편한데 논문 reproduce가 아닌 경우 간편하고 식별력이 좋은 이름이 좋습니다.

가상환경 활성화/비활성화

생성된 가상환경에 들어가고 다시 base environment로 나오는 방법은 아래의 간단한 라인으로 실행 가능합니다:

# 가상환경 활성화
conda activate env_name

# 가상환경 비활성화
conda deactivate

이후 활성화된 가상환경에 원하는 패키지들을 설치하기 위하여서는 base 환경과 마찬가지로 pip install package 또는 conda install package를 사용할 수 있습니다.

사용하고 있는 가상환경 export하기

참 유용하고 편리한 기능인 export에 대하여 알아보겠습니다.

conda env export > file_name.yml 을 통하여 현재 활성화된 가상환경에 설치된 패키지들의 버전 정보를 담은 파일(.yml)을 export할 수 있습니다. 이 기능이 좋은 이유는 역시 코드 공유에 있습니다. 나의 개발 환경을 그대로 저장하여 코드와 함께 전달해 준다면 본 코드를 받은 공동 작업자는 힘들이지 않고 같은 환경의 가상환경을 쉽게 만들어 충돌 없이 코드를 시행할 수 있습니다. 마찬가지로 github에 upload를 할 때에도 해당 .yml 파일을 함께 올려주면 upload한 코드를 사용하는 사람들이 정말 고마워할것 입니다.

그렇다면, 다른 사람이 export한 가상환경 파일 (.yml)을 사용하여 나의 환경에서 가상환경을 어떻게 구축할 수 있을까요? 이는 아래 라인과 같이 매우 간단하게 진행할 수 있습니다:

cd path/to/where/yml/file/exist
conda env create -f file_name.yml -n env_name

위의 라인에서 file_name은 다른 사람이 export한 yml 파일의 이름을 의미하며, env_name은 내가 구축하려는 가상환경의 이름을 의미합니다.

가상환경 확인 및 삭제

끝으로 존재하는 가상환경을 확인하고 또 삭제하는 방법에 대하여 알아보겠습니다.

# 가상환경 확인
conda env list

# 가상환경 삭제
conda env remove --name env_name

마무리

본 포스터에서는 가상환경이 왜 유용한지에 대하여 간략한 소개와 함께 아나콘다를 소개해 드렸습니다. 아나콘다를 활용하여 가상환경을 구축하는 것은 나의 base 환경을 깨끗하게 유지해주는 것 뿐만 아니라, 협업의 관점에서 매우 활용도가 높습니다.

모두 conda를 활용한 가상환경 구축 및 사용이 익숙해지는데 본 포스터가 조금이나마 도움이 되셨길 바랍니다.

Leave a comment