1.3 파이썬 패키지 설치하기

라이브러리와 패키지

집을 지을 때, 시멘트나 철근이 필요하다고 해서 집을 짓는 사람이 시멘트 제작이나 철광석 제련부터 할 수는 없다. 부품이나 재료는 이미 만들어진 것을 사서 쓰는 것이 효율적이다. 프로그램도 마찬가지어서 필요한 모든 부분을 한 사람이 만드는 경우는 거의 없으며 여러가지 프로그램에 공통적으로 사용되는 부분은 해당 분야의 전문가가 미리 만들어 놓은 프로그램을 가져다 사용하는 것이 현명한 선택이다. 이처럼 다른 프로그램 제작에 사용하기 위해 미리 만들어진 프로그램의 집합을 라이브러리(library)라고 한다. 파이썬에서는 라이브러리라는 용어 대신 패키지(package)라는 말을 주로 사용한다.

패키지 설치

일부 패키지는 파이썬을 설치할 때 함께 설치되는데 이러한 패키지를 표준 패키지(standard package)라고 한다. 그러나 대부분의 패키지는 파이썬을 설치한 후에 별도로 설치한다. 아나콘다 배포판을 설치하면 다양한 패키지들을 추가로 기본 설치해준다. 그러나 그 외에 추가로 패키지를 더 사용해야 할 때는 사용자가 수동으로 설치해야 한다.

C, C++, 자바 같은 언어는 새로운 라이브러리를 설치할 때 그 라이브러리를 제공하는 웹사이트를 일일이 방문하여 소스코드나 바이너리를 내려받아야 한다. 반면 파이썬은 모든 패키지를 한 서버에 등록해서 간단한 명령어만으로 패키지를 쉽게 내려받아 설치할 수 있다.

기본적으로 모든 파이썬 패키지는 PyPI 서버(https://pypi.org/) 라는 공식 패키지 서버에 등록된다. 하지만 아나콘다 배포판의 경우에는 PyPI가 아닌 독자적인 패키지 서버(https://anaconda.org/)를 운영하고 있으며 운영체제별로 미리 컴파일된 패키지를 제공하는 대신 PyPI보다는 제공하는 패키지의 수가 적다.

패키지 관리자

패키지를 설치하기 위한 프로그램을 패키지 관리자라고 한다. 파이썬에서는 pip라고 하는 패키지 관리자를 기본으로 제공하지만, 아나콘다 배포판에서는 conda라고 하는 아나콘다 전용 패키지 관리자도 제공한다. conda는 아나콘다 배포판이 설치될 때 자동으로 함께 설치된다.

pip를 사용하여 설치된 패키지를 확인하기

pip 패키지 관리자를 사용할 때는 pip list 명령으로 설치된 패키지 목록을 볼 수 있다.

$ pip list
Package                            Version
---------------------------------- ---------------------------
absl-py                            0.7.1
alabaster                          0.7.12
anaconda-clean                     1.0
anaconda-client                    1.7.2
anaconda-navigator                 1.9.7
anaconda-project                   0.8.2
... (이하 생략)

conda를 사용하여 설치된 패키지를 확인하기

conda 패키지 관리자를 사용할 때는 conda list 명령으로 설치된 패키지 목록을 볼 수 있다.

$ conda list
# packages in environment at /home/dockeruser/anaconda3:
#
# Name                    Version                   Build  Channel
_ipyw_jlab_nb_ext_conf    0.1.0                    py37_0
_py-xgboost-mutex         2.0                       cpu_0    conda-forge
absl-py                   0.7.1                    pypi_0    pypi
alabaster                 0.7.12                   py37_0
anaconda                  custom                   py37_0
... (이하 생략)

pip를 이용하여 패키지를 설치하기

pip 패키지 관리자를 이용하여 패키지를 설치하려면 콘솔 창에서 다음과 같이 입력한다.

pip install 패키지이름

예를 들어 quandl이라는 이름의 패키지를 설치하려면 pip install quandl 이라고 명령한다.

~$ pip install quandl
Collecting quandl
  Downloading https://files.pythonhosted.org/packages/12/64/6314547cb01fa75697ddba6d6d43a9f1d023c1730ffc6abf3db7a0c89222/Quandl-3.4.8-py2.py3-none-any.whl
Collecting more-itertools<=5.0.0 (from quandl)

...(중략)...

Installing collected packages: more-itertools, inflection, ndg-httpsclient, quandl
  Found existing installation: more-itertools 7.0.0
    Uninstalling more-itertools-7.0.0:
      Successfully uninstalled more-itertools-7.0.0
Successfully installed inflection-0.3.1 more-itertools-5.0.0 ndg-httpsclient-0.5.1 quandl-3.4.8
dockeruser@7f62df393a47:~$

대부분의 패키지는 내부적으로는 다른 패키지의 기능을 사용한다. 예를 들어 만약 패키지 A가 패키지 B의 기능을 사용하고 있다면 패키지 B가 설치되어 있을 때만 패키지 A를 사용할 수 있다. 이때 패키지 A가 패키지 B에 의존(depend)한다고 말한다. pip로 패키지를 설치하면 그 패키지가 의존하는 다른 패키지도 자동으로 설치한다. 위에서 quandl 패키지를 설치하였더니 more-itertools, ndg-httpsclient를 같이 설치한 것을 볼 수 있다.

conda를 이용하여 패키지를 설치하기

아나콘다 배포판에서 제공하는 conda 패키지 관리자는 의존성 관리 성능이 pip보다 뛰어나다. 설치하거나 제거할 패키지간의 의존성을 파악하고 만약 설치하고자 하는 패키지가 의존하고 있는 다른 패키지가 설치되어 있지 않거나 버전이 맞지 않으면 필요한 패키지를 설치해 주는 것 이외에도 기존의 패키지를 자동으로 업그레이드하거나 다운그레이드해 준다.

conda를 이용하여 패키지를 설치하는 명령어는 다음과 같다.

conda install 패키지이름

예를 들어 flake8이라는 이름의 패키지를 설치하려면 다음과 같이 conda install flake8이라고 명령한다.

중간에 Proceed ([y]/n)?라고 진행여부를 물어보면 y 키를 누르면 된다.

$ conda install flake8
Collecting package metadata: done
Solving environment: |

## Package Plan ##

  environment location: /home/dockeruser/anaconda3

  added / updated specs:
    - flake8

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    conda-4.6.14               |           py37_0         2.1 MB
    flake8-3.7.7               |           py37_0         131 KB
    ------------------------------------------------------------
                                           Total:         2.2 MB

The following NEW packages will be INSTALLED:

  flake8             pkgs/main/linux-64::flake8-3.7.7-py37_0

The following packages will be SUPERSEDED by a higher-priority channel:

  ca-certificates    conda-forge::ca-certificates-2019.3.9~ --> pkgs/main::ca-certificates-2019.1.23-0
  conda                                         conda-forge --> pkgs/main
  openssl            conda-forge::openssl-1.1.1b-h14c3975_1 --> pkgs/main::openssl-1.1.1b-h7b6447c_1

Proceed ([y]/n)?

Downloading and Extracting Packages
flake8-3.7.7         | 131 KB    | ####################################################### | 100%
conda-4.6.14         | 2.1 MB    | ####################################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

conda 패키지 관리자가 flake8 설치에 필요한 다른 패키지까지도 자동으로 설치하거나 업그레이드 해 주는 것을 볼 수 있다. 패키지를 설치할 때는 되도록 conda 패키지 관리자를 사용하고 anaconda 서버에 해당 패키지가 없을 때문 pip 패키지 관리자를 사용하기를 권장한다.