Python Unix 소스 다운로드 & 빌드 & 설치하기(ubuntu편)

python post logo Linux

Linux Ubuntu 배포판에서 Python 패키지를 사용하기 위해 Python Unix 소스를 다운로드해서 빌드&설치하는 방법을 소개합니다.

전제 조건

이 글은 “Windows 10 Home에서 ubuntu앱 설치 실행” 페이지를 참조하여 설치한 ubuntu 앱 화면에서 작업했습니다.

Python 빌드에 필요한 종속 파일 설치하기

소스를 다운로드해서 설치하기 위해서는 개발자 툴을 설치할 필요가 있습니다. 우선 다음 명령으로 OS에 설치된 패키지를 최신으로 업데이트 합니다.

$ sudo apt update
... 중간 생략 ...
Get:41 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 c-n-f Metadata [288 B]
Get:42 http://archive.ubuntu.com/ubuntu focal-backports/multiverse amd64 c-n-f Metadata [116 B]
Fetched 19.6 MB in 1min 7s (293 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
123 packages can be upgraded. Run 'apt list --upgradable' to see them.

다음 명령으로 개발자 툴을 설치합니다.

$ sudo apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev
... 중간 생략 ...
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 gcc-10-base amd64 10.3.0-1ubuntu1~20.04 [20.2 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libstdc++6 amd64 10.3.0-1ubuntu1~20.04 [501 kB]
Get:3 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libgcc-s1 amd64 10.3.0-1ubuntu1~20.04 [41.8 kB]
Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libssl1.1 amd64 1.1.1f-1ubuntu2.5 [1320 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libx11-6 amd64 2:1.6.9-2ubuntu1.2 [575 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 binutils-common amd64 2.34-6ubuntu1.1 [207 kB]
... 중간 생략 ...

Python Unix 소스 다운로드 & 압축 풀기

다운로드 버전과 다운로드 URL 리스트는 “python 다운로드 & 설치하기“를 참조하십시오.

$ wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz

$ tar xvf Python-3.9.6.tar.xz
... 중간 생략 ...
Python-3.9.6/Objects/picklebufobject.c
Python-3.9.6/Objects/odictobject.c
Python-3.9.6/Objects/genobject.c

빌드하기

다음 명령은 /usr/local/다음에 설치합니다.

$ cd Python-3.9.6
$ ./configure
$ make
$ sudo make install

기본이 아닌 디렉토리에 설치하는 경우 configure에 --prefix옵션을 지정합니다.

$ cd Python-3.9.6
$ ./configure --prefix=/home/user/local/python
$ make
$ make install

설치 결과 확인

다음과 같이 python 버전을 확인합니다.

$ python3.9 -V
Python 3.9.6
$ pip3.9 -V
pip 21.1.3 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
$ which python3.9
/usr/local/bin/python3.9
$ which pip3.9
/usr/local/bin/pip3.9

다음과 같은 명령으로 ubuntu OS 설치 시 /usr/bin/python3.8 버전이 존재했음을 확인할 수 있습니다.

$ ls -l /usr/local/bin/* | grep python
lrwxrwxrwx 1 root root        9 Aug 18 17:59 /usr/local/bin/python3 -> python3.9
lrwxrwxrwx 1 root root       16 Aug 18 17:59 /usr/local/bin/python3-config -> python3.9-config
-rwxr-xr-x 1 root root 22181496 Aug 18 17:54 /usr/local/bin/python3.9
-rwxr-xr-x 1 root root     3087 Aug 18 17:59 /usr/local/bin/python3.9-config
$ ls -l /usr/bin/* | grep python
lrwxrwxrwx 1 root   root          23 Jul 28  2020 /usr/bin/pdb3.8 -> ../lib/python3.8/pdb.py
lrwxrwxrwx 1 root   root          31 Mar 13  2020 /usr/bin/py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx 1 root   root           9 Mar 13  2020 /usr/bin/python3 -> python3.8
-rwxr-xr-x 1 root   root     5486352 Jul 28  2020 /usr/bin/python3.8
$ ls -l /usr/local/bin/* | grep pip
-rwxr-xr-x 1 root root      229 Aug 18 18:00 /usr/local/bin/pip3
-rwxr-xr-x 1 root root      229 Aug 18 18:00 /usr/local/bin/pip3.9

다음 명령을 실행시켜 python명령을 사용할 수 있도록 합니다.

$ sudo update-alternatives --install /usr/local/bin/python python /usr/local/bin/python3.9 1
update-alternatives: using /usr/local/bin/python3.9 to provide /usr/local/bin/python (python) in auto mode

다음과 같이 /etc/alternatives/python의 link가 작성되어 /usr/local/bin/python 명령으로 /usr/local/bin/python3.9 명령을 사용할 수 있습니다.

$ ls -l /usr/local/bin/python
lrwxrwxrwx 1 root root 24 Aug 18 18:55 /usr/local/bin/python -> /etc/alternatives/python
$ ls -la  /etc/alternatives/python
lrwxrwxrwx 1 root root 24 Aug 18 18:55 /etc/alternatives/python -> /usr/local/bin/python3.9

참고로 /usr/bin/python3.8 명령을 /usr/bin/python의 software link로 만들지라도 다음과 같이 $PATH의 경로에서 /usr/local/bin 경로가 /usr/bin 경로보다 우선이라면 경로 지정 없이 실행하는 python명령은 /usr/local/bin/python3.9 명령을 실행하게 됩니다.

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:

Hello World 출력 샘플

다음과 같이 print (“Hello World”) 내용으로 test.py 파일을 작성하여 python test.py 명령으로 실행합니다.

$ cat test.py
print ("Hello World")

$ python test.py
Hello World
제목과 URL을 복사했습니다