Python의 pip를 사용하여 프로젝트 관리 종속성 관리하기

2023. 12. 24. 17:37python/basic

  • 작업 환경에 pip 설정
  • 작업과 관련된 pip 일반적인 오류 수정
  • pip 패키지 설치 및 제거
  • 요구 사항 파일을 사용하여 프로젝트의 종속성을 관리

시작하기

pip는 Python용 패키지 관리자입니다. 즉, 표준 라이브러리의 일부로 배포되지 않는 라이브러리와 종속성을 설치하고 관리할 수 있는 도구라는 의미입니다. pip라는 이름은 2008년 Ian Bicking에 의해 소개되었습니다.
JavaScript는 패키지 관리를 위해 npm을 사용합니다. Ruby는 gem 및 .NET 플랫폼이 표준 패키지 관리자가 되었습니다.

시스템에서 pip 찾기

참고: Ubuntu와 같은 일부 Linux(Unix) 시스템에서는 pip가 python3-pip라는 별도의 패키지로 제공됩니다. sudo apt install python3-pip로 설치해야 합니다. 인터프리터와 함께 기본적으로 설치되지 않습니다.

모듈로 pip 실행하기

In [ ]:
!python3 -m pip

-m 스위치는 Python에게 모듈을 python3 인터프리터의 실행 파일로 실행하도록 지시합니다.

Python 가상 환경에서 pip 사용

가상 환경은 프로젝트에 대한 격리된 Python 인터프리터를 제공합니다. 이 환경 내에서 사용하는 모든 패키지는 시스템 인터프리터와 독립적입니다. 즉, 프로젝트의 종속성을 다른 프로젝트 및 시스템 전체와 별도로 유지할 수 있습니다.

가상 환경 내에서 사용pip하면 세 가지 주요 이점이 있습니다. 다음을 수행할 수 있습니다.

  1. 현재 프로젝트에 올바른 Python 버전을 사용하고 있는지 확인하세요
  2. pip 또는 pip3 실행 시 올바른 pip 인스턴스를 참조하고 있는지 확인하세요.
  3. 다른 프로젝트에 영향을 주지 않고 프로젝트에 특정 패키지 버전 사용

Python 3에는 가상 환경 생성을 위한 venv 모듈이 내장되어 있습니다. 이 모듈은 격리된 Python 설치로 가상 환경을 생성하는 데 도움이 됩니다. 가상 환경을 활성화한 후에는 이 환경에 패키지를 설치할 수 있습니다. 하나의 가상 환경에 설치하는 패키지는 시스템의 다른 모든 환경과 격리됩니다.

In [ ]:
!python3 -m venv venv
!source venv/bin/activate

오류 발생 시 pip 재설치

운영 체제에러 메시지

|윈도우|'pip' is not recognized as an internal or external command, operable program or batch file.| |리눅스|bash: pip: command not found| |맥 OS|zsh: command not found: pip|

In [ ]:
!echo $PATH

기본적으로 Python을 설치하거나 가상 환경을 생성한 후 pip 실행 파일이 포함된 디렉토리는 PATH에 있어야 합니다. 그러나 pip 누락은 일반적인 문제입니다.

  1. ensurepip 모듈
  2. get-pip.py 스크립트
In [ ]:
!python3 -m ensurepip --upgrade

pip이 아직 설치되지 않은 경우 이 명령을 사용하면 현재 Python 환경에 설치됩니다. 활성 가상 환경에 있는 경우 명령은 해당 환경에 pip를 설치합니다. 그렇지 않으면 시스템 전체에 pip 설치됩니다. --upgrade 옵션은 pip 버전이 ensurepip에 선언된 버전과 동일한지 확인합니다.

pip 설치 문제를 해결하는 또 다른 방법은 get-pip.py 스크립트를 사용하는 것입니다. get-pip.py 파일에는 pip의 전체 복사본이 인코딩된 ZIP 파일으로 포함되어 있습니다. PyPA 부트스트랩 페이지(https://bootstrap.pypa.io/)에서 직접 get-pip.py 다운로드할 수 있습니다.

In [ ]:
!python3 get-pip.py

pip 패키지 설치

Python 패키지 인덱스(PyPI) 사용

In [ ]:
!python3 -m pip install requests

단일 명령으로 여러 패키지를 설치할 수도 있습니다.

In [ ]:
!python3 -m pip install rptree codetiming

list 명령을 사용하여 환경에 설치된 패키지를 버전 번호와 함께 표시할 수 있습니다.

In [ ]:
!python3 -m pip list

특정 패키지에 대한 자세한 정보를 얻으려면 pip에서 show 명령을 사용하여 패키지의 메타데이터를 확인할 수 있습니다.

In [ ]:
!python3 -m pip show requests
In [ ]:
import requests
requests.__version__

사용자 정의 패키지 색인 사용

In [ ]:
!python3 -m pip install -i https://test.pypi.org/simple/ rptree

-i 옵션을 사용하면 pip에 기본 패키지 색인인 PyPI 대신 다른 패키지 색인을 보도록 지시할 수 있습니다.

대체 색인을 영구적으로 사용해야 하는 경우 pip 구성 파일 index-url 옵션을 설정할 수 있습니다. 이 파일의 이름은 pip.conf이며 다음 명령을 실행하여 해당 위치를 찾을 수 있습니다.

In [ ]:
!python3 -m pip config list -vv

GitHub 리포지토리에서 패키지 설치

In [ ]:
!python3 -m pip install git+https://github.com/realpython/rptree
In [ ]:
import rptree
rptree.__version__

간편한 개발을 위해 편집 가능 모드에서 패키지 설치

자신의 패키지를 작업할 때 편집 가능한 모드로 설치하는 것이 합리적일 수 있습니다. 이렇게 하면 다른 패키지에서와 마찬가지로 명령줄을 사용하면서 소스 코드 작업을 수행할 수 있습니다. 일반적인 작업 흐름은 먼저 저장소를 복제한 다음 pip을 사용하여 환경에 편집 가능한 패키지로 설치하는 것입니다.

In [ ]:
!git clone https://github.com/realpython/rptree
%cd rptree
!python3 -m venv venv
!source venv/bin/activate
!python3 -m pip install -e .

요구 사항 파일 사용

고정 요구 사항

Python 프로젝트를 다른 개발자와 공유할 때 귀하가 사용하고 있는 외부 패키지의 동일한 버전을 다른 개발자가 사용하기를 원할 수 있습니다. 특정 버전의 패키지에 귀하가 사용하는 새로운 기능이 포함되어 있거나 사용 중인 패키지 버전이 이전 버전과 호환되지 않을 수 있습니다.

이러한 외부 종속성을 요구사항이라고도 합니다. requirements.txt 또는 이와 유사한 파일에 요구 사항을 고정하는 Python 프로젝트를 자주 찾을 수 있습니다. 요구 사항 파일 형식을 사용하면 어떤 패키지와 버전을 설치해야 하는지 정확하게 지정할 수 있습니다.

pip help 실행은 설치된 패키지를 요구 사항 형식으로 출력하는 freeze 명령이 있음을 보여줍니다. 이 명령을 사용하면 출력을 파일로 리디렉션하여 요구 사항 파일을 생성할 수 있습니다.

In [ ]:
!python3 -m pip freeze > requirements.txt
#requirements.txt

certifi==x.y.z
charset-normalizer==x.y.z
idna==x.y.z
requests==x.y.z
urllib3==x.y.z

다른 시스템에서 환경을 복제하려는 경우 pip install를 실행하고 -r 스위치를 사용하여 요구 사항 파일을 지정할 수 있습니다.

In [ ]:
!python3 -m pip install -r requirements.txt

미세 조정 요구 사항

# requirements.txt

certifi>=x.y.z
charset-normalizer>=x.y.z
idna>=x.y.z
requests>=x.y.z
urllib3>=x.y.z

다음으로 스위치 또는 install --upgrade 혹은 -U명령을 실행하여 요구 사항 파일의 패키지를 업그레이드할 수 있습니다.

In [ ]:
!python3 -m pip install -U -r requirements.txt

생산 및 개발 종속성 분리

애플리케이션 개발 중에 설치하는 모든 패키지가 프로덕션 종속성이 되는 것은 아닙니다. 예를 들어, 애플리케이션을 테스트하고 싶을 것이므로 테스트 프레임워크가 필요합니다. 테스트에 널리 사용되는 프레임워크는 pytest입니다. 개발 환경에 설치하고 싶지만 프로덕션 종속성이 아니기 때문에 프로덕션 환경에서는 설치하고 싶지 않습니다.

두 번째 요구사항 파일인 requirements_dev.txt을 생성하여 개발 환경을 설정하기 위한 추가 도구를 나열합니다.

# requirements_dev.txt

pytest>=x.y.z

두 개의 요구 사항 파일이 있으면 pip을 사용하여 두 파일 requirements.txt 및 requirements_dev.txt을 모두 설치해야 합니다. 다행히 pip를 사용하면 요구 사항 파일 내에서 추가 매개변수를 지정할 수 있으므로 requirements_dev.txt 프로덕션에서 requirements.txt 요구 사항을 설치하도록 수정할 수도 있습니다.

# requirements_dev.txt

-r requirements.txt
pytest>=x.y.z

In [ ]:
!python3 -m pip install -r requirements_dev.txt

생산을 위한 Freezing 요건

단계명령설명
1 pytest 테스트를 실행하고 코드가 제대로 작동하는지 확인하세요.
2 pip install -U -r requirements.txt 요구사항을 requirements.txt 파일의 제약 조건과 일치하는 버전으로 업그레이드하세요.
3 pytest 테스트를 실행하고 코드에 오류를 발생시키는 종속성을 다운그레이드하는 것을 고려하세요.
4 pip freeze > requirements_lock.txt 프로젝트가 올바르게 작동하면 종속성을 requirements_lock.txt 파일로 고정합니다.

pip 패키지 제거

설치할 때 requests 다른 종속성도 설치해야 합니다 pip. 더 많은 패키지를 설치할수록 여러 패키지가 동일한 종속성에 의존할 가능성이 커집니다. 여기에서 pip 의 show 명령이 유용합니다.

패키지를 제거하기 전에 해당 패키지에 대해 show 명령을 실행해야 합니다.

In [ ]:
!python3 -m pip show requests
In [ ]:
!python3 -m pip uninstall certifi
In [ ]:
!python3 -m pip uninstall urllib3 -y

-y 스위치를 사용하면 이 패키지를 제거할지 묻는 확인 대화 상자를 표시하지 않습니다.

단일 호출로 제거하려는 모든 패키지를 지정할 수 있습니다.

In [ ]:
!python3 -m pip uninstall -y charset-normalizer idna requests
In [ ]:
!python3 -m pip uninstall -r requirements.txt -y

제거하려는 패키지의 종속성을 항상 확인하십시오. 모든 종속성을 제거하고 싶을 수도 있지만 다른 사람이 사용하는 패키지를 제거하면 작업 환경이 손상될 수 있습니다. 결과적으로 프로젝트가 더 이상 올바르게 작동하지 않을 수 있습니다.