반응형
CentOS 7 과 Amazon Linux 2 와 같이 오래된 배포판에서는 Python 3.12 와 같이 최신 버전이 제공되지 않는다.
따라서 별도로 소스를 받아 컴파일하여 설치해야 사용할 수 있다.
사전 준비
Python 3.12 의 경우는 Openssl 1.1.1 설치가 꼭 필수이므로 아래 글을 참고하여 먼저 진행한다.
Openssl 1.1.1 설치
CentOS 7, Amazon Linux 2와 같이 오래된 배포본에서는 openssl 버전이 낮아 Python 3.12 등의 설치가 불가능하다.그래서 Python 3.12 이 필요하다면 Openssl 1.1.1 의 설치가 꼭 필요하며1.1.1 로 올리면 보다 안전한
enowy.tistory.com
Openssl 1.1.1 이 준비되면 필요한 Package를 설치한다.
sudo yum install -y wget make gcc perl pcre pcre-devel zlib zlib-devel libffi libffi-devel bzip2 bzip2-devel xz xz-devel readline readline-devel sqlite sqlite-devel tkinter gdbm gdbm-devel
Package 설치가 완료되면 source 를 다운로드 한다.
wget https://www.python.org/ftp/python/3.12.11/Python-3.12.11.tgz
필요하면 아래와 같이 확인한다.
# lib 확인
$ ls -al /lib64/libssl.so.1.1
lrwxrwxrwx. 1 root root 36 Jun 30 14:29 /lib64/libssl.so.1.1 -> /usr/local/openssl/lib/libssl.so.1.1
$ ls -al /lib64/libcrypto.so.1.1
lrwxrwxrwx. 1 root root 39 Jun 30 14:29 /lib64/libcrypto.so.1.1 -> /usr/local/openssl/lib/libcrypto.so.1.1
$ ls -al /usr/local/openssl/lib/libssl.so.1.1
-rwxr-xr-x. 1 root root 689576 Jun 30 14:20 /usr/local/openssl/lib/libssl.so.1.1
$ ls -al /usr/local/openssl/lib/libcrypto.so.1.1
-rwxr-xr-x. 1 root root 3398200 Jun 30 14:20 /usr/local/openssl/lib/libcrypto.so.1.1
# libffi 과 libffi-devel 패키지 확인
$ rpm -qa | grep libffi
libffi-3.0.13-19.el7.x86_64
libffi-devel-3.0.13-19.el7.x86_64
# bzip2 과 bzip2-devel 패키지 확인
$ rpm -qa | grep bzip2
bzip2-libs-1.0.6-13.el7.x86_64
bzip2-devel-1.0.6-13.el7.x86_64
# xz 과 xz-devel 패키지 확인
$ rpm -qa | grep xz
xz-libs-5.2.2-1.el7.x86_64
xz-devel-5.2.2-1.el7.x86_64
xz-5.2.2-1.el7.x86_64
# readline 과 readline-devel 패키지 확인
$ rpm -qa | grep readline
readline-6.2-11.el7.x86_64
readline-devel-6.2-11.el7.x86_64
# sqlite 과 sqlite-devel 패키지 확인
$ rpm -qa | grep sqlite
sqlite-3.7.17-8.el7_7.1.x86_64
sqlite-devel-3.7.17-8.el7_7.1.x86_64
# gdbm 과 gdb,-devel 패키지 확인
$ rpm -qa | grep sqlite
gdbm-1.13-6.amzn2.0.2.x86_64
gdbm-devel-1.13-6.amzn2.0.2.x86_64
# tkinter 패키지 확인
$ rpm -qa | grep tkinter
tkinter-2.7.18-1.amzn2.0.12.x86_64
# openssl 버전 확인
$ openssl version
OpenSSL 1.1.1w 11 Sep 2023
설치 진행
모든 준비가 끝나면 아래와 같이 설치를 진행한다.
# 다운로드한 소스 해제.
tar xvf Python-3.12.11
# 소스 디렉토리 이동.
cd ./Python-3.12.11
# 이전 빌드 흔적 삭제. (최초 설치 때는 필요 없음.)
make clean
make distclean
# configure
./configure --enable-optimizations --with-openssl=/usr/local/openssl
# 빌드 - 모든 작업이 완료되고 0 fail 이 출력되어야 한다.
make -j $(nproc)
# 설치
sudo make altinstall
이렇게 설치를 진행하고 맨 마지막에 Warning 이 뜬다.
Processing /tmp/tmpevus.jv3a/pip-25.0.1-py3-none-any.whl
Installing collected packages: pip
WARNING: The script pip3.12 is installed in '/usr/local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-25.0.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable.
It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv.
Use the --root-user-action option if you know what you are doing and want to suppress this warning.
이 내용은
- PATH 에 /usr/local/bin 을 추가하고
- pip 사용 시 가상환경(venv) 를 사용하라는
의미 이다.
첫번째는 아래와 같이 해결한다.
# 아래 내용을 터미널에서 입력하거나
export PATH="/usr/local/bin:$PATH"
# 이 설정을 영구적으로 적용하려면
# ~/.bashrc 또는 ~/.bash_profile에 위 줄을 추가하세요.
두번째는 아래와 같이 사용한다.
# root 권한으로 pip을 실행하면 시스템에 따라 권한 문제나 충돌이 발생할 수 있음
# 가상환경(venv)을 사용하라는 권고임.
# 실제로 패키지 설치/개발 시에는 아래처럼 가상환경을 만들어 사용할 것.
$ python3.12 -m venv myenv
$ source myenv/bin/activate
$ pip install <패키지명>
설치 점검
아래와 같이 정상 설치 여부를 확인한다.
# 버전 확인
$ python3.12 --version
# 버전이 출력되면 정상
# pip 버전 확인
$ pip3.12 --version
# 버전이 출력되면 정상
# 간단한 파이썬 코드 실행
python3.12 -c "print('Hello, Python 3.12!')"
# Hello, Python 3.12!가 출력되면 정상
# 주요 모듈 import 테스트
$ python3.12 -c "import ssl, bz2, lzma, sqlite3, readline; print('modules ok')"
# 에러 없이 'modules ok'가 출력되면 정상
# venv(가상환경) 생성 테스트
$ python3.12 -m venv testenv
$ source testenv/bin/activate
$ python --version # 가상환경에서 python 버전이 3.12.x로 나오면 정상
$ deactivate반응형
Comment