Python 패키지 처리를위한 Pip vs Package Manager


20

파이썬 패키지는 많은 배포 저장소에 자주 호스팅됩니다. 자습서를 읽은 후 특히 "이 작업을 원하십니까?"라는 섹션을 읽은 후 pip 사용을 피하고 시스템 리포지토리를 사용하는 것을 선호했으며 리포지토리에없는 패키지를 설치해야하는 경우에만 pip를 사용합니다.

그러나 이것은 일관성없는 설치 방법이므로 pip 만 사용하는 것이 더 좋습니까? 두 곳에서 모두 사용할 수있는 패키지에 대해 시스템의 자체 저장소를 통해 pip를 사용하면 어떤 이점이 있습니까?

내가 포함하는 링크 상태

항상 표준 데비안 / NeuroDebian 패키지를 사용하면 패키지가 서로 호환되도록 신중하게 테스트됩니다. 데비안 패키지는 다른 라이브러리와의 종속성을 기록하므로 설치의 일부로 필요한 라이브러리를 항상 얻을 수 있습니다.

아치를 사용합니다. apt 이외의 다른 패키지 관리 시스템에서도 마찬가지입니까?

답변:


21

pip시스템 모듈이나 사용자 모듈로 시스템에 Python 모듈을 설치 하는 데 사용 하는 가장 큰 단점 은 배포판의 패키지 관리 시스템이 해당 모듈에 대해 알 수 없다는 것입니다. 즉, 패키지가 필요한 다른 패키지에는 사용되지 않으며 나중에 설치하거나 업그레이드 후에 해당 모듈 중 하나를 사용할 수 있습니다. 그런 다음 pip배포 관리 모듈 버전과 배포 관리 모듈 을 모두 사용 하여 문제를 일으킬 수 있습니다 ( 최근에 다른 인스턴스가 발생했습니다 ). 모 아니면도 제안되고 최대 귀하의 질문에 종료 그래서 : 당신이 경우 에만 사용pip 파이썬 모듈의 경우, 더 이상 파이썬 모듈을 사용하려는 배포판의 패키지 관리자를 사용할 수 없습니다 ...

링크 된 페이지에 제공된 일반적인 조언은 매우 좋습니다. 가능한 한 배포판 패키지를 사용 pip하고, 패키지화되지 않은 모듈 에만 사용 하고, 그렇지 않은 경우 사용자 설정에서 시스템이 아닌 넓은. 특히 모듈 개발에 가능한 한 가상 환경을 사용하십시오. 특히 Arch에서는 오래된 모듈로 인한 문제가 발생하지 않아야합니다. 문제가 될 수있는 배포 환경에서도 가상 환경은이를 쉽게 처리합니다.

배포판의 라이브러리 및 모듈 패키지는 배포판에 다른 패키지를 사용하기 위해 주로 패키지화된다는 점을 항상 고려해야합니다. 이러한 라이브러리와 모듈을 사용하여 개발하는 데 유용한 부작용이 있지만 이것이 주요 사용 사례는 아닙니다.


1
우리가이 이분법이나 모순에 갇혀 있다는 사실은 정말 불행한 일입니다. 아마도 파이썬과 공식 저장소에서이 문제를 해결해야 할 것입니다.
cat

pip실수 pip uninstall로 배포 관리 패키지를 사용하면 내가 사용하지 않을 위험 은 무엇 입니까?
Mehrdad 2016 년

@Mehrdad 대부분의 경우 pip사용자 (virtualenv와 함께)로 실행 되므로 시스템 설치 파일을 엉망으로 만들 권한이 없습니다.
marcelm

1
@ marcelm : 당신이 리눅스 컴퓨터이고 누군가가 당신에게 sudo pip아마도 사용하지 말라고 가르쳤다 고 생각합니다 (그렇더라도 모든 사람들 virtualenv이을 사용한다고 가정하면 너무 많이 가정하고 있습니다). 그것이 단순히 적용되지 않는 곳. 파이썬 패키지 설치에 대한 두 가지 옵션이 있습니다 : pacmanpip. 제거하기 위해 잘못된 것을 사용하면 문제가 발생하기 때문에 설치하는 데 사용되는 것을 명심해야합니다.
Mehrdad 2016 년

10

TL; DR

  • 프로젝트 (개발하는 pip)에 물건 (libs, frameworks, dev dev tool)을 위해 (+ virtualenv ) 사용
  • 응용 프로그램의 패키지 관리자를 사용 하면 (최종 사용자로) 사용을

개발 의존성

Python으로 소프트웨어를 개발하는 경우 pip런타임 종속성, 빌드 타임 종속성 또는 자동화 된 테스트 및 자동화 된 준수 검사 (리터, 스타일 검사기, 정적 유형 검사기)에 필요한 모든 프로젝트 종속성 에 사용하려고합니다. ...)

이에 대한 몇 가지 이유가 있습니다.

  • 이를 통해 virtualenv (직접 또는 virtualenvwrapper 또는 pipenv 또는 기타 수단을 통해)를 사용하여 서로 다른 프로젝트의 종속성을 서로 분리하고 "생산 중"(사용자로) 사용하는 Python 응용 프로그램을 이국적인 shenanigan (또는 심지어 비 호환성조차도) 개발에 계속 될 수 있습니다.
  • 이를 통해 requirements.txt(프로젝트가 애플리케이션 인 경우) 또는 setup.py(프로젝트가 라이브러리 또는 프레임 워크 인 경우) 파일 에서 프로젝트의 모든 종속성을 추적 할 수 있습니다 . 소스 코드와 함께 버전 관리 (예 : Git)로 확인할 수 있으므로 어떤 버전의 코드가 어떤 버전의 종속성에 의존하는지 항상 알 수 있습니다.
  • 위의 내용을 통해 다른 개발자가 동일한 Linux 배포판을 사용하지 않거나 동일한 운영 체제를 사용하지 않아도 프로젝트에서 공동 작업을 수행 할 수 있습니다 (사용 된 종속성이 Mac 및 Windows에서 사용 가능하거나 사용중인 모든 항목, 즉 사용중인 경우).
  • 운영 체제의 패키지 관리자가 자동으로 업데이트되어 코드가 손상되는 것을 원하지 않습니다. 종속성을 업데이트해야하지만, 의식적으로, 선택한 시간에 코드를 수정하거나 업데이트를 롤백 할 수 있도록 선택해야합니다. (리비전 제어 시스템에서 코드와 함께 전체 종속성 선언을 추적하는 것이 쉬운 방법입니다.)

직접 및 간접 종속성을 분리해야하는 경우 (또는 종속성의 허용 가능한 버전 범위와 사용 된 실제 버전을 구별하는 경우 "버전 고정"참조) pip-tools 및 / 또는 pipenv를 살펴보십시오. 또한 빌드 종속성과 테스트 종속성을 구별 할 수 있습니다. (빌드와 런타임 종속성의 구별은 아마도로 인코딩 될 수 있습니다 setup.py)

사용하는 응용 프로그램

정상적인 응용 프로그램으로 사용하고 그 물건의 경우 만 발생 파이썬으로 작성하기 위해 운영 체제의 패키지 관리자를 선호합니다. 패키지 관리자가 설치 한 다른 것들과 합리적으로 최신 상태를 유지하고 호환되도록합니다. 대부분의 Linux 배포는 맬웨어를 배포하지 않는다고 주장합니다.

배포판의 기본 패키지 저장소에 필요한 것이 없다면 추가 패키지 저장소 (예 : deb 기반 배포판의 런치 패드)를 확인하거나 pip어쨌든 사용할 수 있습니다 . 후자의 경우 --user시스템 전체가 아닌 사용자의 집에 설치하여 Python 설치를 중단 할 가능성을 줄이십시오. (일시적으로 또는 거의 필요하지 않은 것들에 대해서는 virtualenv를 사용할 수도 있습니다.)


8

패키지 관리자와 함께해야 할 또 다른 이유는 보안에 중요한 업데이트가 자동으로 적용되기 때문입니다. Equifax가 사용하는 Bean 패키지가 yum-cron-security를 ​​통해 자동으로 업데이트 되었다면 해킹이 발생하지 않았을 수 있습니다.

개인 개발 상자에서 Pip을 사용하고 제품을 사용합니다.


4
사용해야하는 것은 프로덕션 설정에 따라 다릅니다. Virtualenvs는 이유가 있습니다 :) 또한 배포판에 따라 패키지 관리자가 새 버전을 추가하는 속도가 느릴 수 있기 때문에 보안 업데이트가 실제로 pip를 고수하는 이유 일 수 있습니다.
Edward Minnix 2018 년

7

작성중인 코드에서 사용할 파이썬 패키지 설치에 대해 이야기하고 있다면 pip를 사용하십시오.

작업중인 각 프로젝트마다 가상 환경을 만든 다음 pip 만 사용하여 해당 프로젝트에 필요한 항목을 설치하십시오. 이렇게하면 사용하는 모든 라이브러리를 일관된 방식으로 설치하며, 패키지 관리자를 통해 설치 한 모든 것을 포함하고 방해하지 않습니다.

파이썬 코드를 배포하려는 경우 일반적으로 프로젝트에 setup.py또는 requirements.txt프로젝트를 추가 하면 pip가 자동으로 모든 종속성을 얻을 수 있습니다. 해당 프로젝트의 가상 환경을 쉽게 만들거나 다시 만들 수 있습니다.


1

개요

다루고있는 모듈에는 세 가지 일반적인 범주가 있습니다.

  1. OS 패키지 시스템을 가진 모든 사용자를 위해 설치된 지원 프로그램. (여기에는 Python으로 프로그래밍하는 사람들이 사용하는 도구와 라이브러리가 포함될 수도 있습니다. 아래를 참조하십시오.)이를 위해 OS 패키지를 사용할 수있는 곳에서 사용하고 pip필요한 경우 시스템 디렉토리에 설치합니다.
  2. 특정 사용자가 자신의 용도로만 설치 한 프로그램과 Python을 스크립팅 언어로 "매일"사용하는 특정 측면의 경우에도 해당 프로그램을 지원합니다. 이 동안 그녀는 사용 pip --user아마도 pyenv 또는 pythonz 및 이와 유사한 도구와 전술을.
  3. 특정 응용 프로그램의 개발 및 사용을 지원합니다. 이를 위해 당신은 virtualenv(또는 비슷한 도구)를 사용합니다.

여기의 각 레벨은 이전 레벨에서 지원을받을 수도 있습니다. 예를 들어 (2)의 사용자는 OS 패키지를 통해 설치된 Python 인터프리터에 의존 할 수 있습니다.

좀 더 자세히 설명하면 다음과 같습니다.

시스템 프로그램 및 패키지

"실행"하려는 Python으로 작성된 프로그램은 간단합니다. OS 설치 도구를 사용하여 필요한 것을 가져 오십시오. 이것은 비 파이썬 프로그램과 다르지 않습니다. 이것은 컴퓨터의 사용자가 의존하기 시작할 수있는 Python 도구 / 라이브러리 (예 : Python 인터프리터 자체)를 가져올 수 있습니다. 의존성을 이해하고 이상적으로는 의존성을 제공하지 않는 호스트에서 처리 할 수있는 대체 수단을 알고있는 한 문제가되지 않습니다.

이러한 의존성에 대한 일반적이고 간단한 예는로 ~/.local/bin/시작하는 개인 스크립트 중 일부입니다 #!/usr/bin/env python. RH / CentOS 7 및 대부분의 우분투 설치에서 (파이썬 2에서 실행되는 한) 제대로 작동합니다. 기본 데비안 설치 또는 Windows에는 없습니다. OS 패키지에 의존하는 방식이 많이있는 개인 환경을 싫어하는만큼 (여러 개의 다른 OS에서 작업하고 있음) 이와 같이 상당히 수용 가능한 것으로 보입니다. 시스템 Python이없고 얻을 수없는 희귀 호스트에 대한 백업 계획은 아래 설명과 같이 사용자 시스템과 함께하는 것입니다.

시스템 파이썬 인터프리터를 사용하는 사람들은 일반적으로 시스템에 의존합니다 pip3. 그것은 시스템 의존성에 대한 선을 그리는 곳입니다. virtualenv앞으로 나 자신을 다루는 모든 것. (예를 들어, 표준 활성화 스크립트 는 경로에 pip3있거나 pip경로 에 의존 하지만 virtualenv생성하는 가상 환경을 부트 스트랩하기 위해 자체 사본을 다운로드합니다 .

즉, 더 많은 개발 환경을 사용할 수있게 만드는 것이 합리적 일 수 있습니다. 시스템 버전을 사용하려는 복잡한 패키지 (예 : DBMS)에 대한 Python 인터페이스가있을 수 있으며 시스템이 사용자가 대화하는 데 사용할 특정 Python 라이브러리 코드를 선택하도록하는 것이 가장 좋습니다. 또는 Python 클래스의 기본 개발 환경으로 많은 호스트를 배포하고 표준 시스템 패키지를 사용하여 가장 쉽게 자동화 할 수 있습니다.

사용자 "매일"프로그램 및 패키지

가상 환경에 적합하지 않은 Python 라이브러리 또는 프로그램이있을 수 있습니다 (예 : virtualenvwrapper ). 가상 환경에 적합하지 않거나 명령 행에서 자주 사용하는 것들입니다. 비 파이썬 작업. 시스템 버전을 설치하는 기능이 있어도 최신 버전의 도구와 해당 종속성을 사용하려고하므로 자신이 직접 설치하는 것이 더 편할 수 있습니다.

pip --user파이썬 인터프리터 자체와 같은 특정 종속성은 그 이상을 요구하지만 일반적으로 사람들이 이것을 위해 사용할 것입니다. pyenvpythonz 는 개인 통역사 ( ~/.local/bin기본 통역사로 설치하든 그렇지 않든) 를 구축하는 데 유용하며 , 개발자 라이브러리를 사용할 수있는 경우 항상 소스에서 직접 "수동으로"구축 할 수 있습니다.

나는 virtualenvwrapper (내가 끊임없이 사용하기 때문에)와 아마도 최신 버전의 pip를 여기에 설치하려고합니다. 표준 라이브러리 외부 또는 Python 3에 의존하여 많은 호스트에서 사용되는 개인 스크립트에 대한 의존성을 피하려고합니다. (우리는 점점 더 많은 개인 스크립트를 파이썬으로 옮길 때 얼마나 오래 참을 수 있는지 알 수 있습니다.)

별도의 응용 프로그램 개발 및 런타임 환경

이것은 일반적인 virtualenv 일입니다. 개발을 위해서는 거의 항상 virtualenv를 사용하여 시스템 종속성을 사용하지 않거나 다른 Python 버전을 테스트하기 위해 둘 이상을 사용하지 않아야합니다.

이러한 가상 환경은 사용자 환경의 오염을 피하려는 많은 종속성이있는 응용 프로그램에도 적합합니다. 예를 들어 Jupyter 노트북 등 을 실행하기 위해 virtualenv를 설정합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.