apt-get 설치 대 pip 설치


103

파이썬 패키지를 다운로드 할 때 위의 명령을 사용해야하는 경우에 대해 약간 혼란 스럽습니다. 이 질문에 대한 답변에 따라 pyudev라는 패키지를 다운로드하려고했습니다 . 나는이 명령을 실행했다 :

sudo pip install python-pyudev

그러나 다음과 같은 메시지를 받았습니다 :

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

그러나 다음은 잘 작동했습니다.

sudo apt-get install python-pyudev

언제 apt-get패키지를 설치하는 데 사용되는 가정하고 언제 python-pip사용?


2
pip파이썬 패키지 만 apt-get설치하는 데 사용 되지만 모든 패키지를 설치하는 데 사용됩니다.
Avinash Raj

3
pip가 python-pyudev를 설치할 수없는 이유는 무엇입니까?
Vineet Kaushik

답변:


100

PyPI 는 파이썬 패키지의 저장소 인 파이썬 패키지 인덱스입니다.

pipPyPI에서 직접 패키지를 다운로드하고 설치하는 데 사용됩니다. PyPI는 Python Software Foundation에서 호스팅합니다 . 파이썬 패키지 만 다루는 특수 패키지 관리자입니다.

apt-get Canonical에서 호스팅하는 Ubuntu 리포지토리에서 패키지를 다운로드하고 설치하는 데 사용됩니다.

에서 파이썬 패키지를 설치 차이점 중 일부 apt-get와는 pip다음과 같습니다 :

  • Canonical은 선택한 Python 모듈에 대한 패키지 만 제공합니다. 반면 PyPI는 훨씬 더 광범위한 파이썬 모듈을 호스팅합니다. 따라서을 사용하여 설치할 수없는 많은 파이썬 모듈이 있습니다 apt-get.

  • Canonical은 모든 패키지의 단일 버전 (일반적으로 최신 또는 최근에 출시 된 패키지) 만 호스팅합니다. 따라서 apt-get원하는 파이썬 패키지 버전을 결정할 수 없습니다. pip이 상황에서 우리를 도와줍니다. 이전에 PyPI에 업로드 된 모든 버전의 패키지를 설치할 수 있습니다. 종속성이 충돌하는 경우 매우 유용합니다.

  • apt-get시스템 전체 위치에 파이썬 모듈을 설치합니다. 프로젝트 virtualenv에 모듈 만 설치할 수는 없습니다 . pip우리를 위해이 문제를 해결합니다. pipvirtualenv를 활성화 한 후 사용하는 경우 프로젝트 virtualenv에만 모듈을 설치할 수있을 정도로 지능적입니다. 앞에서 언급했듯이 시스템 전체 위치에 이미 특정 Python 패키지 버전이 설치되어 있고 프로젝트 중 하나에 동일한 Python 패키지의 이전 버전이 필요한 경우 virtualenv 및 pip를 사용하여 설치할 수 있습니다 이전 버전의 python 패키지가 충돌하지 않습니다.

  • 으로 @Radu Rădeanu는 지적 이 답변에 , 일반적으로뿐만 아니라 패키지의 이름에 차이가있을 것이다. Canonical은 일반적으로 Python 2 패키지의 이름을 Python 3 패키지의 이름으로로 지정 python-<package_name>합니다 python3-<package_name>. 반면 pip우리는 일반적으로 <package_name>Python 2와 Python3 패키지 모두에 사용해야합니다.

어느 것을 사용해야합니까?

모두 apt-get와는 pip설치하는 동안 자동으로 다른 패키지 의존성을 설치 성숙 패키지 관리자입니다. 당신은 당신이 원하는대로 사람을 사용할 수 있습니다. 그러나 특정 버전의 python-package를 설치하거나 virtualenv에 패키지를 설치하거나 PyPI에서만 호스팅되는 패키지를 설치해야합니다. 단지 pip당신이 그 문제를 해결하는 데 도움이됩니다. 당신이 시스템 전체 위치에서 패키지를 설치 괜찮다면 사용 여부 그렇지 않으면 정말 중요하지 않습니다 apt-get또는 pip.


5
또한, 사용하려고해야 하나 또는 다른 둘, 그리고를 pip하고 apt-get동시 가능.
earthmeLon

3
조만간,에서 제공하지 않는 패키지 또는 버전이 필요할 수 있습니다 apt-get. 모두 사용하기 때문에 apt-getpip충돌을 일으킬 수 있습니다, 조언을 항상 사용할 수 있어야 pip지원 패키지를 pip?
Abhishek Anand

2
@Abhishek, 내가 선호하는 방법은 항상 virtualenv를 통해 Python을 사용하는 것입니다. 그렇습니다, 저는 apt보다 pip를 사용하는 것을 선호합니다.
Aditya

특정 시나리오에서 자체 웜 캔이 열립니다. 대부분의 프로젝트가 동일한 환경을 필요로했기 때문에 패키지 sudo pip없이 대부분을 설치했다고 가정 해 봅시다 virtualenv(그러나 깨끗한 Ubuntu 설치에서 제공되는 것보다 더 광범위합니다). 당신은 시스템 업그레이드를하고 우분투 (와 같은 새 버전으로 파이썬을 업그레이드하기로 결정하면 그 다음 zestyartful- 3.6 파이썬 3.5)에 PIP-설치된 패키지의 모든 /usr남아있는 및 pip.get_installed_distributions()빈리스트를 생성합니다.
z33k

전역 컨텍스트에서 pip를 사용하는 것은 명백하지 않으며 시스템 파이썬 설치를 망칠 수 있으므로 사용해서는 안됩니다. pip와 apt- 완전히 다른 것을 얻으십시오. 그들을 비교하는 것은 잘못되었습니다. 파이썬 이외의 다른 라이브러리에 의존하는 파이썬 모듈을 설치하면 apt-get이 필요한 이유를 빨리 알 수 있습니다.
mestia

21

@AvinashRaj가에서 말했듯이 자신의 의견 , pip단지 파이썬 패키지를 설치하는 데 사용하지만, apt-get모든 프로그래밍 언어에서 만든 패키지를 설치하는 데 사용됩니다.

가장 큰 문제는 두 경우 모두 올바른 패키지 이름을 찾는 것입니다.

pip search pyudev

당신이 사용하여 설치하려는 패키지 당신에게 올바른 이름을 줄 것 pip install같은,

apt-cache search pyudev

다음을 사용하여 설치하려는 패키지의 올바른 이름을 제공합니다 apt-get install.

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

그래서, conlusion에서의 특파원은 sudo apt-get install python-pyudev있다 sudo pip install pyudev, 없다 sudo pip install python-pyudev.

이제 당신은 파이썬 패키지를 설치하고자 할 때 선택합니다 무엇에 따라 달라 pipapt-get. and를 사용한 패키지 설치의 차이점에 대해서는 예를 들어이 Q & A를 참조하십시오 .pipapt-get


2

필자가 선호하는 방법은 apt모듈을 Debian / Ubuntu 리포지토리에서 아직 사용할 수없고 pip사용자 컨텍스트 --user플래그 에서만 사용할 수있는 경우에만 항상 사용하는 것입니다 . pip어쨌든 하나 를 사용 하면 모든 빌드 종속성을 Ubuntu의 저장소에서 설치하거나 지루한 작업 일 수있는 자체를 제공해야합니다. 다운로드 후 빌드하는 apt-get동안 바이너리 패키지를 설치하십시오 pip. pip를 사용하여 시스템 위치에 모듈을 설치해서는 안됩니다. 이것은 명백한 잘못입니다. 항상 --user플래그를 사용하여 모듈을 집에 설치하십시오. PYTHONPATH를 올바르게 설정하면 python은 먼저 HOME에서 모듈을 선택한 다음로 설치된 시스템 모듈을 선택할 수 apt-get있습니다.

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