작은숲:위키노트/Python 3 설치

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
(Python 3 설치에서 넘어옴)

패키지 설치

CentOS에서는 2016년 3월 현재 Python 3을 아직 정식 패키지로 지원하지 않는다. 그래도 패키지로 설치하는 방법은 있는데, 그 중 하나는 Software Collections(SCL)에서 제공하는 패키지이다. SCL은 어떤 소프트웨어의 여러 버전을 한 시스템에서 사용할 수 있게 해준다. 한 가지 문제는 SCL에서 제공하는 Python 3.4 패키지는 설치 후 SCL 가상 환경에서만 제대로 실행된다는 것이다. 뭔가 방법이 있을 것 같은데 아직 그 방법을 찾지 못했다. SCL에서 제공하는 Python 3.4를 설치하기 위해서는 먼저 SCL 패키지를 설치해야 한다.

# yum install centos-release-scl
Loaded plugins: security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package centos-release-scl.noarch 10:6-6.el6.centos will be installed
...
Installed:
  centos-release-scl.noarch 10:6-6.el6.centos
Dependency Installed:
  centos-release-scl-rh.noarch 0:1-1.el6.centos
Complete!

만약 RHEL를 쓰고 있다면 yum-config-manager를 실행한다.

# yum-config-manager --enable rhel-server-rhscl-7-rpms

SCL 패키지의 설치가 끝나면 Python 3.4를 설치한다.

# yum install rh-python34
Loaded plugins: security
Setting up Install Process
centos-sclo-rh                                                               | 2.9 kB     00:00
centos-sclo-rh/primary_db                                                    | 1.1 MB     00:00
centos-sclo-sclo                                                             | 2.9 kB     00:00
centos-sclo-sclo/primary_db                                                  | 1.2 kB     00:00
Resolving Dependencies
--> Running transaction check
---> Package rh-python34.x86_64 0:2.0-5.el6 will be installed
...
Installed:
  rh-python34.x86_64 0:2.0-5.el6
Dependency Installed:
  rh-python34-python.x86_64 0:3.4.2-9.el6
  rh-python34-python-devel.x86_64 0:3.4.2-9.el6
  rh-python34-python-docutils.noarch 0:0.12-1.el6
  rh-python34-python-jinja2.noarch 0:2.7.3-2.el6
  rh-python34-python-libs.x86_64 0:3.4.2-9.el6
  rh-python34-python-markupsafe.x86_64 0:0.23-1.el6
  rh-python34-python-nose.noarch 0:1.3.4-2.el6
  rh-python34-python-pip.noarch 0:1.5.6-4.el6
  rh-python34-python-pygments.noarch 0:1.6-1.el6
  rh-python34-python-setuptools.noarch 0:11.3.1-2.el6
  rh-python34-python-simplejson.x86_64 0:3.6.5-1.el6
  rh-python34-python-sphinx.noarch 0:1.2.2-2.el6
  rh-python34-python-sqlalchemy.x86_64 0:0.9.8-1.el6
  rh-python34-python-virtualenv.noarch 0:1.11.6-1.el6
  rh-python34-runtime.x86_64 0:2.0-5.el6
  scl-utils-build.x86_64 0:20120927-27.el6_6
Complete!

설치가 끝나면 Python 3.4는 /opt/rh/rh-python34/root/usr/bin 디렉토리 아래에 설치가 된다. 하지만 앞에서도 말했지만 이 상태에서는 /opt/rh/rh-python34/root/usr/bin/python3.4를 실행시켜도 아래와 같은 오류가 나며 실행되지 않는다.

$ /opt/rh/rh-python34/root/usr/bin/python -V
/opt/rh/rh-python34/root/usr/bin/python: error while loading shared libraries: libpython3.4m.so.rh-python34-1.0: cannot open shared object file: No such file or directory

SCL에서 제공하는 Python 3.4는 SCL 가상 환경에서만 동작하도록 만들어져 있다.

$ scl enable rh-python34 bash

위 명령을 실행하면 새로운 bash이 실행되고 그 환경에서는 Python 3.4가 제대로 동작한다.

$ python -V
Python 3.4.2
$ /usr/bin/python -V
Python 2.6.6
$ /opt/rh/rh-python34/root/usr/bin/python -V
Python 3.4.2

SCL 가상 환경으로 들어가면 /opt/rh/rh-python34/root/usr/bin 디렉토리가 경로에 잡혀있어서, python 명령을 실행하면 시스템에 기본 설치되어 있는 Python이 아니라 새로 설치한 Python이 실행된다. 번거롭다. 설치하는 것은 금방이라 편하다. 새로운 버전이나 예전 버전을 시험해보기에도 좋다. 하지만 평소 쓰기에는 번거롭다.

컴파일 설치

http://www.python.org/download 에서 적당한 버전을 내려받는다. 2016년 3월 현재 최신 안정 버전은 3.5.1이다.

# wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
...
# tar zxvf Python-3.5.1.tgz
...
# cd Python-3.5.1
# ./configure
...
creating Modules/Setup
creating Modules/Setup.local
creating Makefile
# make

make가 성공적으로 끝나면 실행 파일을 설치하는데 두 가지 방법이 있다. 첫 번째 방법은 make install 명령으로 기존 실행 파일과 같은 python이라는 이름으로 만드는 것이고, 다른 방법은 make altinstall 명령으로 새로운 파일 이름, 즉 python3.5로 만드는 것이다. 기존에 설치된 소프트웨어나 패키지의 의존성 문제가 생기지 않는다는 확신이 없다면 make altinstall 명령으로 설치하는 것이 좋다.

# make altinstall
...
changing mode of /usr/local/bin/pydoc3.5 to 755
changing mode of /usr/local/bin/pyvenv-3.5 to 755
changing mode of /usr/local/bin/2to3-3.5 to 755
changing mode of /usr/local/bin/idle3.5 to 755
rm /usr/local/lib/python3.5/lib-dynload/_sysconfigdata.py
rm -r /usr/local/lib/python3.5/lib-dynload/__pycache__
/usr/bin/install -c -m 644 ./Misc/python.man \
                /usr/local/share/man/man1/python3.5.1
if test "xupgrade" != "xno"  ; then \
                case upgrade in \
                        upgrade) ensurepip="--altinstall --upgrade" ;; \
                        install|*) ensurepip="--altinstall" ;; \
                esac; \
                 ./python -E -m ensurepip \
                        $ensurepip --root=/ ; \
        fi
Ignoring indexes: https://pypi.python.org/simple
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-7.1.2 setuptools-18.2

설치가 정상적으로 진행되면 /usr/local/bin, /usr/local/lib/python3.5, /usr/local/include/python3.5m 디렉토리에 필요한 파일들을 설치한다. 실행 파일은 /usr/local/bin/python3.5이다. 아마 대부분 /usr/local/bin 디렉토리는 경로에 잡혀있으니 콘솔에서 곧바로 실행할 수 있다.

# python3.5 -V
Python 3.5.1

python3.5라고 입력하는 것은 번거로우니 심볼릭 링크를 만들어 두자.

# ln -s /usr/local/bin/python3.5 /usr/local/bin/python3
# python3 -V
Python 3.5.1

참고