데이터 분석, Python/Python 기초 및 문법

Anaconda 환경 내보내기, prefix 없이 깔끔하게 내보내기 (conda env export, clone 복사)

북더기 2023. 9. 19. 23:01

Anaconda를 사용하다 보면, 동일 환경을 다른 사람 또는 다른 PC에서 사용하기 위해 복사해야 하는 경우가 있다.

이때, 하나하나 패키지를 설치할 필요 없이 yml 파일로 내보내고, 이를 통해 쉽게 환경을 복사할 수 있는 방법이 있다.

 

- 다른 PC 환경에 yml 파일을 통해 가상환경 내보내기 

- 같은 PC 환경에 직접 가상환경 복사하기 

- 추가적으로 prefix 없이 깔끔하게 내보내는 방법 제공 

 

(필자는 Anaconda를 상시 사용 중이라 가상환경을 내보내는 경우가 많았으나,

항상 prefix가 붙어서 그대로 다른 PC에서 설치할 때 에러가 나는 경우가 너무 많았다.

마지막 prefix 부분은 정말 유용하다고 본다.)

 

[yml 파일을 통해 가상환경 내보내기]

1. Export할 가상환경 활성화

conda activate <가상환경 명>

- Anaconda Prompt 또는 Anaconda가 활성화 된 상태에서, 특정 가상환경을 Activate 시킨다.

별도의 가상환경을 사용하지 않는 경우, 기본적으로 (base) 로 표시된다.

 

2. Conda 가상환경을 Yml 파일로 export 

conda env export > environment.yml

- 해당 명령어를 사용하여 현재 활성화된 가상환경의 환경 정보를 내보낸다.

- 사용중인 conda 채널, 가상환경 이름, conda 및 pip로 설치한 패키지명 및 버전명이 표시된다.

yml 파일은 내보낸 폴더의 위치에서 확인할 수 있다. 메모장 또는 notepad++ 를 통해 열기를 추천한다.

 

- 추가로, 내보냈을 때 하단에 표시되는 prefix는 설치 디렉터리를 나타내므로, 새로운 환경에서 다른 디렉터리를 사용하는 경우 해당 prefix는 삭제하도록 한다.

 

3. yml 파일로 새로운 Conda 가상환경 생성

conda env create -f environment.yml

- 해당 명령어를 사용하여 새로 Anaconda 가상환경을 복사하고 yml 파일에 들어간 패키지 및 버전 정보에 맞춰 가상환경을 생성한다.

-f 옵션: 파일 지정 (만약 현재 command를 날리는 위치가 yml 파일이 위치한 곳이 아니라면, 위의 명령어에서 직접 yml 파일의 디렉터리 경로까지 명시하여 파일 위치를 지정할 수 있다.)

 

가상환경 자체를 통째로 복사한 것은 아니기 때문에, 패키지 설치 시 일정 시간이 소요된다.

설치 시 종속성 충돌 등 다양한 문제가 발생할 수 있으므로, 중간중간 트러블슈팅을 진행하며 설치한다.

특히나 Linux Anaconda에서 사용 중인 가상환경을 Windows로 설치하는 경우,

세부 Conda 패키지 중 Linux / Windows에서만 지원하는 패키지가 존재하기 때문에 해당 패키지는 OS에 맞게 수정하거나 제거하는 등 일부 수정하는 과정이 필요하다.

 

4. Anaconda yml, yaml 패키지 뒤에 붙는 prefix 없이 깔끔하게 내보내기

conda env export —no-builds > environment_clean.yml

- 해당 명령어를 사용하여 가상환경 yml 파일을 좀더 깔끔하게 내보낼 수 있다.

--no-builds 옵션 : prefix 없이 깔끔하게 패키지와 버전만 내보낸다.

왼쪽이 --no-builds 옵션을 통해 패키지와 버전만 내보낸, prefix 없는 깔끔한 버전이고,

오른쪽이 일반적으로 내보낸 prefix가 존재하는 버전이다. prefix가 붙어 있는 경우 굉장히... 설치 시에 오류가 많이 발생한다.

따라서 4번의 해당 옵션을 꼭 추가하는 것을 권장한다.

[같은 PC에서 가상환경 복사하기]

conda create -n new_env --clone exist_env

- 해당 명령어를 사용하여 같은 환경 내에 있는 <exist_env> 가상환경을 <new_env> 가상환경 이름으로 복사할 수 있는 명령어다.

해당 부분은 기존에 사용중인 가상환경 명과 새로 생성할 가상환경 명으로 바꾸어 사용하면 된다.

- new_env : 새로 생성할 가상환경 이름

- exist_env : 사용 중인 가상환경 이름 (복사할 가상환경)