본문 바로가기

리눅스

CentOS 7에서 Python 3 버전을 소스 코드로 직접 컴파일하여 설치하는 방법

반응형

CentOS 7에서 Python 3 버전을 소스 코드로 직접 컴파일하여 설치하는 방법

CentOS 7은 기본적으로 Python 2.7이 설치되어 있습니다.

하지만 최신 애플리케이션 개발 환경이나 자동화 도구 사용을 위해 Python 3 환경이 필요한 경우가 있습니다.

테스트 환경

운영체제 정보

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

OpenSSL 버전 정보

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

Python 정보

$ which python
/bin/python

$ python --version
Python 2.7.5
주의
CentOS 7 시스템 명령 중 일부는 Python 2.7에 의존하고 있기 때문에 기존 /usr/bin/python을 변경하지 않는 것이 안전합니다.

1. Python 빌드에 필요한 패키지 설치

Python을 소스 컴파일하기 위해 필요한 개발 라이브러리를 설치합니다.

sudo yum install -y zlib-devel
더보기

---

개발 라이브러리 설치

sudo yum install -y \
  gcc \
  make \
  wget \
  openssl-devel \
  bzip2-devel \
  libffi-devel \
  zlib-devel

설치 후 버전 확인

gcc --version

---

OpenSSL 설치

Python 3.9는 SSL 모듈 빌드에 OpenSSL 1.1.1 이상을 권장합니다.
CentOS 7 기본 openssl은 1.0.2라서 pip가 최신 PyPI(TLS 1.2+ 필수)에 접속 못 할 수 있습니다.
cd /usr/local/src
sudo wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
sudo tar xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
sudo ./config --prefix=/usr/local/openssl11 --openssldir=/usr/local/openssl11 shared zlib
sudo make -j$(nproc)
sudo make install

ldconfig 등록

echo "/usr/local/openssl11/lib" | sudo tee /etc/ld.so.conf.d/openssl11.conf
sudo ldconfig

OpenSSL 버전 확인

/usr/local/openssl11/bin/openssl version
OpenSSL 1.1.1w  11 Sep 2023

2. Python 소스 다운로드

Python 공식 사이트에서 원하는 버전의 소스를 다운로드합니다.

cd /usr/local/src
sudo wget https://www.python.org/ftp/python/3.9.13/Python-3.9.13.tgz
sudo tar xzf Python-3.9.13.tgz
cd Python-3.9.13

3. 기존 빌드 설정 초기화(빌드 실패 후 초기화)

이전에 빌드한 기록이 있다면 설정 파일과 생성된 결과물을 제거합니다.

sudo make clean
sudo rm -rf build

4. Python 빌드 환경 설정(OpenSSL 1.1.1 빌드했다면 경로 지정)

설치 경로를 /usr/local/python3으로 지정합니다.

sudo ./configure \
  --with-openssl=/usr/local/openssl11 \
  --prefix=/usr/local/python3

옵션 설명

  • --prefix : Python 설치 경로 지정
  • --enable-optimizations : 성능 최적화 빌드 활성화
728x90

5. Python 컴파일 및 설치

컴파일

  • CPU 코어 수만큼 병렬 빌드하여 설치 시간을 줄입니다.
sudo make -j$(nproc)

설치

  • make install 대신 make altinstall을 사용하는 이유는 기존 시스템 Python 명령을 덮어쓰지 않기 위해서입니다.
반드시 make altinstall 사용 (make install 아님).
install을 쓰면 시스템 기본 python3, pip3를 덮어써서 yum 등 시스템 도구가 깨질 수 있습니다.
altinstall은 python3.9라는 별도 이름으로 설치되어 안전합니다.
sudo make altinstall
...
Installing collected packages: setuptools, pip
  WARNING: The script pip3.9 is installed in '/usr/local/python3/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-22.0.4 setuptools-58.1.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager.
It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

설치가 완료되면 다음 위치에 Python이 생성됩니다.

/usr/local/python3/bin/python3.9

설치 확인

/usr/local/python3/bin/python3.9 --version
Python 3.9.13

6. Python3 명령어 등록

편리하게 python3 명령으로 실행할 수 있도록 심볼릭 링크를 생성합니다.

 

python3 명령어로 실행 가능하게 설정

sudo ln -s /usr/local/python3/bin/python3.9 /usr/local/bin/python3

pip3 명령어로 바로 설치 가능하게 설정

sudo ln -s /usr/local/python3/bin/pip3.9 /usr/local/bin/pip3

SSL 동작 확인

python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.1.1w  11 Sep 2023

PIP 동작 확인

python3 -m ensurepip
python3 -m pip install --upgrade pip

7. 설치 확인

Python3 버전을 확인합니다.

which python3
/usr/local/bin/python3

python3 버전 확인

python3 --version
Python 3.9.13

pip 설치 확인

pip3 --version
pip 22.0.4 from /usr/local/python3/lib/python3.9/site-packages/pip (python 3.9)

8. 기존 Python 확인

기존 시스템 Python은 그대로 유지됩니다.

python --version
Python 2.7.5

 

CentOS 7 환경에서는 시스템 Python 2.7을 유지하면서 별도의 Python 3 환경을 구성하는 방식이 안정적입니다.

make altinstall 방식을 사용하면 OS 기본 Python 환경을 보호하면서 최신 Python 버전을 독립적으로 사용할 수 있습니다.

 

참고URL

- Python Downloads : Python Source Releases

- OpenSSL Old 1.1.1 Downloads : https://openssl-library.org/source/old/1.1.1/

 

728x90
반응형