Python 빌드하기
대부분의 Linux 배포판에서는 python 2.x 버전이 기본 설치 된다.
버전 2,3 간의 문법 차이가 제법 크고 현재 최신 버전인 3.7.0 에서 호환이 제대로 안되는 패키지들이 간혹 있어 직접 빌드하는 걸 개인적으로 선호하고, 멀티 노드 환경인 경우 이렇게 하는게 버전 관리하기도 좋은 것 같다.
준비사항
의존 시스템 라이브러리 설치
yum -y install gcc openssl-devel zlib-devel libffi-devel bzip2-devel sqlite-devel ncurses-devel gdbm-devel tk-devel xz-devel readline-devel
pip 으로 다른 패키지를 다운받거나 기존 소스코드 실행할 때 아래와 같은 메시지 발생하면 libffi-devel나 bzip2-devel 설치가 안 된 것
ModuleNotFoundError: No module named ‘_ctypes’
ModuleNotFoundError: No module named ‘_bz2’
openssl 설치
참고: https://oboki.net/workspace/system/linux/linux-httpd-%ec%84%a4%ec%b9%98/
python source 준비
https://www.python.org/downloads/source/
설치하기
configure
configure에 with-openssl 옵션이 있는 경우
--with-openssl
옵션을 지원하기 때문에 사용할 openssl 디렉토리를 옵션으로 명시하고 바로 Makefile 을 생성할 수 있다. 최신 버전에는 지원하지 않는 것 같음
./configure --prefix=/app/python/3.7.0 --with-openssl=/app/python/openssl --enable-shared
configure에 with-openssl 옵션이 없는 경우
Setup.dist
파일을 수정하여, ssl 모듈을 로드해주면 되는데, SSL=/usr/local/ssl
라인을 시스템에 ssl 이 설치된 경로로 변경해준다.
vi ./Modules/Setup.dist
# Socket module helper for socket(2)
#_socket socketmodule.c
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
수정이 완료되었으면 아래 명령으로 Makefile 을 생성한다.
./configure --prefix=/app/python/3.6.6 --enable-shared
build
make && make install