RHEL 계열에서 Python 3.11 을 소스로 빌드해 make altinstall 하는 스크립트를 쓰면서, RPM 설치와 무엇이 다른지와 이미 빌드한 디렉터리를 다른 서버로 복사해 써도 되는지를 정리한다.
yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel -y
tar -zxvf Python-3.11.15.tgz && cd Python-3.11.15
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
./configure --enable-shared
make
make altinstall
/bin/cp ./libpython3.11.so* /lib64/ && chmod 755 /lib64/libpython3.11.so*
chmod -R 755 /usr/local/lib/python3.11
python3.11 -V && pip3.11 -V && pip3.11 install --upgrade pip
make install 은 python3 링크를 덮어써 시스템 Python 을 망가뜨리므로 반드시 altinstall 을 쓴다. --enable-shared 로 빌드하면 libpython3.11.so 를 /lib64 에 복사하거나 LDFLAGS="-Wl,-rpath,<prefix>/lib" 로 rpath 를 박아야 실행된다.
| 항목 | 소스 빌드 | RPM 설치 |
|---|---|---|
| 설치 경로 | 보통 /usr/local 또는 지정 prefix |
배포판 표준 경로 |
| 의존성 | devel 패키지를 직접 설치 | yum/dnf 가 처리 |
| 버전 | 원하는 버전 자유 | 저장소가 제공하는 버전만 |
| 업데이트·삭제 | 수동, 추적 어려움 | yum update/remove |
| 패키지 DB | rpm -qa 에 없음 |
시스템이 인지 |
| 커스터마이징 | configure 옵션 자유 | 고정 |
운영 서버 여러 대에 같은 버전을 깔거나 보안 패치를 yum 으로 일괄 관리하려면 RPM(또는 사내 저장소)이 맞고, 저장소에 없는 버전이나 빌드 옵션이 필요할 때만 소스 빌드를 쓴다.
같은 배포판·버전대, 같은 아키텍처, 같은 prefix 면 대체로 동작하고 하나라도 어긋나면 깨진다.
ldd --version). 낮은 쪽으로 옮기면 GLIBC_2.xx not found.-march=native 나 --enable-optimizations 로 빌드했다면 구형 CPU 에서 illegal instruction 이 날 수 있다.libssl, libffi, libsqlite3, liblzma 등이 같은 soname 으로 있어야 한다. OpenSSL 1.1 → 3.x 처럼 메이저가 다르면 _ssl import 가 실패한다.pip 등 스크립트의 shebang 과 sysconfig 가 옛 경로를 가리킨다.ldd $(which python3.10)
ldd /opt/python3.10/lib/python3.10/lib-dynload/_ssl*.so
python3.10 -c "import ssl,sqlite3,lzma,ctypes;print(ssl.OPENSSL_VERSION)"
python3.10 -c "import sysconfig;print(sysconfig.get_config_var('prefix'))"
head -1 /opt/python3.10/bin/pip3
다시 빌드해도 된다면 그것이 가장 확실하다. RHEL 계열은 dnf groupinstall "Development Tools" 와 openssl-devel zlib-devel bzip2-devel readline-devel sqlite-devel ncurses-devel libffi-devel xz-devel tk-devel libuuid-devel gdbm-devel 을 먼저 깔고 ./configure --prefix=/opt/python3.10 --enable-optimizations --with-ensurepip=install --enable-shared LDFLAGS="-Wl,-rpath,/opt/python3.10/lib" 로 빌드한다. 재배치 가능한 독립 빌드가 필요하면 uv python install 3.10 이 가장 간편하다.