Vraag apt-get install vs pip install


Ik ben een beetje in de war over de gevallen waarin de bovenstaande commando's moeten worden gebruikt bij het downloaden van python-pakketten. Ik probeerde een pakket genaamd pyudev te downloaden in overeenstemming met een antwoord hiermee vraag. Ik heb deze opdracht uitgevoerd:

sudo pip install python-pyudev

maar ontving het volgende bericht:

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

Maar het volgende werkte prima:

sudo apt-get install python-pyudev

Wanneer is apt-get zou moeten worden gebruikt om pakketten te installeren en wanneer is python-pip gebruikt?


82
2018-03-09 15:51


oorsprong


pip wordt alleen gebruikt om Python-pakketten te installeren, maar apt-get wordt gebruikt om alle pakketten te installeren. - Avinash Raj
ok..dus waarom was pip niet in staat om python-pyudev te installeren? - Vineet Kaushik
zien stackoverflow.com/questions/6874527/... - Avinash Raj


antwoorden:


PyPI is de Python Package-index - repository van python-modules.

pip wordt gebruikt om pakketten direct vanuit PyPI te downloaden en te installeren. PyPI wordt gehost door Python Software Foundation. Het is een gespecialiseerde pakketbeheerder die alleen met python-pakketten te maken heeft.

apt-get wordt gebruikt om pakketten te downloaden en te installeren vanuit Ubuntu-repository's die worden gehost door Canonical.

Enkele verschillen tussen het installeren van Python-pakketten van apt-get en pip zijn als volgt:

  • Canonical biedt alleen pakketten voor geselecteerde python-modules. Overwegende dat, PyPI hosts een veel breder scala van python-modules. Er zijn dus veel python-modules die u niet kunt installeren apt-get.

  • Canonical host alleen een enkele versie van een pakket (meestal het nieuwste of het recent uitgebrachte). Dus met apt-get we kunnen niet beslissen welke versie van python-pakket we willen hebben. pip helpt ons in deze situatie. We kunnen elke versie van het pakket installeren die eerder op PyPI is geüpload. Dit is uiterst nuttig in het geval van conflicten in afhankelijkheden.

  • apt-get installeert python-modules op de systeembrede locatie. We kunnen niet zomaar modules in ons project installeren virtualenv. pip lost dit probleem voor ons op. Als we gebruiken pip na het activeren van de virtualenv, is deze intelligent genoeg om alleen de modules in ons project virtualenv te installeren. Zoals vermeld in het vorige punt, als er al een versie van een bepaald python-pakket is geïnstalleerd op de gehele systeemlocatie en een van ons project een oudere versie van hetzelfde python-pakket vereist, kunnen we in dergelijke situaties virtualenv en pip gebruiken om te installeren die oudere versie van Python-pakket zonder conflicten.

  • Als @Radu Rădeanu gewezen in dit antwoord, er zou in het algemeen ook verschil zijn in de namen van pakketten. Canonical noemt gewoonlijk Python 2-pakketten als python-<package_name> en Python 3-pakketten als python3-<package_name>. Overwegende dat voor pip we moeten over het algemeen gewoon gebruiken <package_name> voor zowel Python 2 als Python3-pakketten.

Welke moet je gebruiken:

Beide apt-get en pip zijn volwassen pakketbeheerders die tijdens het installeren automatisch elke andere pakketafhankelijkheid installeren. Je mag iedereen gebruiken zoals je wilt. Als u echter een bepaalde versie van python-pakket moet installeren of het pakket in een virtualenv moet installeren, of een pakket moet installeren dat alleen op PyPI wordt gehost; enkel en alleen pip zou je kunnen helpen om dat probleem op te lossen. Anders, als u het niet erg vindt om de pakketten op de hele systeemlocatie te installeren, maakt het niet echt uit of u het gebruikt apt-getof pip.


80
2018-03-09 16:53



Je moet ook proberen te gebruiken de een of de ander, en niet allebei pip en apt-get simutaneously. - earthmeLon
Vroeg of laat kan een pakket of een versie daarvan nodig zijn die niet wordt aangeboden door apt-get. Omdat beide worden gebruikt apt-get en pip kan conflicten veroorzaken, mocht het advies zijn om altijd te gebruiken pip voor pakketten ondersteund door pip? - Abhishek Anand
@Abhishek, mijn voorkeursmethode is om Python altijd via een virtualenv te gebruiken. Dus, ja, ik gebruik liever pip over apt .. - Aditya
Dat opent zijn eigen kan van wormen in bepaalde scenario's. Laten we zeggen dat je de meeste van je pakketten hebt geïnstalleerd sudo pip zonder virtualenv omdat de meeste van uw projecten dezelfde omgeving nodig hadden (maar uitgebreider dan wat is voorzien van schone Ubuntu-installatie). Wanneer u vervolgens een systeemupgrade uitvoert en Ubuntu besluit om Python te upgraden naar een nieuwe versie (zoals met zesty naar artful - Python 3.5 tot 3.6), al je in pijplessen geïnstalleerde pakketten in /usr zijn achtergelaten en pip.get_installed_distributions() produceert een lege lijst. - o'rety


Zoals @AvinashRaj zei in zijn commentaar, pip wordt alleen gebruikt om Python-pakketten te installeren, maar apt-get wordt gebruikt om pakketten te installeren die in een programmeertaal zijn gemaakt.

Uw grootste probleem is om in beide gevallen de juiste pakketnaam te vinden:

pip search pyudev

geeft je de juiste naam voor het pakket dat je wilt gebruiken pip install, als

apt-cache search pyudev

geeft je de juiste naam voor het pakket dat je wilt gebruiken 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

Dus, in conlusie, de correspondent van sudo apt-get install python-pyudev is sudo pip install pyudev, niet sudo pip install python-pyudev.

Nu hangt het van u af wat u wilt kiezen wanneer u een python-pakket wilt installeren: pipof apt-get. Zie bijvoorbeeld deze Q & A over verschil in het installeren van een pakket met behulp van pip en apt-get.


20
2018-03-09 16:13





Mijn voorkeursmanier is om altijd te gebruiken apt en alleen in het geval dat de module nog niet beschikbaar is in de Debian / Ubuntu-repository om te gebruiken pip, maar alleen in gebruikerscontext - --user vlag. Door het gebruiken van pip hoe dan ook, alle build-dependencies moeten worden geïnstalleerd, laten we zeggen dat het Ubuntu's repository is of geef het zelf, wat een vervelende klus kan zijn. apt-get installeer binaire pakketten terwijl pip bouwt ze na het downloaden. Men zou geen pip moeten gebruiken om modules in systeemlocaties te installeren. Dit is gewoon verkeerd. Gebruik altijd --user om een ​​module op de thuislocatie te installeren. Op de juiste manier geconfigureerd PYTHONPATH laat python de modules eerst van de HOME halen en vervolgens de systeemmodules installeren met apt-get.


1
2018-05-08 13:22