2017. 11. 22. 22:19 삽질
리눅스에서 Python 2, Python 3 같이 사용하기
0. 개요
python 2는 리눅스에서 디폴트로 설치되어 있기도 하고 yum 등의 많은 프로그램에서 사용된다. 그래서 가끔 python 3 이상을 요구하는 프로그램을 사용할 때 매우 불편한 점이 있다. 리눅스의 특성상 여러 모로 불편한데다가 다시 python 2로 돌아올 필요가 있기 때문이다. 여기서는 파이썬 3를 설치한 후 간단한 스크립트를 이용해 자동으로 변경할 수 있는 팁을 설명한다. 사실 많은 곳에 올라와 있는 자료이다.
1. 리눅스에서 파이썬 3 설치
$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
$ tar xf Python-3.*
$ cd Python-3.*
$ ./configure
$ make
$ make install
2. 메커니즘
PATH에는 /usr/bin/ 디렉터리가 포함된다. 다른 많은 명령어들처럼 파이썬도 여기에 들어있다. 예제를 통해 보자면 다음과 같이 있다고 하자.
... - python
... 1 python2 -> python
... - python2.6
python이라는 바이너리와 python2.6이라는 바이너리가 존재한다. 그러므로 이 두 명령어를 사용해서 파이썬을 실행할 수 있다. (아마 이 두개는 날자다 크기를 보니 같은 것으로 보인다) 중요한 것은 python2이다. 이것은 심볼릭 링크로서 python을 가리킨다. 즉 python2라고 명령어를 입력하면 가리키고 있는 python을 실행한다. 이 특징을 이용할 것이다.
# mv /usr/bin/python /usr/bin/python_keep
먼저 원래 파이썬 파일을 python_keep이라는 이름으로 변경한다. 이것은 원본 파일을 백업하는 역할이다.
# ln -s /usr/bin/Python-3.6.1/python /usr/bin/python
이제 설치한 파이썬 3를 가리키는 심볼릭 링크를 생성하는데 이름은 python이다. 이것을 통해 이제부터 셸에서 python을 입력하면 파이썬 3가 실행될 것이다.
다시 파이썬 2로 복구해보자
# rm /usr/bin/python
아까 생성한 심볼릭 링크 파일을 삭제한다.
# mv /usr/bin/python_keep /usr/bin/python"
백업했던 원본 파일의 이름을 다시 python으로 변경한다. 이제부터는 셸에서 python을 입력하면 파이썬 2가 실행될 것이다.
3. 셸 스크립트
--------------------------------------------------------------------
#!/bin/bash
# If name is pyCh.sh, then use like
# "./pyCh.sh p2" or "./pyCh.sh p3"
# my path of python3 is "/usr/bin/Python-3.6.1/python"
this=$1
if [ "$this" = "p2" ]
then
cmd1="rm /usr/bin/python"
cmd2="mv /usr/bin/python_keep /usr/bin/python"
elif [ "$this" = "p3" ]
then
cmd1="mv /usr/bin/python /usr/bin/python_keep"
cmd2="ln -s /usr/bin/Python-3.6.1/python /usr/bin/python"
fi
cmd3="python --version"
$cmd1
$cmd2
$cmd3
--------------------------------------------------------------------
이것을 자동화한 스크립트로서 만약 스크립트 이름이 pyCh.sh이고 옵션이 각각 p2, p3라면 다음과 같이 사용할 수 있다.
# ./pyCh.sh p3
파이썬 3로 전환한다.
# ./pyCh.sh p2
파이썬 2로 전환한다.
간단한 스크립트이지만 리눅스에서 이것 저것 하다보면 은근히 사용할 일이 많은것 같다. 적어도 몇 년은 이렇게 사용해야 할 것 같다.
'삽질' 카테고리의 다른 글
dokuwiki 백업하기 (0) | 2017.12.22 |
---|