본문 바로가기
카테고리 없음

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

by 북더기 2023. 9. 19.

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 : 사용 중인 가상환경 이름 (복사할 가상환경)