본 글은 CentOS 최소설치버전으로 설치된 서버에서 (내부망 운용등의
이유로)인터넷 접속이 불가한 상황일 때 Python3 및 패키지를 설치하는 법에
대해 설명하기 위한 글이다.
패키지의 예시는 konlpy 이다.
가상환경 준비
설명을 위하여
설치의 대상이 되는 CentOS 최소설치 환경을 똑같이 재현할 필요가
있다.
CentOS 최소설치가 된 가상환경을 Docker 을 통해 준비해 보았다.
(Docker를 모른다면 본 장은 설명을 위한 CentOS 환경을 그대로 재현하기
위함이구나 하고 넘어가면 되겠다)
$ docker run -it centos /bin/bash
CentOS 최소설치버전 이미지 다운로드한 후 컨테이너 실행하여
/bin/bash
를 실행해 CentOS 쉘로 접속하게 된다.
접속된 환경은 인터넷이 가능한 상황이지만, 인터넷이 안되는 상황을
전제하에 Python3 및 konlpy 패키지를 수동으로 설치해 볼 것이다.
Python3 설치파일 준비
이제부턴 CentOS 쉘에서의 상황임을 염두해 둔다.
$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ yum search python36
IUS Community Project의 리포지토리를 yum의 리포지토리에 추가한 후
python36 검색해 본다.
“python36” 으로 시작되는 다양한 리스트들이 출력될 것이다.
참고로 yum 의 -y
옵션 의미는 무조건 Yes로 입력하여 설치를
진행토록 하는 의미이다.
$ mkdir ~/python3
$ cd ~/python3
적당한 곳에 python3
디렉토리를 만들고 그곳으로 간다.
$ yum install -y --downloadonly --downloaddir=. python36u python36u-libs python36u-devel python36u-pip
Python3.6 버전대 패키지들을 설치하지 않고 다운로드만 하는 명령어이다.
1
위 명령어를 실행하면 관련된 패키지들의 rpm 을
워킹디렉토리(~/python3
)에 저장하게 된다.
[root@e1e70169f547 python3]# ll
-rw-r--r-- 1 root root 56192 Aug 3 04:20 python36u-3.6.2-1.ius.centos7.x86_64.rpm
-rw-r--r-- 1 root root 204112 Aug 3 04:20 python36u-devel-3.6.2-1.ius.centos7.x86_64.rpm
-rw-r--r-- 1 root root 9689852 Aug 3 04:20 python36u-libs-3.6.2-1.ius.centos7.x86_64.rpm
-rw-r--r-- 1 root root 1841528 Feb 3 2017 python36u-pip-9.0.1-1.ius.centos7.noarch.rpm
-rw-r--r-- 1 root root 663324 Mar 22 2017 python36u-setuptools-33.1.1-1.ius.centos7.noarch.rpm
실제로 확인해 볼 경우 5개의 rpm 파일들이 준비된 것을 확인할 수 있다.
konlpy 패키지 리소스 준비
파이썬의 패키지를 준비하기 위해선 pip
를 이용하는것이
좋다.
pip
를 이용하기 위해서 방금 받은 rpm 을 이용해 파이썬을
설치한다.
$ yum install -y *
정상적으로 설치되면 이때부터 python3.6
,
pip3.6
명령어를 이용할 수 있게 된다.
$ mkdir packages
$ cd packages
적당히 ~/python3/packages
디렉토리를 만들고 그곳으로
가자.
$ pip3.6 install --download=. tag
$ pip3.6 install --download=. konlpy
$ pip3.6 install --download=. JPype1
위 명령어 중 첫번째는 tag package 에 대한 리소스 압축파일
(.tag.gz
) 을 포함한 의존성이 있는 리소스를 모두 현
워킹디렉토리에 저장만 한다.
즉 패키지들이 설치되지는 않는다.
konlpy 와 JPype1 패키지 역시 마찬가지로 리소스를 준비시킨다.
[root@e1e70169f547 package]# ll
-rw-r--r-- 1 root root 147893 Oct 20 00:51 JPype1-0.6.2.tar.gz
-rw-r--r-- 1 root root 38404 Oct 20 00:52 intervaltree-2.1.0.tar.gz
-rw-r--r-- 1 root root 22454979 Oct 20 00:52 konlpy-0.4.4-py2.py3-none-any.whl
-rw-r--r-- 1 root root 32267 Oct 20 00:52 sortedcontainers-1.5.7-py2.py3-none-any.whl
-rw-r--r-- 1 root root 34414 Oct 20 00:52 tag-0.3.3.tar.gz
package 리소스 파일들이 준비되어 있는것을 확인할 수 있다.
인터넷이 불가한 CentOS 에서의 python3.6, packages 설치
인터넷이 불가했던 머신으로 시점을 옮긴다.
인터넷 접속이 안되었던 CentOS 서버에서 위에서 준비한 rpm, package
리소스들을 물리적으로 복사하여 가져온다.
본 예제의 경우 Docker 가상환경을 기준으로 설명했는데
컨테이너 안에서 빠져나온 후 (exit
로 빠져나올 수 있음)
$ docker cp <컨테이너명>:~/python3/ <호스트 경로>
의 방식으로 가상환경에 있던 rpm, package 리소스 들을
호스트로 떨어트린 후 USB 메모리등을 이용해 복사하여 인터넷이 불가한
CentOS 서버머신에 복사하면 되겠다.
참고로 컨테이너 명은 docker ps -a
를 통해 확인이
가능하다.
아래 docker cp 명령어는 나의 컴퓨터에 꽂혀 있는 USB 메모리로 리소스들을
복사하는 예이다.
$ docker cp e1e70169f547:~/python3/ /Volumes/lovetoken_usb/
(이외의 docker 를 이용하지 않은 상황에선 각자 상황에 따라 대처… 자세한 설명은 생략)
자 이제부터는 인터넷이 불가한 CentOS 서버상황이라고 가정한다.
편의상 ~/python3
에 복사한 것을 붙어넣었다고
가정하겠다.
$ cd ~/python3
복사한 python3 폴더로 간다.
$ yum install -y python36u-3.6.2-1.ius.centos7.x86_64.rpm python36u-devel-3.6.2-1.ius.centos7.x86_64.rpm python36u-libs-3.6.2-1.ius.centos7.x86_64.rpm python36u-pip-9.0.1-1.ius.centos7.noarch.rpm python36u-setuptools-33.1.1-1.ius.centos7.noarch.rpm
이 명령어를 통해서
yum 은 원격레파지토리를 검색하지 않고 ~/python3
에 있는 rpm
에 의존하여 파이썬을 설치하기 시작한다.
즉 수동으로 설치가 되는것이다.
역시 정상적으로 설치되면 python3.6
, pip3.6
을
실행할 수 있다.
$ cd packages
~/python3/packages
폴더로 가서 이젠 konlpy 패캐지 설치를
시도할 것이다.
pip3.6 install *
이 명령어를 통해서 인터넷 연결없이 konlpy 관련 패키지들을 수동설치하게 된다.
덧붙임 : Ubuntu 에선
apt-get -d install <package name>
으로 설치하지 않고.deb
파일들을 다운로드만 할 수 있다↩︎