IT 실무 (환경구성)

Python package를 폐쇄망에 설치하기 (pip3)

작동미학 2021. 1. 5. 23:25
반응형

 금융계열에서 python을 사용하면서 초기에 가장 어려웠던 것이 이 python package를 폐쇄망 서버에 설치하는 일이었다. 처음에는 얼마나 당혹스러웠는지 모른다. 대부분 인터넷에 연결된 서버에서 작업을 하는 환경에 익숙하기 때문에 참으로 곤란하다. 그리고 금융계 회사들은 패키지 반입도 쉽지 않은 경로를 통해 들여오다 보니 이 작업이 보통 난감해지는 게 아니다.

머신러닝의 동반자가 되어버린 python, 폐쇄망/내부망에 설치하는 방법은?

대략 tensorflow, pytorch, autokeras, scikit-learn, numpy 등 설치를 하고 나야 AI가 시작될 수 있지 않은가!

 

하지만 역시 알고 나면 크게 어려운 점은 사라진다.

 

참고로 필자는 python3.6을 주로 활용한다. 해당 버전을 선호하는 이유는 해외의 주요 공개 코드들이 이 버전 근처를 가장 잘 지원하기 때문이다. 따라서 pip3로 가이드해보자.

 

1) 우선 패키지 파일을 다운로드 받아야 한다.

당연히 인터넷에 연결된 python package 다운로드가 가능한 서버에 접속해서 해야 하는 작업이다. 해당 서버에 설치된 python 패키지가 무엇인지 보려면 아래와 같이 입력한다.

 

$ pip3 list

Package              Version
-------------------- ----------------------
autokeras            1.0.1
Keras-Applications   1.0.8
Keras-Preprocessing  1.1.0
keras-tuner          1.0.1
numpy                1.18.1
pandas               0.24.2
protobuf             3.11.3
requests             2.23.0
requests-oauthlib    1.3.0
scikit-learn         0.22.1
scipy                1.4.1
setuptools           45.2.0
tensorboard          2.1.0
tensorflow           2.1.0
tensorflow-estimator 2.1.0
torch                1.4.0
tornado              6.0.4
...

 

우선 하나의 패키지를 골라서 다운로드 받아보자. 물론 인터넷이 연결된 서버에서 작업해야 한다.

윈도우 PC에서도 가능한 방법이 있는데 윈도우 10의 WSL(윈도우에서도 최근 리눅스 설치가 가능해졌다. WSL을 통해 ubuntu 같은 것을 윈도우상에 설치해 linux python3 환경을 구성할 수 있다. 각 금융사마다 다르겠지만, 인터넷망 PC에서 WSL을 구성할 수 있는 곳이 있다면 그것을 활용하자. 아니라면 클라우드 등 별도 외부 인터넷망 접속 가능 서버를 마련해야 한다.)

 

이제 autokeras 패키지를 예를 들어 다운로드해보자

 

$ pip3 download autokeras

 

나중을 위해 참조로 아예 버전을 명시하려면 아래와 같이 입력한다. (버전 명기가 없으면 가능한 최신 버전이 선택된다)

 

$ pip3 download autokeras==1.0.1

Collecting autokeras==1.0.1

  Downloading autokeras-1.0.1-py3-none-any.whl (66 kB)

...

 

이렇게 실행되면 dependency가 모두 조사되어 해당 working directory에 없는 패키지 파일(whl 혹은 gz)들이 모두 다운로드됨을 알 수 있다. 물론 이 다운로드는 해당 서버에 패키지 설치 여부와 상관없이 진행되므로 부담 없이 하자. 다 받고 나면 아래와 같이 확인할 수 있다. 특정 패키지들은 생각보다 크기가 크므로 어느 정도의 여분 용량은 필요하다.

 

$ ls

autokeras-1.0.1-py3-none-any.whl

packaging-20.8-py2.py3-none-any.whl

...

 

참고로 예전에 pip3 install --download 명령이 deprecated 되기 전에는 아래 명령어도 잘 작동했다. 무언가 오래된 python 버전에서는 사용될 수도 있으니 알아두자. 그리고 여기의 명령들은 pip에서도 대부분 작동하리라 생각한다.

 

$ pip3 install --trusted-host pypi.python.org --download . autokeras  #(install download명령이 deprecated되기전)

 

 

이 과정에서 인증서 오류가 발생하는 경우가 있다. python package 서버의 인증서를 해당 python이 신뢰하지 못하는 상황인데 아래와 같이 강제로 신뢰받도록 trusted-host 명령을 추가해보자.

 

$ pip3 install --trusted-host pypi.org --trusted-host files.pythonhosted.org --download . autokeras

 

특정 금융사의 경우는 SSL통신 모니터링을 위해서 외부 서버의 인증서를 모두 특정 내부 인증서로 변환하기도 하는데, 이때 python package download시에는 몇 가지 문제를 발생시킬 수 있다. 이 경우는 해당 인증서를 아예 python에 설치하거나 아래와 같이 해당 인증서를 가지고 SSL 인증을 통과하는 방법이 있다. 정보보호팀에 문의하여 해당 인증서를 확보한 후(혹은 해당 동일 환경의 PC의 브라우저에서 따로 저장해도 된다.) 아래와 같이 시도해보자. 참조로 신기하게도 인증서 이슈는 어디서나 만나게 되는데 이 블로그의 finai.tistory.com/1 글을 나중에 살펴보기를 권장한다.

 

$ pip3 download --cert mycert.crt autokeras #(혹은 $ /usr/bin/python3 -m pip download --cert mycert.crt autokeras)

($ vi /usr/lib/python3/dist-packages/certifi/cacert.pem 로 위 mycert.crt를 맨 마지막에 복사해서 append 할 수도 있다)

 

2) 위 다운로드한 패키지들을 각 회사에 맞는 방법으로 반입한다.

 

 당연히 한 파일이라도 빼놓지 않고 옮겨야 하며, python 버전 등의 환경은 같은 상태에서 작업을 진행하는 것이 정신건강에 좋다. dependency가 잘 맞지 않으면 늘 OS를 다시 설치하고 싶은 충동을 느낄 정도로 고생을 하게 된다.

 

3) 신규 서버에 패키지 파일을 복사해 넣은 후 설치한다.

 설치할 대상 서버로 접속한 후 적당한 폴더에 상기 파일을 모두 복사해둔다. 그리고 아래와 같이 실행한다.

 

$ ls #(파일이 잘 복사되어 있는지 확인한다)

autokeras-1.0.1-py3-none-any.whl

packaging-20.8-py2.py3-none-any.whl

...

 

$ pip3 install --no-index --find-links=. autokeras

 

깔끔하게 잘 설치되면 정상이다.

 

4) 설치할 패키지가 많아서 번거로운데 한꺼번에 하는 법은 없나요? 

 다행히도 있다. 우선 참고로 인터넷에 연결된 서버에서 설치된 패키지의 리스트를 모두 확보해보자.

 

$ pip3 freeze > package.txt

$ more package.txt

scikit-learn==0.22.1
..

 

이 package.txt를 적당히 편집해 내가 설치하고 싶은 패키지만 남겨놓는다(편집기로 적절히 편집한다)

그러고 나서 해당 패키지 파일을 다운로드 받는다.

 

$ pip3 download -r package.txt

$ ls #(다운받은 파일을 확인한다)

...

 

그리고 마찬가지로 다운로드한 파일과 위 package.txt도 같이 모두 반입하여 설치할 대상 서버의 특정 폴더에 복사한 후 아래와 같이 입력한다. 기존과 동일한 방법인데 설치 시에 패키지명 대신에 해당 패키지 파일을 명시해주면 된다(-r 옵션)

 

$ ls #(패키지 파일이 제대로 존재하는지 확인한다)

...

 

$ pip3 install --no-index --find-links=. -r package.txt

 

몇 번만 해보면 어떤 패키지든 어렵지 않게 설치할 수 있다. 아예 최근에 자주 사용하는 컨테이너 기반으로 모두 셋팅해서 반입하는 것도 방법이다(자연어 처리의 특정 패키지는 linux c compile이 필요하기도 하다.) docker container 프로그램 등의 반입 설치(yum install) 등은 이 블로그의 다른 글 finai.tistory.com/2 를 참고하면 된다.

 

 

반응형