apt-get install vs pip install

80

Sono un po 'confuso riguardo ai casi in cui i comandi sopra devono essere usati quando si scaricano pacchetti python. Stavo cercando di scaricare un pacchetto chiamato pyudev in accordo con una risposta con questo domanda . Ho eseguito questo comando:

sudo pip install python-pyudev

ma ha ricevuto il seguente messaggio:

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

Tuttavia, ha funzionato bene:

sudo apt-get install python-pyudev

Quando si suppone che apt-get debba essere usato per installare i pacchetti e quando viene utilizzato python-pip ?

    
posta Vineet Kaushik 09.03.2014 - 16:51

3 risposte

78

PyPI è l'indice del pacchetto Python - repository di moduli python.

pip è usato per scaricare e installare i pacchetti direttamente da PyPI. PyPI è ospitato dalla Python Software Foundation . È un gestore di pacchetti specializzato che si occupa solo di pacchetti python.

apt-get è usato per scaricare e installare pacchetti da repository di Ubuntu che sono ospitati da Canonical.

Alcune delle differenze tra l'installazione dei pacchetti python da apt-get e pip sono le seguenti:

  • Canonical fornisce solo pacchetti per moduli python selezionati. Considerando che, PyPI ospita una gamma molto più ampia di moduli python. Quindi, ci sono molti moduli python che non potrai installare usando apt-get .

  • Canonical ospita solo una versione singola di qualsiasi pacchetto (generalmente l'ultima o quella rilasciata negli ultimi anni). Quindi, con apt-get non possiamo decidere la versione di python-package che vogliamo. pip ci aiuta in questa situazione. Possiamo installare qualsiasi versione del pacchetto che è stato precedentemente caricato su PyPI. Ciò è estremamente utile in caso di conflitti nelle dipendenze.

  • apt-get installa i moduli python nel percorso a livello di sistema. Non possiamo semplicemente installare moduli nel nostro progetto virtualenv . pip risolve questo problema per noi. Se stiamo usando pip dopo aver attivato virtualenv, è abbastanza intelligente da installare solo i moduli nel nostro progetto virtualenv. Come accennato nel punto precedente, se esiste una versione di un particolare pacchetto python già installato nel percorso a livello di sistema, e uno dei nostri progetti richiede una versione precedente dello stesso pacchetto python, in tali situazioni possiamo usare virtualenv e pip per installare quella versione precedente del pacchetto python senza conflitti.

  • Poiché @Radu Rădeanu ha evidenziato in questa risposta , generalmente ci sarebbero anche differenze nei nomi dei pacchetti. Canonical di solito nomina i pacchetti Python 2 come python-<package_name> e pacchetti Python 3 come python3-<package_name> . Considerando che per pip in genere è sufficiente utilizzare <package_name> per entrambi i pacchetti Python 2 e Python3.

Quale dovresti usare:

Sia apt-get che pip sono gestori di pacchetti maturi che installano automaticamente qualsiasi altra dipendenza del pacchetto durante l'installazione. Puoi usare chiunque come preferisci. Tuttavia, se è necessario installare una particolare versione di python-package, o installare il pacchetto in un virtualenv, o installare un pacchetto che è solo ospitato su PyPI; solo pip ti aiuterà a risolvere questo problema. Altrimenti, se non ti dispiace installare i pacchetti nel percorso a livello di sistema, non importa se usi apt-get o pip .

    
risposta data Aditya 09.03.2014 - 17:53
20

Come @AvinashRaj ha detto in suo commento , pip è usato per installare solo pacchetti Python, ma apt-get è usato per installare pacchetti creati in qualsiasi linguaggio di programmazione.

Il tuo problema principale è trovare il giusto nome del pacchetto in entrambi i casi:

pip search pyudev

ti darà il nome giusto per il pacchetto che vuoi installare usando pip install , come

apt-cache search pyudev

ti darà il nome giusto per il pacchetto che vuoi installare usando apt-get install :

[email protected]: ~ $ pip search pyudev
pyudev                    - A libudev binding
[email protected]: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

Quindi, in conlusione, il corrispondente di sudo apt-get install python-pyudev è sudo pip install pyudev , non sudo pip install python-pyudev .

Ora dipende da te cosa vuoi scegliere quando vuoi installare un pacchetto python: pip o apt-get . Vedi ad esempio questo Q & amp; A su differenza nell'installazione di un pacchetto utilizzando pip e apt-get .

    
risposta data Radu Rădeanu 09.03.2014 - 17:13
1

Il mio modo preferito è usare sempre apt e solo nel caso il modulo non sia ancora disponibile nel repository Debian / Ubuntu per usare pip , ma solo nel contesto utente - --user flag. Utilizzando pip si deve comunque ottenere tutte le dipendenze di build installate da diciamo repository di Ubuntu o fornire loro stessi che può essere un compito noioso. apt-get installa pacchetti binari mentre pip li crea dopo il download. Non si dovrebbe usare pip per installare i moduli nelle posizioni di sistema. Questo è assolutamente sbagliato. Usa sempre --user per installare un modulo nella posizione di partenza. PYTHONPATH correttamente configurato consente a python di prelevare prima i moduli da HOME e poi i moduli di sistema installati con apt-get .

    
risposta data mestia 08.05.2018 - 15:22

Leggi altre domande sui tag