apt-get install vs pip install


103

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 conformità con una risposta a questa domanda . Ho eseguito questo comando:

sudo pip install python-pyudev

ma ho 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, il seguente ha funzionato bene:

sudo apt-get install python-pyudev

Quando apt-getdovrebbe essere usato per installare i pacchetti e quando viene python-pipusato?


2
pipè usato per installare solo i pacchetti python, ma apt-getè usato per installare tutti i pacchetti.
Avinash Raj,

3
ok..perché pip non è stato in grado di installare python-pyudev?
Vineet Kaushik

Risposte:


100

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

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

apt-get viene utilizzato per scaricare e installare pacchetti dai repository Ubuntu ospitati da Canonical.

Alcune delle differenze tra l'installazione di pacchetti python da apt-gete pipsono le seguenti:

  • Canonical fornisce solo pacchetti per i 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 di qualsiasi pacchetto (generalmente l'ultima o quella rilasciata in passato). Quindi, con apt-getnon possiamo decidere la versione del pacchetto python che vogliamo. pipci aiuta in questa situazione. Possiamo installare qualsiasi versione del pacchetto precedentemente caricata su PyPI. Ciò è estremamente utile in caso di conflitto nelle dipendenze.

  • apt-getinstalla i moduli python in posizione a livello di sistema. Non possiamo semplicemente installare moduli nel nostro progetto virtualenv . piprisolve questo problema per noi. Se lo utilizziamo pipdopo aver attivato virtualenv, è abbastanza intelligente installare solo i moduli nel nostro virtualen progetto. Come menzionato nel punto precedente, se esiste una versione di un particolare pacchetto python già installato in una posizione 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.

  • Come ha sottolineato @Radu Rădeanu in questa risposta , ci sarebbe generalmente differenza anche nei nomi dei pacchetti. Di solito Canonical nomina i pacchetti Python 2 come python-<package_name>e i pacchetti Python 3 come python3-<package_name>. Considerando pipche generalmente abbiamo solo bisogno di usare <package_name>sia per Python 2 che per i pacchetti Python3.

Quale dovresti usare:

Entrambi apt-gete pipsono gestori di pacchetti maturi che installano automaticamente qualsiasi altra dipendenza pacchetto durante l'installazione. Puoi usare chiunque come preferisci. Tuttavia, se è necessario installare una versione particolare di python-package, o installare il pacchetto in un virtualenv, o installare un pacchetto che è ospitato solo su PyPI; pipti aiuterebbe solo a risolvere quel problema. Altrimenti, se non ti dispiace installare i pacchetti in tutto il sistema, non importa se lo usi apt-geto pip.


5
Inoltre, dovresti provare a usare l' uno o l'altro , e non entrambi pipe apt-getcontemporaneamente.
earthmeLon

3
Prima o poi, potrebbe essere necessario un pacchetto o una sua versione non fornita da apt-get. Perché l'utilizzo di entrambi apt-gete pippuò causare conflitti, dovrebbe essere consigliabile utilizzare sempre i pippacchetti supportati da pip?
Abhishek Anand,

2
@Abhishek, il mio metodo preferito è usare sempre Python attraverso un virtualenv .. Quindi sì, preferisco usare pip su apt ..
Aditya

Ciò apre la sua lattina di worm in determinati scenari. Supponiamo che tu abbia installato la maggior parte dei tuoi pacchetti con sudo pipsenza virtualenvperché la maggior parte dei tuoi progetti necessitava dello stesso ambiente (ma più ampia di quella fornita con un'installazione Ubuntu pulita). Poi, quando si esegue un aggiornamento del sistema e Ubuntu decide di aggiornare Python ad una nuova versione (come con zestya artful- Python 3,5-3,6), tutti i pacchetti installati pip-in /usrsono lasciati alle spalle e pip.get_installed_distributions()produce una lista vuota.
z33k,

L'uso di pip in un contesto globale è semplicemente sbagliato e non deve essere usato, perché rovinerà l'installazione di Python di sistema. pip e apt-get cose completamente diverse, ed è sbagliato confrontarle. Prova a installare un modulo Python che dipende da altre librerie non Python e capirai rapidamente perché potresti aver bisogno di apt-get.
Mestia,

21

Come ha detto @AvinashRaj nel suo commento , pipviene utilizzato solo per installare i pacchetti python, ma apt-getviene utilizzato per installare i pacchetti creati in qualsiasi linguaggio di programmazione.

Il tuo problema principale è trovare il nome del pacchetto giusto 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:

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

Quindi, in conclusione, 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: pipo apt-get. Vedi ad esempio questo Q&A sulla differenza nell'installazione di un pacchetto usando pipe apt-get.


2

Il mio modo preferito è usare sempre apte solo nel caso in cui il modulo non sia ancora disponibile nel repository Debian / Ubuntu da usare pip, ma solo nel contesto utente - --userflag. Usandone pipuno comunque, è necessario ottenere tutte le dipendenze di build installate, diciamo dal repository di Ubuntu o fornirle esse stesse che possono essere un compito noioso. apt-getinstalla i pacchetti binari mentre pipli costruisce dopo il download. Non si dovrebbe usare pip per installare i moduli nelle posizioni di sistema. Questo è chiaramente sbagliato. Utilizzare sempre --userflag per installare un modulo nella posizione iniziale. PYTHONPATH correttamente configurato consente a Python di prelevare prima i moduli da HOME e quindi i moduli di sistema installati apt-get.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.