Python을 사용하는 User들에게 ananconda (conda)는 매우 익숙한 패키지 관리자이다. 그러나, 익힐것이 많은 우리는 매번 conda 명령어가 가물가물하다. 또한, pip 명령어와, 명령어간 순서가 종종 혼동되기도 한다.
env 인가? envs 인가?
오늘날, 이런 명령어 하나 하나를 모두 기억하고 살기에는 우리가 기억하고 있어야 할것이 너무 많다.
또한, 종종 내부 로직을 이해하면 외우지 않아도 자연스럽게 암기가 되기도 한다. 내부 로직/원리를 함께 살펴 보자.
conda에서 가장 자주 사용하는 것은 당연히 패키지 설치 일것이다.
$ conda install <package name1> <package name2> ...
ex)
$ conda install numpy pandas
기존에 설치한 버전의 업데이트는 `update` 명령어를 사용한다.
$ conda update pandas
[참조] 경우에 따라서는, `PackageNotInstalledError: Package is not installed in prefix.` 라는 에러가 발생하기도 한다. `conda list`를 실행하면 패키지가 설치되어 있는데, `update`에서 패키지를 인식을 못한다. 이것은 `pip`명령어로 설치한 패키지에서 발생한다. `conda install`로 설치한 패키지의 경우는 발생하지 않는다.
Python을 사용하면서, 다양한 Applicaiton을 개발하다보면 Python 버전 디펜던시, 패키지 버전관리 등을 필요로 하게 된다. 특히, ML 프로젝트를 하게 되면, Cuda/CuDNN과 python 버전에 따라서 구동 여부가 달라지기도 한다. 또한 Tensorflow/Pytorch가 동시에 설치되어 있는 경우 충돌이 나기도 한다.
$ conda create --name ML python=3.9
or
$ conda create -n ML python=3.9
[형태] conda create --name <가상환경 표시 이름> python=<버전>
매번 Python과 패키지를 다르게 설치할 수 없기 때문에, 가상환경을 사용하여 서로 독립적인 환경을 세팅해 준다. (좀 더 자세히 들여다 보면, Docker/Container의 전신과 유사한 형태로 동작하는 것을 알수 있다. Python 실행 파일을 특정 하위 디렉토리에 복사하고, root directory를 변경해 주는 형태를 사용한다. )
즉, `conda create` 과정은 특정 directory를 생성하고 버전에 맞는 python bin와 pip 등 기본 파일을 복사/설치하는 과정이다.
이러한 과정을 이해하면 당연하게 내부 로직을 이해할 수 있는데, 기본적으로 가상환경(venv)마다 디렉토리가 정해져 있는 것을 알수 있다. 아래에서 거론될 Activate/Deactivate과정은 `change root dir` 과정이라고 볼 수 있다. 또한 신규로 설치되는 패키지들은 변경된 root dir 아래 새롭게 다시 설치되는 것이다.
* docker의 전신인 Linux container 에서는 `chroot`를 활용하여 기준이 되는 root dir을 변경하였다.
생성된 가상환경 리스트 확인
$ conda env list
`conda env list`를 실행하면 가상환경 리스트를 확인할 수 있는데, 설치된 가상 환경의 directory 위치를 확인 할 수 있다.
그렇다면, bin/외에 별도로 설치한 개별 패키지들은 어디에 위치해 있는 것일까? 가상환경의 rootdir 아래를 잘 살펴보면, lib/python3.x 위치를 살펴보자. 아래와 같이 `conda install` 로 설치된 패키지들이 .py 또는 라이브러리 형태로 저장되어 있다.
# 가상환경 활성화 -> 지정한 환경으로 root dir 변경
$ conda activate <가상환경 이름>
ex) $ conda activate ML3
# 가상환경 비활성화 -> 이전 환경으로 root dir 변경
$ conda deactivate
activate / deactivate가 어떤 역할을 하는지 살펴보기 위해서, 가상환경에 진입하여 각각 환경변수를 비교하여 보자. `$echo PATH`를 실행해 보면, 가상환경 rootdir아래 `bin/`와 `condabin/`가 최우선순위 경로로 변경되어 있는 것을 알 수 있다. 이것은 python 명령어를 실행하거나, python package를 실행할 경우 가상환경에서 먼저 찾아보라는 의미를 갖는다.
/home/xxxx/anaconda3/bin:/home/xxxxx/anaconda3/condabin:/home/xxxxxx/.pyenv/shims:
[ ML3 가상환경 진입후 ]
(ML3) data:~/anaconda3$ echo $PATH
//src/google-cloud-sdk/bin:/home//anaconda3/envs/ML3/bin:/home//anaconda3/condabin:/home//.pyenv/shims:/home//.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[ ML3 가상환경 비활성화 후 ]
//src/google-cloud-sdk/bin:/home//anaconda3/bin:/home//anaconda3/condabin:/home//.pyenv/shims:/home//.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
앞서 살펴본 가상환경 생성/동작원리를 이해하면, 여러가지를 자동적으로 파악 할 수 있다. 대표적으로 가상환경이 늘어나게 되면, 동일 PC/서버 환경에서는 그만큼의 Python Bin와 Package의 모든 파일이 `가상환경 개수`만큼 복제되어 있다고 할 수 있다.
따라서, 불필요한 가상환경을 삭제가 필요하기도 하다. 가상환경을 삭제하려면, conda의 `remove` 명령어를 사용하면 된다.
$ conda env remove -n <가상환경 이름>
ex) conda env remove -n ML3
당연하게도, 삭제하는 과정은 <anaconda home>/envs 아래에서 <가상환경 이름>에 해당하는 directory 자체를 삭제해 버리는 과정이다.
다음은 conda 공식 홈에서 제공하고 있는 conda cheat sheet이다.
2022.12.06 - [개발 이야기/Python] - [Conda-Jupyter] Conda 가상환경과 Jupyter Kernel 연동/생성/삭제
2022.06.17 - [분류 전체보기] - Python 가상 환경 관리 4종 - venv / virtualenv / ipykernel
2022.12.06 - [개발 이야기/Python] - [Jupyter Kernel 추가] conda 가상환경을 jupyter Kernel로 추가하기
2022.09.19 - [개발 이야기/Python] - [주피터노트북 커널] jupyter lab/notebook kernel
2022.06.17 - [분류 전체보기] - Python 가상 환경 관리 4종 - venv / virtualenv / ipykernel
2020.06.04 - [개발 이야기/Python] - [파이썬] Anaconda x Jupyter notebook 설치 및 설정 방법 - 가상환경으로 파이썬 개발환경 구성
2020.03.10 - [IT 이야기] - Python x Jupyter Notebook 설치 및 환경 구성
2022.09.19 - [IT 이야기/IT 상식] - [Python 가상환경] conda 설치 및 가상환경 (feat. 내부 로직 & cheat sheet)
[MacOS] 백틱(`) 입력 - 원화(₩)입력 변경 to BQuote(`) (2) | 2022.10.31 |
---|---|
[MacOS - ZSH] 유용한 플러그인 2종 - 자동완성/하이라이트 (1) | 2022.10.20 |
[App] Android compileSdkVersion Error (ft. API 버전) (0) | 2022.09.13 |
[AWS교육 요약]-Technical Essential : IAM/Role/EC2/VPC/ELB (0) | 2022.07.11 |
[맥북-NTFS] 맥북에서 윈도우 외장하드(NTFS) 쓰기(mount) - 모든버전 사용 가능 (0) | 2022.06.29 |
댓글 영역