Logo

파이썬의 패키지 매니저 pip 사용법

pip(Package Installer for Python)는 파이썬에 기본적으로 내장되어 있는 패키지 매니저입니다. 이 명령줄 도구를 사용하면 Python Package Index에 다른 개발자들이 올려놓은 패키지를 쉽게 다운로드하고 설치할 수 있는데요.

이번 포스팅에서는 pip를 사용하여 패키지를 관리하는 기본적인 방법에 대해서 알아보겠습니다.

pip 설치 여부 확인

pip는 파이썬만 설치하면 기본적으로 딸려서 설치가 되는데요. 혹시 모르니 컴퓨터에 먼저 파이썬과 pip의 설치 여부를 확인하고 넘어가주세요.

$ python -V
Python 3.11.2
$ pip -V
pip 23.1 from /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pip (python 3.11)

패키지 설치

pip로 패키지를 새로운 설치할 때는 pip install 명령어를 사용합니다.

그럼 아무 패키지나 한번 설치해볼까요? 저는 requests라는 매우 유명한 패키지를 설치해보겠습니다.

$ pip install requests
Collecting requests
  Downloading requests-2.29.0-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.5/62.5 kB 3.2 MB/s eta 0:00:00
Requirement already satisfied: charset-normalizer<4,>=2 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (3.1.0)
Requirement already satisfied: idna<4,>=2.5 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (2.10)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (1.26.15)
Requirement already satisfied: certifi>=2017.4.17 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (2022.12.7)
Installing collected packages: requests
Successfully installed requests-2.29.0

만약에 특정 버전을 설치하고 싶다면 패키지명 뒤에 ==버전을 붙여주면 됩니다. 예를 들어, 일부로 requests 패키지의 이전 버전인 2.28.0을 설치해보겠습니다.

$ pip install requests==2.28.0
Collecting requests==2.28.0
  Downloading requests-2.28.0-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 2.8 MB/s eta 0:00:00
Collecting charset-normalizer~=2.0.0 (from requests==2.28.0)
  Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB)
Requirement already satisfied: idna<4,>=2.5 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests==2.28.0) (2.10)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests==2.28.0) (1.26.15)
Requirement already satisfied: certifi>=2017.4.17 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests==2.28.0) (2022.12.7)
Installing collected packages: charset-normalizer, requests
  Attempting uninstall: charset-normalizer
    Found existing installation: charset-normalizer 3.1.0
    Uninstalling charset-normalizer-3.1.0:
      Successfully uninstalled charset-normalizer-3.1.0
  Attempting uninstall: requests
    Found existing installation: requests 2.29.0
    Uninstalling requests-2.29.0:
      Successfully uninstalled requests-2.29.0
Successfully installed charset-normalizer-2.0.12 requests-2.28.0

설치된 패키지 확인

pip show 명령어를 사용하면 컴퓨터에 설치된 패키지의 상세 정보를 확인할 수 있습니다.

$ pip show requests
Name: requests
Version: 2.28.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages
Requires: certifi, charset-normalizer, idna, urllib3
Required-by: google-api-core, openai, requests-oauthlib

Location 항목을 통해서 실제로 패키지가 어느 경로에 설치되어 있는지 알 수 있습니다.

패키지 업데이트

이미 설치되어 있는 패키지를 업데이트하려면 pip install 명령어를 실행할 때 --upgrade-U 옵션을 주면 됩니다.

예를 들어, 위에서 2.28.0 버전으로 설치한 requests 패키지를 최신 버전으로 올려볼까요?

$ pip install -U requests
Requirement already satisfied: requests in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (2.28.0)
Collecting requests
  Using cached requests-2.29.0-py3-none-any.whl (62 kB)
Requirement already satisfied: charset-normalizer<4,>=2 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (2.0.12)
Requirement already satisfied: idna<4,>=2.5 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (2.10)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (1.26.15)
Requirement already satisfied: certifi>=2017.4.17 in /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages (from requests) (2022.12.7)
Installing collected packages: requests
  Attempting uninstall: requests
    Found existing installation: requests 2.28.0
    Uninstalling requests-2.28.0:
      Successfully uninstalled requests-2.28.0
Successfully installed requests-2.29.0

Python Package Index에는 수시로 패키지 새로운 버전이 올라오기 때문에 패키지를 설치하는 것 만큼 주기적으로 패키지를 업데이트해주는 것도 중요하겠습니다.

패키지 제거

pip로 설치된 패키지를 삭제하려면 pip uninstall 명령어를 사용합니다.

따라서 우리가 설치한 requests 패키지를 삭제하려면 다음과 같이 제거할 수 있습니다.

$ pip uninstall requests
Found existing installation: requests 2.29.0
Uninstalling requests-2.29.0:
  Would remove:
    /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages/requests-2.29.0.dist-info/*
    /Users/daleseo/.pyenv/versions/3.11.2/lib/python3.11/site-packages/requests/*
Proceed (Y/n)? y
  Successfully uninstalled requests-2.29.0

이제 다시 requests 패키지 상대로 pip show 명령어를 실행해보면 패키지를 더 이상 찾을 수 없다고 나오는 것을 볼 수 있습니다.

$ pip show requests
WARNING: Package(s) not found: requests

전체 패키지 목록 확인

본인 컴퓨터에 설치되어 있는 모든 패키지를 확인해보려면 pip list 명령어를 사용합니다.

$ pip list
Package            Version
------------------ ---------
certifi            2022.12.7
charset-normalizer 2.0.12
idna               3.4
pip                23.1.2
setuptools         65.5.0
urllib3            1.26.15

requirements.txt 활용

많은 파이썬 프로젝트에서 requirements.txt 파일에 해당 프로젝트에서 개발하기 위해서 설치가 필요한 모든 패키지의 목록을 저장해두는데요. 그러면 개발자들이 아주 쉽게 모든 패키지를 일괄적으로 설치할 수 있기 때문입니다.

우선 pip freeze 명령어를 사용해서 현재 컴퓨터에 설치되어 있는 전체 패키지 목록을 requirements.txt 파일에 저장할 수 있습니다.

$ pip freeze > requirements.txt

이제 requirements.txt 파일을 열어보면 다음과 같이 패키지명===버전 형태로 여러 패키지가 나열되어 있을 것입니다.

$ cat requirements.txt
certifi==2022.12.7
charset-normalizer==2.0.12
idna==3.4
urllib3==1.26.15

이제 어느 컴퓨터에서든 이 requirements.txt 파일만 있으면 pip install 명령어를 실행할 때 -r 옵션을 사용해서 모든 패키지를 일괄 설치할 수 있습니다.

$ pip install -r requirements.txt

마치면서

이상으로 pip를 사용하여 어떻게 파이썬 패키지를 관리하는지에 대해서 알아보았습니다.

참고로 하나의 컴퓨터에서 pip로 동일한 패키지의 다른 버전을 설치하는 경우 프로젝트 간에 의존성(dependency) 충돌이 발생할 수 있는데요. 이러한 문제를 해결하는 방법에 대해서는 별도 포스팅에서 다루고 있으니 참고해보시면 좋을 것 같습니다.