리눅스에서 Python 버전 변경 및 yum 에러 해결


이번 포스팅에서는 리눅스의 Python 버전을 변경하는 법에 대해 포스팅해보려고 한다. 리눅스를 깔게 되면 보통 Python 2.7이 깔려있어 python 명령을 실행하게 되면 Python2.7이 실행된다. 하지만 필자는 Python3 이상이 필요해서 python 명령을 실행했을 때 Python3.x가 실행되기를 원해서 Python 버전을 변경해보기로 했다. 리눅스 환경은 CentOS 7이다.

Python 버전을 확인해보면 역시나 Python 2.7.5로 되어 있다. Python3를 설치하기 전에 먼저 업데이트를 해준다.

$ yum update -y

Python3을 설치하기 위해 먼저 IUS Community Project의 repository를 yum의 repository에 추가해준다.

$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm

추가했으면 yum의 repository에 Python3.6(필자가 Python3.6을 설치할 것이기 때문 -> Python3.5를 설치할거면 yum search Python35라고 하면 된다)이 잘 들어가있는지 확인한다.

$ yum search Python36

이 부분은 IUS Community Project의 repository를 yum의 repository에 추가가 잘 됐는지 확인하는 과정이다. 잘 설치가 됐다면 사실 안해도 되는데 yum의 repository에 어떤 이유로 추가가 안됐을 수도 있기 때문에 확인차 한 번 한다는 개념으로 생각하면 될 것 같다. 추가가 안된 경우 yum search를 하면 이런 화면이 나온다.

이 상태에서 Python3.6을 설치해보면

$ yum install -y python36u python36u-libs python36u-devel python36u-pip

이렇게 설치가 되지 않는다.


다시 돌아와서 yum search로 추가가 된 것을 확인했으면 이제 Python3.6을 설치해주면 된다.

$ yum install -y python36u python36u-libs python36u-devel python36u-pip

다 설치됐다면 버전을 확인해보자.

Python3.6 -V으로 버전을 확인해보면 Python3.6이 잘 설치됐음을 확인할 수 있다. 그런데, 리눅스에서는 아직 Python2.7.5로 되어 있다. 이를 Python3.6으로 바꿔보도록 하자. 일단 Python3.6이 어딨는지 확인해보면

$ which python3.6

Python3.6이 설치된 경로가 나온다. which 명령어가 없으면 yum install which로 설치해주면 되고 설치된 경로로 보아 /usr/bin/에 Python 파일들이 있을 것이라는 걸 알 수 있다. 이걸 왜 해주냐면 /usr/local/bin/에 있는 경우도 있고 /bin/에 있기도 하고 그렇다. 즉, 각 환경에 따라 다르기 때문에 자기의 환경에는 어디에 설치되어있는지 확인한 후 설정을 해주려는 것이다.

$ ls -l /usr/bin/python*

여기를 보게 되면 왜 python -V를 입력했을 때 Python 2.7.5가 나오는지를 알 수 있다. python -V를 입력하게 되면 /usr/bin/python에서 정보를 불러오는데 /usr/bin/python -> /usr/bin/python2 -> /usr/bin/python2.7이어서 python2.7을 불러오기 때문이다. 즉, Python 버전을 3으로 바꾸려면 /usr/bin/python을 /usr/bin/python3.6으로 심볼릭링크를 걸어주면 된다. /usr/bin/python -> /usr/bin/python3.6으로 하면 무슨 일이 일어나는지 보자.

$ unlink /usr/bin/python

$ ln -s /usr/bin/python3.6 /usr/bin/python

심볼릭링크를 바로 python3.6에 연결해줬고 python -V로 확인해봐도 Python3.6.7이 나온다. 전혀 문제가 없어보이지만 그렇지가 않다. 이러면 yum에 문제가 생기게 된다.

이렇게 yum 명령어가 먹히지 않는다. 그 이유는 yum 명령어가 Python2.x로 작성되어 있기 때문이다. 따라서, 다시 Python2.x와 연결시켜주던지($ unlink /usr/bin/python 한 후 $ ln -s python2(또는 /usr/bin/python2) /usr/bin/python 명령어를 입력해주면 된다) 또는 다음과 같이 해결할 수 있다.

$ vim /usr/bin/yum

파란색 글씨라 잘 안 보이겠지만 yum 파일의 맨 위를 보면 #!/usr/bin/python으로 되어 있는데 이를 #!/usr/bin/python2.7로 수정해주면 된다.

$ yum install net-tools -y

yum install net-tools -y 말고 다른 것을 설치해도 상관없다. 필자는 그냥 yum으로 net-tools를 설치하고 싶어서 한 것일 뿐 yum이 정상작동하는지 못하는지에만 초점을 두면 된다. 보면 아까처럼 yum 명령어가 막히지는 않는데 성공하지는 못했다. 패키지를 다운받는 과정에서 문제가 발생한 것이다. 이 부분도 해결해줘야 한다.

$ vim /usr/libexec/urlgrabber-ext-down

아까 /usr/bin/yum에서 했던 것과 동일하다. 역시 파란색 글씨라 잘 안 보이겠지만 /usr/libexec/urlgrabber-ext-down 파일의 맨 위를 보면 #!/usr/bin/python으로 되어 있는데 이를 #!/usr/bin/python2.7로 수정해주면 된다. 이제 다시 yum을 실행해보자.

$ yum install net-tools -y

드디어 성공했다. 이제는 패키지도 잘 다운받아진다.

지금까지 Python 버전 변경 및 그에 대한 yum 에러까지 해결해봤는데 사실 이는 별로 좋은 게 아니라고 한다. 왜냐면 애초에 yum을 포함한 이런 시스템들이 python2.x로 작성돼있어서 현재는 에러가 딱히 나지 않았지만 분명 다른 내장패키지들이라던지 이런 부분에서 에러가 날 수 있기 때문이다. 그래서, 불편해도 symlink를 변경해서 사용하기보다는 python은 python으로 python3.x는 python3.x라는 명령어로 사용하기를 권고한다고 한다.


P.S : /usr/bin/python -> /usr/bin/python3.6으로 하지 않았으면 초기 상태는 /usr/bin/python -> /usr/bin/python2이므로 python 명령을 실행하면 Python2.x가 실행된다. 즉, Python3.x 모듈을 쓰고 싶으면 python3.x test.py 이런식으로 써야하는데(/usr/bin/python3.6에서 모듈을 불러와야 Python3.6을 쓸 수 있기 때문) 3.x라고 매번 쓰기가 좀 귀찮을 수 있다. 이럴 때는 /usr/bin/python3 -> /usr/bin/python3.6으로 해주면 된다.

$ ln -s /usr/bin/python3.6 /usr/bin/python3

이러면 python3 test.py로 쓰더라도 Python3.6 모듈을 불러오게 되어 Python3.6을 쓸 수 있다.



참고 사이트 :


이전글: Pod에 문제가 발생한 경우 다음글: ssh 서버 설치 및 root 계정 접속 허용하기