Anaconda 사설 로컬 저장소 채널 만들기

프로그래밍 팁 2022. 7. 27. 23:07

 지금 이순간에도 등장하는 새로운 인공지능 알고리즘을 테스트해보고자 라이브러리를 맞추어서 설치해야 하는데 라이브러리 종속성 충돌로 인해 상당히 골치아픈 일이 많을 것입니다. 이 때 라이브러리를 가상 환경에 만들어 제공하는 Anaconda는 굳이 컴퓨터를 리셋하지 않더라도 간단하게 독립된 가상 환경에서 다른 인공지능 알고리즘의 종속성에 구애받지 않아도 되기 때문에 인공지능 라이브러리 관리 프로그램으로 널리 사용되고 있습니다.

 Anaconda는 딥러닝에 필요한 라이브러리를 인터넷을 통해 제공하고 있습니다. 특히 conda-forge 채널은 상당히 많은 라이브러리들을 제공하고 있어 사실상 Anaconda에서 가장 많이 사용되는 저장소이기도 합니다.

 

 그러나 pytorch와 같이 가장 주요한 딥러닝 라이브러리의 경우 용량이 큰데다가 다운로드 받는데에만 상당한 시간이 소요됩니다. 또한 기업 혹은 국가 기관과 같이 보안을 요구하는 곳에서 혹여나 해커에 의해 악성코드가 숨겨진 라이브러리가 유입될 경우 무형 자산의 심각한 손실이 발생하기도 합니다.

 이러한 환경에서는 자주 사용되는 라이브러리를 로컬 공간에 저장해두고 사용하는 방법이 요구됩니다. 같은 망 내에 있는 컴퓨터를 통해 자료를 받기 때문에 다운로드 속도 향상은 물론 검증된 자료만 사설망 내에 활용함으로서 외부로부터 악성 공격의 유입을 막을 수 있습니다.

 이러한 환경을 만들기 위해 Anaconda의 라이브러리 채널을 저장하여 사설 저장소를 구축하는지에 대해 알아보도록 하겠습니다.

 

기본 개념

 

Python - 프로그래밍 언어 中 하나로서 PIP(파이피)를 통해 수많은 라이브러리를 사용할 수 있습니다.

PIP - Python의 라이브러리 설치를 도와주는 패키지 인스톨러로서 명령어만으로 저장소에서 다운로드 하여 설치할 수 있습니다.

ANACONDA - PIP의 최대 단점인 root 호환성 문제 및 서로 다른 버전의 패키지를 요구하는 인공지능 알고리즘들을 별개의 가상환경을 생성하여 관리해주는 사설 패키지 저장소입니다. 단지 원하는 환경을 명령어로 부르는 것 만으로 다른 라이브러리와의 의존성 충돌을 피하는 것 만으로도 개발자들의 생산성 향상에 큰 기여를 하고 있습니다.

CHANNEL - Anaconda의 저장소를 이루는 기본 단위로서, 자신이 원하는 저장소를 선택하여 패키지를 설치할 수 있습니다.

conda-forge - Anaconda의 channel중 하나로서 상당히 많은 패키지들을 제공합니다. 패키지를 설치하고자 할 때는 다음과 같은 명령어를 사용합니다.

 

$ conda install -c conda-forge 패키지명

 

위 명령어에서 -c는 원하는 채널을 설정하는 명령어로 conda-forge 채널에 있는 패키지를 받아오겠다는 명령어입니다.

 

 지금까지 Anaconda 및 채널의 개념에 대해 설명드렸습니다.  이제부터 우리가 직접 Anaconda의 채널을 만들고 이를 외부에 공개하는 방법에 대해 살펴보도록 하겠습니다.

 

1. Channel 저장소를 미러링 하여 가져오기

 자신만을 위한 Channel 저장소를 만들기 위해 저장소에 다운받았던 나의 환경에 있는 패키지를 그대로 사용하는 방법이 있습니다만, 다른 환경에서 설치할 때 의존성 문제가 발생할 수 있으므로 인터넷 상에 공개되어 있는 Channel 저장소를 미러링하여 가져오는 방법에 대해 설명 드리겠습니다.

 

 먼저 Channel 저장소의 패키지들을 로컬 저장소로 복사해주는 패키지인 conda-mirror를 설치합니다.

$ pip install conda-mirror

혹은

$ conda install -c conda-forge conda-mirror

혹은

$ git clone https://github.com/conda-incubator/conda-mirror

 

 다음으로 로컬 저장소로 복사하고자 하는 채널을 미러링 합니다. 이를 위해 사용되는 conda-mirror의 사용 옵션에에 대해 간단히 살펴보도록 합시다.

-h, --help
conda-mirror의 옵션들을 확인하실 수 있습니다.
--upstream-channel UPSTREAM_CHANNEL
로컬 저장소에 복사하고자 하는 채널명 혹은 주소를 입력합니다.
--target-directory TARGET_DIRECTORY
upstream channel에서 미러링할 로컬 저장소의 경로를 설정합니다.
--temp-directory TEMP_DIRECTORY
로컬 저장소의 경로에 저장하기 전 임시로 저장하고자 하는 폴더 경로를 입력합니다.
Windows의 경우 사용자 계정의 Temp 내에 임의로 생성됩니다. 이 경우 폴더 관리가 어려울 수 있습니다.
--platform PLATFORM
미러링 하고자 하는 운영체제의 종류를 선택합니다. {'linux-64', 'linux-32','osx-64', 'win-32', 'win-64'}
-D, --include-depends
받고자 하는 패키지의 조건을 설정할 수 있습니다. 일종의 화의트리스트 기능을 합니다.
--config CONFIG
blacklist 및 whitelist를 설정한 yaml 파일을 불러옵니다.
--num-threads NUM_THREADS
다운로드를 위해 사용할 스레드의 갯수를 입력합니다. 0을 입력할 경우 사용가능한 모든 스레드를 설정합니다.
--minimum-free-space MINIMUM_FREE_SPACE
로컬 저장소의 용량이 제한되어있을 경우 해당 용량이 초과하지 않도록 mb 단위로 설정합니다.
-k, --insecure
SSL 에러 이슈로 에러가 발생할 경우 SSL을 무시하고 사용합니다.

만약 conda-forge에서 linux 64비트 라이브러리 전체를 다운로드 받고자 한다면 다음과 같이 입력합니다.

 

$ conda-mirror --upstream-channel conda-forge --target-directory local_mirror --platform linux-64

 

 conda-forge는 Python의 거의 모든 패키지를 제공한다 해도 무방할 만큼 모두 미러링을 하게 될 경우 상당한 용량을 감당해야 하는 부담감이 있습니다. 우리들이 사용하고자 하는 라이브러리 패키지가 일부이기에 용량만 차지하는 패키지까지 저장해야할 이유가 없지요. 이를 위해 config를 통해 blacklist와 whitelist를 설정하여 원하는 패키지만 설치할 수 있습니다. blacklist란 다운로드를 원치 않는 패키지가 있는 경우 이를 특정고자 할 때 사용하며, whitelist는 특정한 패키지만 다운로드 하고자 할 때 해당 패키지의 상세 내용을 적어 이외의 패키지를 받지 않기 위해 사용합니다. 이를 위해  config에 적용하고자 하는 yaml 파일을 생성합니다.

 

 만약 여러분들이 botocore라는 라이브러리만 얻고자 하고 특정 버전 및 사용하고자 하는 파이썬 버전을 한정하고자 한다면 다음과 같이 내용을 입력합니다.

blacklist:
- name: "*"
whitelist:
- name: botocore
  version: 1.4.10
  build: py34_0

 

 반면, 특정 패키지중 패키지명에 'agpl'이라는 이름이 들어간 패키지를 제외한 모든 패키지를 설치하고자 한다면 다음과 같은 명령어를 입력합니다.

blacklist:
- license: "*agpl*"

 

 다음으로 예제를 실행해봅시다. 이 예제에서는 특정 버전의 git 패키지만 다운로드할 것입니다.

example.yaml

blacklist:
    - name: "*"
whitelist:
  - name: git
    version: ">=2.32"

 

 다음으로 config를 적용하여 원하는 라이브러리를 conda-forge로부터 가져옵니다.

$ conda-mirror --upstream-channel conda-forge --target-directory 로컬폴더 --temp-directory 임시폴더 --platform win-64 --config .\example.yaml

 

  이 명령어를 실행하면 아래의 그림과 같이 2.32버전 이상의 git 라이브러리 패키지가 다운로도 된 것을 확인하실 수 있습니다.

 

2. 사설 로컬 저장소 채널 지정하기

  이번에는 자신이 갖고 있는 패키지 라이브러리를 사설 저장소 채널로 만드는 작업을 진행합니다. 먼저 conda-build 패키지를 설치합니다.

$ conda install conda-build

 

 로컬 저장소 채널로 만들고자 하는 폴더가 들어있는 디렉토리에 위치한 다음 다음과 같은 명령어를 입력합니다.

 

$ conda index 채널명

 

 실행 후 잠시 기다리면 다음과 같이 채널 디랙토리 내에 index 웹페이지 폴더가 생성된 것을 확인하실 수 있습니다.

 

 

3. 웹서버 구축 및 등록하기

 

 custom 채널 디렉토리에 생성된 index 웹페이지를 열면 다음과 같이 미러링 하였던 저장소 목록이 나타나는 것을 확인하실 수 있습니다.

 

 다음으로 외부에서 미러 서버에 접속할 수 있도록 웹 서버를 설치합니다. 웹서버는 Apache를 보편적으로 사용되고 있습니다.

 자신의 운영체제에 맞는 Apache를 설치하여 웹서버를 구축하도록 합니다.

 

https://mainia.tistory.com/5572

 

윈도우10 아파치 웹 서버 설치하기

아파치 Apache 는 아파치 재단에서 만든 웹 서버 입니다. 윈도우뿐만 아니라 Unix, Linux 등의 운영체제에서 쉽게 운영할 수 있도록 만든 소프트웨어 입니다. 웹 어플리케이션을 만들기 위한 가장 기

mainia.tistory.com

https://askforyou.tistory.com/120

 

[linux] 우분투(ubuntu) 아파치(apache) 웹서버 설치 구축(ufw 방화벽 설정)

아파치 웹서버 설치하기 1. 패키지 목록 업데이트 $ sudo apt-get update 2. 아파치 설치 $ sudo apt-get install apache2 3. 설치 진행 화면에서 "y" 입력 후 진행 3. 설치 완료 후 확인 $ sudo service apache2..

askforyou.tistory.com

 

 Apache httpd를 다운로드하신 후 압축을 풀어 원하는 위치에 설치를 진행합니다. 그 다음 httpd.conf 파일을 열어 4군데를 수정하여 자신의 환경에 맞추어 설정합니다. 

 

 

 위의 절차대로 수행한 다음 설정한 주소를 입력하면 Anaconda Repository 사이트 웹페이지가 나타나는것을 확인하실 수 있습니다.

 

 

4. 구축된 Anaconda custom 저장소 접속하기

 지금까지의 과정을 통해 만든 Anaconda custom 저장소의 Library 패키지를 다운로드해봅니다.

 

> conda install -c http://127.0.0.1/custom-cf git

 

 

 축하합니다! 여러분들만의 Anaconda custom 사설 저장소가 완성되었습니다.

 

 

 

 

 

300x250