본문 바로가기

Python

[Conda] global package를 conda env에서 사용하기

Anaconda나 miniconda를 새로 설치하면서 기존에 pc에 설치됐던 python이나 기타 패키지들을 그대로 사용하고 싶은 경우가 있다. 기존에 python을 이용하고 있는 상태였다면 conda를 새로 설치해 environment를 구성하게 되면 꽤 많은 패키지들이 중복으로 설치되게 되기 때문에 용량이 낭비되는 문제도 존재한다.

 

 

여러 방법이 존재하겠지만 나는 Symbolic Link를 설정해 해결하였다.

간단히 말하면 링크를 생성해서 global에 설치된 package들을 conda의 env가 참조하여 사용가능하도록 하는 것이다.

용어의 정의를 설명하기 위한 글은 아니기 때문에 빠르게 설정 방법만 알아보자.

 

 

Symbolic Link 설정

# 경로 내의 모든 패키지에 대해 link 생성
ln -s [global_package_dir]/* [conda_env_dir]

# 특정 패키지에 대해 link 생성
ln -s [global_package_path] [conda_env_dir]

경로 내의 모든 패키지에 대해 link를 생성할 수도, 특정 패키지만 link를 생성할 수도 있다.

패키지가 global에 설치되는 경로와 conda env의 경로를 입력하면 간단히 링크가 생성된다. 

 

하나의 패키지만 link를 생성할 때 주의해야할 점은 버전 충돌이나 호환성 문제가 발생할 수 있다는 점이다.

 

Result

실행 결과를 보여주기 위해 python에서 간단히 python의 위치와 torch의 위치를 출력해보았다.

python의 경우 main이라는 이름의 env에 위치하는 것을 볼 수 있고 torch의 경우 global경로에 위치하는 것을 볼 수 있다.

 

Symbolic Link를 통해 conda 환경에서 전역에 위치하는 패키지를 참조해 사용하는 것이다.

 

 

Link 삭제

이전에 생성한 링크를 삭제하려면 아래와 같은 command를 입력하면 된다.

find [conda_env_dir] -type l -exec rm {}

# -type l : symbolic link 파일만 검색하도록 지정
# -exec rm {} : find를 통해 찾은 파일만 삭제

-type과 -exec rm 조건을 설정하지 않으면 conda 환경에서 설치한 패키지들도 함께 삭제되니 주의해야 한다.