[Linux] 레드햇 dnf 이용 python3.9 설치
RHEL8부터 도입된 DNF 모듈 기능을 활용해 Python 3.9 버전을 설치하고, 시스템 전역에서 사용할 수 있도록 설정하는 방법을 설명합니다.
DNF 모듈 기능 개요
RHEL7에서 RHEL8으로 넘어오면서 dnf
에는 module
이라는 기능이 새롭게 추가되었습니다. 이 기능을 통해 동일한 OS 버전 내에서도 여러 소프트웨어의 다양한 버전을 선택적으로 설치하고 관리할 수 있게 되었습니다. 이번 글에서는 이 기능을 활용하여 Python 3.9 버전을 설치하고 활성화하는 방법을 설명합니다.
환경
대상 OS: Red Hat Enterprise Linux 8 이상
-
사전 조건: 시스템에 레포지토리가 설정되어 있어야 하며, 구성 방법은 LOCAL REPO를 참조하시기 바랍니다.
Python3.9 설치
현재 시스템에 활성화되어 있는 Python 모듈을 먼저 확인합니다. 다음 명령어를 실행하면 Python 2.7부터 3.9까지의 모듈 목록을 확인할 수 있으며, 현재 활성화된 버전은 [e]
로 표시됩니다.
# dnf module list | grep ^python python27 2.7 [d] common [d] Python programming language, version 2.7 python36 3.6 [d][e] build, common [d] Python programming language, version 3.6 python38 3.8 [d] build, common [d] Python programming language, version 3.8 python39 3.9 [d] build, common [d] Python programming language, version 3.9
# dnf module install python39 Last metadata expiration check: 18:40:30 ago on Sun 01 Oct 2023 06:12:34 PM KST. Dependencies resolved. ================================================================================================== Package Architecture Version Repository Size ================================================================================================== Installing group/module packages: python39 x86_64 3.9.2-1.module_el8.4.0+720+bfbc1bcb local-APP 32 k Installing dependencies: python39-libs x86_64 3.9.2-1.module_el8.4.0+720+bfbc1bcb local-APP 8.1 M python39-pip-wheel noarch 20.2.4-3.module_el8.4.0+680+7b309a77 local-APP 1.3 M python39-setuptools-wheel noarch 50.3.2-3.module_el8.4.0+680+7b309a77 local-APP 497 k Installing weak dependencies: python39-pip noarch 20.2.4-3.module_el8.4.0+680+7b309a77 local-APP 2.0 M python39-setuptools noarch 50.3.2-3.module_el8.4.0+680+7b309a77 local-APP 871 k Installing module profiles: python39/common Transaction Summary ================================================================================================== Install 6 Packages Total download size: 13 M Installed size: 45 M Is this ok [y/N]: y ... Installed: python39-3.9.2-1.module_el8.4.0+720+bfbc1bcb.x86_64 python39-libs-3.9.2-1.module_el8.4.0+720+bfbc1bcb.x86_64 python39-pip-20.2.4-3.module_el8.4.0+680+7b309a77.noarch python39-pip-wheel-20.2.4-3.module_el8.4.0+680+7b309a77.noarch python39-setuptools-50.3.2-3.module_el8.4.0+680+7b309a77.noarch python39-setuptools-wheel-50.3.2-3.module_el8.4.0+680+7b309a77.noarch Complete!
python3.9 --version
명령어로 정상 설치 여부를 확인할 수 있습니다.# python3.9 --version Python 3.9.2 # dnf module list | grep ^python python27 2.7 [d] common [d] Python programming language, version 2.7 python36 3.6 [d][e] build, common [d] Python programming language, version 3.6 python38 3.8 [d] build, common [d] Python programming language, version 3.8 python39 3.9 [d][e] build, common [d] [i] Python programming language, version 3.9
시스템 전역 명령어 등록
python3.9 설치 후 명령어 위치 분석
Python 3.9를 설치한 후 python3.9
명령어로 호출할 수 있지만, 일반적으로 많은 프로그램은 python3
명령어를 사용합니다. 시스템 전역적으로 python3
이 Python 3.9를 가리키도록 설정을 변경해야 합니다.
## python3 명령어 버전 정보 확인 # python3 --version Python 3.6.8 ## python3.9 명령어 버전 정보 확인 # python3.9 --version Python 3.9.2
위와 같이 python3을 실행하면 기본적으로 설치된 python3.6을 호출합니다. 3.9버전 사용을 위해서는 python3.9라는 새로 생성된 명령어를 이용해야 합니다.
시스템 전역적으로 python3을 사용하게 되면 python3.9를 호출하도록 변경하기 위해 명령어 동작 원리를 보겠습니다. 먼저 python3 명령어를 살펴보면 /etc/alternatives/python3에 심볼릭 링크되어 있는 링크 파일인 부분을 확인할 수 있습니다.
# which python3 /usr/bin/python3 # ll /usr/bin/python3 lrwxrwxrwx. 1 root root 25 Oct 22 2022 /usr/bin/python3 -> /etc/alternatives/python3
그리고 다시 /etc/alternatives/python3 파일을 자세히 살펴보면 /usr/bin/python3.6에 링크된 링크 파일인 부분이 확인됩니다.
# ll /etc/alternatives/python3 lrwxrwxrwx. 1 root root 18 Oct 2 19:12 /etc/alternatives/python3 -> /usr/bin/python3.6
요약해 보면 우리가 호출한 python3 명령어는 아래와 같은 형태로 링크되어 있습니다.
/usr/bin/python3 -> /etc/alternatives/python3 -> /usr/bin/python3.6
/usr/bin/python3은 실제로는 /usr/bin/python3.6을 가리키고 있습니다. 이렇게 복잡하게 설정되어 있는 이유는 alternatives라는 기능을 이용해서 명령어를 관리하고 있기 때문입니다. 심볼릭 링크를 잘 아시는 분은 여기서 /usr/bin/python3 링크 파일을 /usr/bin/python3.9로 가리키면 쉽게 해결된다는 부분을 눈치채셨을 겁니다. 그렇게도 설정이 가능하지만 alternatives라는 기능을 이용해서 변경하는 방법을 보도록 하겠습니다.
alternatives가 관리하는 명령어 확인
alternatives --list
명령어를 사용하면 시스템에서 alternatives로 관리되는 항목들을 확인할 수 있습니다. 이 중 python3
항목이 /usr/bin/python3.6
을 가리키고 있는 것도 확인할 수 있습니다.
[root@node1 ~]# alternatives --list libnssckbi.so.x86_64 auto /usr/lib64/pkcs11/p11-kit-trust.so python manual /usr/libexec/no-python ifup auto /usr/libexec/nm-ifup ld auto /usr/bin/ld.bfd python3 manual /usr/bin/python3.6 print auto /usr/bin/lpr.cups cifs-idmap-plugin auto /usr/lib64/cifs-utils/cifs_idmap_sss.so nmap auto /usr/bin/ncat xinputrc auto /etc/X11/xinit/xinput.d/ibus.conf mkisofs auto /usr/bin/genisoimage libwbclient.so.0.15-64 auto /usr/lib64/samba/wbclient/libwbclient.so.0.15 java auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64/jre/bin/java jre_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64/jre jre_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64/jre jre_1.8.0_openjdk auto /usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64 javac auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64/bin/javac java_sdk_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64 java_sdk_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64 java_sdk_1.8.0_openjdk auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-4.el8.x86_64 mta auto /usr/sbin/sendmail.postfix
alternatives를 이용해 python3 명령어가 가르키는 파일 변경
이제 alternatives --config python3
명령어를 사용하여 python3
이 가리키는 경로를 Python 3.9로 변경합니다.
# alternatives --config python3 There are 2 programs which provide 'python3'. Selection Command ----------------------------------------------- *+ 1 /usr/bin/python3.6 2 /usr/bin/python3.9 Enter to keep the current selection[+], or type selection number: 2
2번을 선택하면 python3
명령어는 이제 Python 3.9를 가리키게 됩니다.
“alternatives --config python3” 명령을 다시 실행해서 정보를 확인해 보면 2번 앞에 “+”기호가 붙은 걸 볼 수 있습니다. 여기서 변경 없이 저장하려면 엔터 버튼 눌러서 종료하시면 됩니다.
# alternatives --config python3 There are 2 programs which provide 'python3'. Selection Command ----------------------------------------------- * 1 /usr/bin/python3.6 + 2 /usr/bin/python3.9 Enter to keep the current selection[+], or type selection number:
변경 결과 확인
이제 python3
명령어가 변경된 경로를 제대로 반영하는지 확인합니다. --version
옵션을 이용하면 현재 python3
명령어가 어떤 버전을 실행하고 있는지 알 수 있습니다.
# python3 --version Python 3.9.2
python3
명령어가 이제 Python 3.9 버전을 가리키고 있다는 것을 확인할 수 있습니다.마치며
레드햇 레포지토리를 통해 제공되는 Python 3.9 버전을 설치하고, 시스템 기본 명령어인 python3
가 해당 버전을 가리키도록 변경하는 방법을 살펴봤습니다. 이를 통해 특정 버전의 파이썬을 요구하는 환경에서 유연하게 대처할 수 있습니다.
또한, alternatives
명령은 Python 외에도 Java 같은 다른 패키지에서 종종 사용되며, 명령어 충돌이나 경로 문제 발생 시 유용하게 활용할 수 있는 기능입니다. 시스템 설정의 안정성과 일관성을 유지하기 위해 꼭 알고 있어야 할 도구입니다.
참고
https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/assembly_installing-and-using-python_configuring-basic-system-settings https://www.server-world.info/en/note?os=CentOS_Stream_8&p=python&f=5
댓글
댓글 쓰기