아나콘다(Anaconda) 가상환경 사용법

나만의 가상환경 만들기

가상환경은 conda create -n {envname} 명령으로 만들 수 있습니다. -n 옵션은 가상환경의 이름을 설정해주는 부분으로 나중에 가상환경을 이용하거나 삭제할 때 쓸 수 있도록 알아보기 쉽게 입력하면 됩니다. python3 를 이용할 수 있는 가상환경을 다음과 같이 ‘sjpy3’ 라는 이름으로 만들어 봅니다.

(base) [sonic@rna2 ~]$ conda create -n sjpy3 python=3

Note: 여러 사람이 한 서버를 사용하는 경우 conda 설치가 중복으로 되어 있을 수 있습니다. which conda 명령을 통해 지금 실행하고자 하는 conda 가 어느 경로에 있는 conda 인지를 한번 확인해 보는 것도 필요할 수 있습니다.

가상환경 목록 확인하기

만들어진 가상환경들을 확인하는 방법은 conda info --envs 또는 conda env list 명령어를 통해 가능합니다. (사용하다 보면 conda list env 명령과 많이 헷갈립니다. 이는 현재 사용하고 있는 가상환경에서 ‘env’ 라는 이름이 포함된 ‘패키지’를 검색하는 명령어라는 것을 기억해두세요.) 아나콘다를 설치하면 기본적으로 base 라는 기본 환경이 만들어지고, 그 위에 방금 만든 sjpy3 가상환경이 만들어진 것을 확인할 수 있습니다. 가상환경 경로 왼쪽에 (*)표시가 되어 있는 것은 현재 이용하고 있는 가상환경을 나타냅니다. 현재는 기본 환경에 있으므로 base 가상환경에 표시가 되어 있는 것을 확인할 수 있습니다.

(base) [sonic@rna2 ~]$ conda info --envs
# conda environments:
#
base          *  /home/sonic/Sukjun/anaconda3
sjpy3            /home/sonic/Sukjun/anaconda3/envs/sjpy3

현재 활성화된 가상환경에 대한 더 자세한 내용을 보려면 conda info 라고 치면 됩니다. 현재는 base 가상환경이 활성화 되어 있으므로 base 가상환경에 대한 내용이 나옵니다.

(base) [sonic@rna2 ~]$ conda info

     active environment : base
    active env location : /home/sonic/Sukjun/anaconda3
            shell level : 1
       user config file : /home/sonic/.condarc
 populated config files : /home/sonic/.condarc
          conda version : 4.9.2
    conda-build version : 3.18.11
         python version : 3.8.3.final.0
                    ...
             netrc file : None
           offline mode : False

앞에서 아마 ‘활성화’ 라는 말을 처음 언급한 것 같은데요. 이는 해당 가상환경을 사용하기 위해서 해 주는 작업을 일컫습니다. 그리고 어떤 가상환경이 활성화 되어 있는지는 프롬프트의 맨 앞에 (base) 와 같이 어떤 가상환경이 현재 활성화 되어있는지 알 수 있습니다. 이제, 우리가 만든 가상환경을 활성화 시켜서 들어가 볼까요?

가상환경으로 들어가기

가상환경 안으로 들어간다는 것은 자세히 말하면 여러가지 환경 변수들을 셋팅한다는 것으로 이해하면 됩니다. source activate {envname} 명령을 통해 가상 환경으로 들어가면 기본 프롬프트 앞에 가상환경 이름이 표시되는 것을 볼 수 있습니다.

(base) [lab@rna2 ~]$ source activate sjpy3
(sjpy3) [lab@rna2 ~]$

자, 위에서 배운 가상환경 목록을 확인하는 명령어로 가상환경에 들어왔는지 확인해 봅시다. py3 라는 이름의 가상환경에 별표(*)가 되어있는 것을 확인할 수 있습니다.

(sjpy3) [sonic@rna2 ~]$ conda info --envs
# conda environments:
#
base             /home/sonic/Sukjun/anaconda3
sjpy3         *  /home/sonic/Sukjun/anaconda3/envs/sjpy3

가상환경에 들어왔는지를 한번 더 직접 확인합니다. 가상환경에 들어온 상태에서 python 을 입력하고 해당 python 이 가상환경에 설치된 python 이 실행된 것인지 다음과 같이 확인할 수 있습니다.

(sjpy3) [sonic@rna2 ~]$ python
Python 3.7.9 (default, Aug 31 2020, 12:42:55)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(*sys.path, sep='\n')

/home/sonic/Sukjun/anaconda3/envs/sjpy3/lib/python37.zip
/home/sonic/Sukjun/anaconda3/envs/sjpy3/lib/python3.7
/home/sonic/Sukjun/anaconda3/envs/sjpy3/lib/python3.7/lib-dynload
/home/sonic/Sukjun/anaconda3/envs/sjpy3/lib/python3.7/site-packages
>>>

가상환경으로부터 나오기

다시 가상환경으로부터 나오는 방법은 source deactivate 명령을 이용하면 됩니다. 이 때에는 따로 가상환경 이름을 지정해주지 않아도 됩니다. 프롬프트 모양이 다시 원래대로 돌아온 것을 확인할 수 있습니다.

(sjpy3) [sonic@rna2 ~]$ source deactivate
(base) [sonic@rna2 ~]$

필요없는 가상환경 삭제하기

잘못 만들었거나 더 이상 필요 없는 가상환경 삭제는 conda remove --name {envname}로 할 수 있습니다. 추가적으로 --all 옵션을 주면 가상환경 아래에 깔린 모든 라이브러리들을 깨끗하게 지울 수 있습니다.

(base) [sonic@rna2 ~]$ conda remove --name sjpy3 --all

가상환경의 이름 변경하기

엄밀히 말해 가상환경의 이름을 바꾸는 명령어는 없습니다. 현재 존재하는 가상환경을 다른 이름으로 복사한 후 기존 가상환경을 삭제하는 방법을 사용해야 합니다. 다음과 같이 기존에 존재하는 가상환경 ‘sjpy3’ 를 복제하여 새로운 이름의 가상환경 ‘sjpy3-new’ 를 만들어 줍니다.

(base) [sonic@rna2 ~]$ conda create -n sjpy3-new --clone sjpy3
Source:      /home/sonic/Sukjun/anaconda3/envs/sjpy3
Destination: /home/sonic/Sukjun/anaconda3/envs/sjpy3-new
Packages: 136
Files: 6807

Downloading and Extracting Packages
...

그리고 기존의 가상환경은 필요가 없다면 다음과 같이 삭제해 주면 됩니다. 결과적으로 가상환경의 이름을 바꾼 셈이 됩니다. 가상환경 폴더까지 깨끗하게 삭제하려면 --all 옵션을 주면 됩니다.

(base) [sonic@rna2 ~]$ conda remove --name sjpy3 --all

패키지 설치 및 업데이트

패키지 설치는 conda install {package_name} 으로, 패키지 업데이트는 conda update {package_name} 으로 합니다. 다음은 가상환경 py3 내에 numpy 패키지를 설치하는 예제입니다.

(py3) [lab@sirna1 ~]$ conda install numpy
Solving environment: done

## Package Plan ##

  environment location: /home/lab/anaconda3/envs/py3

  added / updated specs:
    - numpy


The following NEW packages will be INSTALLED:

    intel-openmp:   2018.0.0-8
    libgfortran-ng: 7.2.0-hdf63c60_3
    mkl:            2018.0.2-1
    mkl_fft:        1.0.1-py36h3010b51_0
    mkl_random:     1.0.1-py36h629b387_0
    numpy:          1.14.2-py36hdbf6ddf_1

Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

자주 접하는 에러들

PackagesNotFoundError: The following packages are not available from current channels.

설치하려고 하는 패키지명을 찾지 못했을 때 나타나는 에러입니다. 해당 패키지를 제공해주는 채널이 있다면 -c {channel} 옵션을 통해 채널을 명시해주고 다시 한번 설치해보길 바랍니다.

(py3) [lab@sirna1 ~]$ conda install non-existent-package
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - non-existent-package

Current channels:

  - <https://repo.anaconda.com/pkgs/main/linux-64>
  - <https://repo.anaconda.com/pkgs/main/noarch>
  - <https://repo.anaconda.com/pkgs/free/linux-64>
  - <https://repo.anaconda.com/pkgs/free/noarch>
  - <https://repo.anaconda.com/pkgs/r/linux-64>
  - <https://repo.anaconda.com/pkgs/r/noarch>
  - <https://repo.anaconda.com/pkgs/pro/linux-64>
  - <https://repo.anaconda.com/pkgs/pro/noarch>

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    <https://anaconda.org>

and use the search bar at the top of the page.

CondaEnvironmentError: cannot remove current environment.

현재 활성화되어 있는 상태에서 해당 가상환경을 삭제하려고 할 때는 삭제가 되지 않습니다. 반드시 비활성화를 시킨 후 삭제하여야 합니다.

(py3) [lab@sirna1 ~]$ conda remove --name py3 --all
    
CondaEnvironmentError: cannot remove current environment. deactivate and run conda remove again

The environment is inconsistent, please check the package plan carefully.

Collecting package metadata: done
Solving environment: -
The environment is inconsistent, please check the package plan carefully
The following packages are causing the inconsistency:

  - conda-forge/linux-64::curl==7.64.1=hf8cf82a_0
  - bioconda/linux-64::pysam==0.15.2=py36h4b7d16d_3
  - bioconda/linux-64::samtools==1.9=h8571acd_11
  - bioconda/linux-64::pybedtools==0.8.0=py36he860b03_1
  - bioconda/linux-64::htslib==1.9=ha228f0b_7
  - bioconda/linux-64::bcftools==1.9=h4da6232_0

Solving environment: failed with initial frozen solve. Retrying with flexible solve.

패키지를 설치할 때 자주 접할 수 있는 에러이다.

Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.

패키지를 설치할 때 자주 접할 수 있는 에러이다.

Unable to create process using …

윈도우 환경에서 pip install 을 이용하여 패키지를 설치하려고 할 때 나타났던 에러이다.

C:\Users\Sukjun>pip install schedule
Unable to create process using 'C:\Users\...\python.exe "C:\Users\...\Scripts\pip-script.py" install schedule'

이럴 때는 다음과 같이 아예 다음과 같이 python 명령어로 pip 모듈을 불러들여 설치하면 해결된다.

C:\Users/Sukjun>python -m pip install schedule