apt-get install python-xxx vs pip install


8

Sto ancora cercando di capire questo problema che sto avendo e ho letto un sacco di post riguardanti sudo apt-get install python-XXXvs pip install, e capisco il jist di esso (apt-get è un repository di pacchetti, gestito da un gruppo completamente diverso di persone su pip, auto -aggiornamento insieme a tutto il resto quando è disponibile un aggiornamento, è binario ecc.). Tuttavia, ci sono alcune cose particolari che non capisco e non sono stato in grado di trovare risposte a:

  1. Se io, per qualsiasi motivo, installo prima un pacchetto, ad esempio numpy, con sudo apt-get install numpy, e poi dopo pip install numpy. Che succede? numpy è di nuovo installato altrove con una versione diversa (ad es. in .local / lib), quindi ora ho due versioni indipendenti? Quale viene utilizzato durante l'importazione? (se ho capito bene, è separato e apt-get è esteso al sistema, ma ho visto risposte contrastanti a questa domanda, ad esempio qui )

  2. Ho notato che molti pacchetti su apt-get sono piuttosto vecchi rispetto a pip. ad es. al momento della scrittura di ipython 2.3.0 vs 4.0.3, numpy 1.10.2 vs 1.10.4, spyder 2.3.5 vs 2.3.8. C'è qualche vantaggio per primo sudo apt-get installseguito da un pip install? o è solo stupido?

  3. Ho notato che il mio pip era 1.5.6 - è l'ultimo se lo fai sudo apt-get install python-pip. mentre su pip è 8.0.2! Credo che questo mi abbia causato problemi, perché con quella vecchia versione è possibile installare più volte lo stesso pacchetto e non avvisa. E in qualche modo non scrive su quello vecchio. L'ho capito perché posso continuare a disinstallare lo stesso pacchetto (ad esempio numpy) ed è sempre lì quando lo faccio pip show numpy. E stranamente, mostrando sempre la stessa cartella (.local /), ma con versioni diverse: S Quindi ho due domande relative a questo:

    un. qual è il modo migliore per installare pip? Attualmente sto sporgendosi verso sudo apt-get install python-pip, pip install pip, sudo apt-get purge python-pip. È saggio? Mi sembra un po 'ridicolo.

    b. ora che so che molti dei miei pacchetti sono incasinati con installazioni duplicate, probabilmente perché alcuni sono stati installati con apt-get e poi più volte con pip 1.5.6, qual è il modo migliore per verificare la presenza di duplicati e ripulirlo? Immagino che non sia sicuro usare uno script per pip disinstallare tutto e reinstallare?

PS Non ero sicuro di dover pubblicare questo messaggio come una nuova domanda o come risposta al mio problema originale. Dato che questa domanda è molto più concisa e generale, ho pensato che sarebbe meglio separarla. Mi scuso se mi sono sbagliato.


Possibile duplicato di apt get install vs pip install
muru

In realtà faccio riferimento a quel post nella mia domanda, è stato molto utile per chiarire molta della mia confusione, ma non risponde alle mie domande sopra (almeno non riuscivo a vederlo)
memo

Oh, nell'altra tua domanda. Ho appena guardato l'elenco dei post collegati e non l'ho visto lì.
Muru,

Risposte:


8

Per gli archivi, dopo molte prove ed errori questo è quello che ho trovato (a posteriori, alcuni bit hanno senso, altri abbastanza confusi).

  • Se si sudo apt-get install python-xyz, il pacchetto verrà visualizzato pip list. Ovviamente puoi importarlo in Python, ma non appare in pip.get_installed_distributions (). (Ovviamente non è vero il contrario . Ad esempio, se lo fai pip install xyznon apparirà nel tuo apt / sinaptico)

  • Dopo, sudo apt-get install python-xyzse fai pip install xyzquello che succede dipende dalla versione di pip che hai.

VECCHIA v1.5.6 (la versione corrente fornita su Ubuntu PPA):

  • Questa versione di pip (1.5.6) installerà semplicemente una nuova copia di xyz in una posizione diversa. Si finisce con più copie e questo provoca un enorme casino. per esempio:

    • numpy da apt-get è 1.8.2 su /usr/local/lib/python2.7/dist-packages
    • numpy da pip è 1.10.4 a ~ / .local / lib / python2.7 / site-pacchetti
  • Se lo faccio pip install numpyancora, lo scarica e lo installa di nuovo. Quindi potresti finire con molte versioni diverse alle quali non puoi davvero accedere. Posso fare pip install numpy5 volte, e poi posso fare pip uninstall numpy 5xvolte! Ovviamente puoi prestare attenzione a non farlo, ma a volte gli script di installazione di altri software sono un po 'disattenti e possono rovinare le cose. Incredibile che Ubuntu distribuisca ufficialmente questa versione di pip.

NOVITÀ v8.0.2 (la versione corrente sul pip stesso):

  • le versioni più recenti di pip (es. 8.0.2 che è su pip) rifiuteranno di installare lo stesso pacchetto dicendo che il requisito è già soddisfatto. Quindi non è possibile installare una nuova versione. Questo è un buon comportamento (maggiori informazioni su come ottenere questa versione di pip in seguito).

  • In questo caso puoi solo aggiornare, cioè installare con -U flag.

  • Tuttavia, quando si tenta di eseguire pip install -U xyzl'installazione su un pacchetto con sudo apt-get, si ottengono errori di autorizzazione poiché apt-get è stato installato in / usr / e per poter scrivere è necessario l'accesso root.

  • Quindi AFAIK non hai altra scelta che sudo pip install -U xyzessere in grado di aggiornarlo. In questo caso pip installa l'ultimo pacchetto nello stesso posto in cui sudo apt-get lo ha scritto. ad esempio nel mio caso /usr/local/lib/python2.7/dist-packages. Questo è buono.

  • Vale anche la pena sottolineare che i pacchetti su apt sono spesso molto più vecchi di quelli su pip (ad esempio numpy v1.8.2 vs 1.10.4, scipy 0.14.1 vs 0.17.0, ipython 2.3 vs 4.0.3, spyder 2.3.5 vs 2.3.8)

Quindi i miei pensieri attuali sono di ottenere le cose più importanti sudo apt-get, ad esempio sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose spyder

e quindi aggiornarli (o almeno alcuni di essi) con sudo pip install -U.

NB Sembra abbastanza importante ottenere il nuovo pip da pip (molto meta)

sudo apt-get install python-pip
sudo pip install -U pip

PS: sono a conoscenza di virtualenv ma non ne ho bisogno in questo momento. Ho bisogno di un solo ambiente di sviluppo.

Ed ecco un piccolo script per scaricare un elenco di pacchetti, versione e percorso (ma funziona solo su moduli pip installati, non su apt-get)

import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
    print p
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.