채널 관리

복수의 다른 채널이 같은 패키지를 가지고 있을 수 있다. 따라서 채널 간에 충돌이 일어나지 않도록 관리해야 한다.

기본 채널만 사용하면 채널 충돌이 일어나지 않는다. 채널 간에 중복되는 패키지가 없어도 채널 충돌은 일어나지 않는다. 콘다는 사용자의 채널 목록에 있는 채널 중 복수의 채널이 동일한 패키지를 호스트할 때만 채널 충돌을 해결한다.

콘다 4.1.0 이전 버전

2016년 6월 14일에 배포된 콘다 4.1.0 버전 이전의 콘다는 두개의 채널이 같은 이름의 패키지를 호스트하면 이 중 더 높은 버전의 패키지를 설치한다. 두 패키지의 버전이 동일하면 빌드 번호가 높은 패키지를 설치한다. 두 패키지의 빌드 번호까지 같으면 채널 순서에 따라 패키지가 설치된다. 이러한 방식에는 다음과 같은 문제가 있다.

  • 패키지의 채널이 다르면 빌드 번호를 비교할 수 없다. 예를 들어, 채널A가 저녁마다 패키지를 빌드하고 채널B는 매주 패키지를 빌드하면 채널B의 빌드2는 채널A의 빌드4보다 최신 빌드가 될 것이다.
  • 사용자가 선호하는 채널을 지정할 수 없다. 채널A보다 채널B를 신뢰하여 채널B의 패키지 버전이 더 오래되었더라도 채널B로부터 패키지를 다운로드하길 원할 수 있다. 콘다는 이러한 설정을 지원하지 않고 버전과 빌드 번호에 따라 패키지를 설치한다.
  • 빌드 번호가 충돌한다. 이 충돌은 위의 두 문제로부터 생긴다. 채널A의 패키지 알파와 채널B의 패키지 베타를 잘사용하고 있었다고 가정하자. 채널B의 제공자가 더 높은 버전과 빌드 번호를 갖는 패키지 알파를 추가하면 기존에 사용하던 패키지 알파는 사용자가 원치 않아도 채널B의 패키지 알파로 업데이트된다. 이로 인해 의도치 않은 문제가 생기거나 고의적인 공격에 노출될 수 있다.

콘다 4.1.0 이후 버전

이제 콘다는 기본으로 선호도가 낮은 채널의 패키지 버전에 관계없이 선호도가 높은 채널의 패키지를 우선한다. 따라서 기본 채널이 제공하지 않는 추가 패키지를 위해 이를 제공하는 채널을 채널 목록 아래에 두어도 이 채널이 핵심 패키지 모음을 덮어쓰지 않는다고 확신할 수 있다.

콘다는 나열된 모든 채널에서 같은 이름의 패키지를 모두 모은 뒤 다음 단계를 따라 처리한다.

  1. 패키지를 채널 선호도에 따라 분류한다.
  2. 동일한 채널 선호도를 갖는 패키지들을 버전에 따라 분류한다.
  3. 채널 선호도와 버전이 같은 패키지들을 빌드 번호에 따라 분류한다.
  4. 분류된 목록에서 설치 사양을 만족하는 첫번째 패키지를 설치한다.

예전 방식대로 나열된 채널의 패키지 중 최신 버전의 패키지를 설치하려면 다음과 같이 한다.

  • .condarc 파일에 channel_priority: false를 추가한다.

    또는

  • 위 작업과 동일한 명령을 실행한다.

    conda config --set channel_priority false
    

이제 콘다는 다음 단계를 따라 분류한다.

  1. 패키지 목록을 버전에 따라 분류한다.
  2. 버전으로 분류된 패키지들을 채널 선호도에 따라 분류한다.
  3. 버전과 채널 선호도로 분류된 패키지들을 빌드 번호에 따라 분류한다.

패키지의 채널이 다르면 빌드 번호를 비교할 수 없기 때문에 채널 선호도를 빌드 번호보다 우선한다.

다음 명령은 “new_channel”을 채널 목록 맨 위에 추가하여 가장 높은 선호도를 갖도록 한다.

conda config --add channels new_channel

(위의 명령은) 다음 명령과 동일하다.

conda config --prepend channels new_channel

다음 명령은 “new_channel”을 채널 목록 맨 아래에 추가하여 가장 낮은 선호도를 갖도록 한다.

conda config --append channels new_channel