ABEJA Platform에 private python module 사용 TIPS

ABEJA Platform AdventCalendar 2018 20일째의 기사입니다.
이번에는 파이썬의 private module을 ABEJA Platform에서 사용하는 TIPS에 대해 소개하고 싶습니다.

동기 부여



ABEJA Platform에서는 사전 설치된 모듈 이외를 사용하고 싶은 경우, requirements.txt에 기재해 두면 모델의 기동시에 인스톨 되는 사양이 되고 있습니다.
cf. https://developers.abeja.io/organization/model/# 라이브러리 추가
이 때 공용 모듈을 사용하는 경우에는 특별히 문제가되지 않지만 회사의 공통 라이브러리 등 private 모듈을 사용하고 싶을 때 설치할 수 없다는 문제가 발생합니다. 이번에는 그러한 경우에 어떻게 배포해야하는지 TIPS를 소개합니다. private python module은 package cloud와 같은 private pypi repository에 업로드되었다고 가정합니다.

해결책



그 1



가장 쉬운 방법은 AWS Lambda용 python 배포 패키지에있는 모든 종속성을 로컬에 설치하고 소스 코드에 포함시켜 업로드하는 것입니다.
$ pip install Pillow --t .
$ tar -zcvf model.tar.gz *

그러나이 방법에는 하나의 약점이 있습니다. 파이썬 모듈에 C의 네이티브 라이브러리를 사용해야하는 경우 대응하기가 어렵습니다. 필요한 네이티브 라이브러리를 수집하거나 LD_LIBRARY_PATH를 올바르게 환경 변수로 올바르게 설정해야합니다. 특히 Deep Learning에서 사용되는 것과 같은 모듈에는 고속화를 위해 C의 네이티브 레벨에서 손을 넣고 있는 것이 많아, 공통화의 장벽이 됩니다.

그 2



위의 문제를 해결하기 위해 가상 환경을 사용하는 방법 유형도 생각할 수 있지만, 네이티브 라이브러리 간의 종속성을 해결하면서 모든 것을 소스 코드에 포함하는 것이 번거롭기 때문에 이번에는 private pypi repository extra-index-url로 추가하는 방법을 소개합니다.

먼저 다음과 같이 소스 코드에 pip.conf를 포함시킵니다. 이번에는 package cloud 를 예로 소개합니다만, 적절히 이용하고 있는 private pypi repository 로 읽어 주세요.
$ tree
.
├── main.py
├── pip.conf
└── requirements.txt

0 directories, 3 files

pip.conf
[global]
extra-index-url=https://{API_TOKEN}:@packagecloud.io/xxx/pypi/simple

또한 배포 할 때 다음 환경 변수를 추가하십시오. 이렇게하면 모듈을 설치할 때 소스 코드에 포함 된 pip.conf가로드되고 종속 패키지가 올바르게 설치됩니다.


요약


extra-index-url를 추가하여 ABEJA Platform에서 private python module을 사용할 수있는 방법을 소개했습니다. 이제 회사의 공통 라이브러리를 활용하여 모델 개발도 가능하게 되었습니다. 그럼, 효율적인 개발 생활을!

좋은 웹페이지 즐겨찾기