Qual è il modo migliore per installare i pacchetti Python?


41

Qual è il modo migliore per installare i pacchetti Python in Ubuntu 11? Sono un recente convertito in Ubuntu e voglio imparare le migliori pratiche.

Per il contesto, sto cercando di installare il pacchetto tweeststream, ma non l'ho visto nel mio gestore di pacchetti Synaptic. Inoltre, sono molto nuovo nella programmazione, ma di solito posso seguire esempi di codice.


Risposte:


30

Penso che il modo migliore per te sarebbe installare il sistema di packaging Python come "python-pip". Puoi installarlo con Synaptic o Ubuntu Software Center.

Pip ti consentirà di installare e disinstallare facilmente i pacchetti Python, semplicemente come pip install package. Nel tuo caso sarebbe qualcosa di simile dal terminale:

sudo pip install tweeststream

3
Questo va bene per i pacchetti semplici, ma non così buono per i pacchetti più grandi, ad esempio numpy
hayd,

@hayd: perché? È correlato a askubuntu.com/questions/595366/…
naught101

2
@ naught101 Penso che probabilmente intendevo scipy, non sono sicuro che sia correlato ... sembra che pip sia troppo tardi nel percorso di Python. Consiglio vivamente di usare anaconda / conda, è di gran lunga superiore a pip IMO.
hayd

2
L'uso di IMHO sudo pip <anything>dovrebbe essere usato con molta attenzione. Dal momento che tweetstreamnon è in Ubuntu Software Center , ti consiglio di usare un virtualenv . tweetstreamsetup.py richiede anyjsonquale sia un pacchetto Ubuntu . La mancata installazione di tweetstream in virtualenvpotrebbe causare il anyjsonfallimento di altre app Ubuntu dipendenti . Risolvi i problemi.
Mark Mikofski,

9
Per ripetere: non utilizzare sudo pipsu Ubuntu. @MarkMikofski: non hai bisogno di virtualenv (a meno che non lo desideri per qualche motivo specifico). python -mpip install --user package-namepuò installare il pacchetto packafe-nameper l'utente corrente. Se ci sono dipendenze complesse (estensioni di grandi dimensioni C); è possibile installarli utilizzando apt-get, per evitare l'installazione di dipendenze di build a meno che non sia necessario.
jfs,

37

aggiornato: 2019-05-11: Questo post menziona principalmente virtualenv, ma secondo il documento Python sull'installazione del modulo , poiché Python 3.5 "l'uso di venvè ora raccomandato per la creazione di ambienti virtuali", mentre virtualenvè un'alternativa per le versioni di Python precedenti alla 3.4 .

aggiornato: 17-08-2018: da conda-4.4.0 utilizzare condaper activateanaconda su tutte le piattaforme

aggiornato: 2017-03-27: PEP 513 - file manylinuxbinari per PyPI

aggiornato: 19-08-2016: Opzione Anaconda Continuum

Questo è in qualche modo un duplicato di easy_install / pip o apt-get .

Per i pacchetti Python globali , utilizzare Ubuntu Software Center, apt, apt-get o synaptic

Ubuntu utilizza Python per molte funzioni importanti, quindi interferire con Python può danneggiare il sistema operativo. Questa è la ragione principale Io non uso mai pipil mio sistema Ubuntu, ma invece io uso sia Ubuntu Software Center, sinaptica , apt-geto il più recente semplicemente apt, che tutti per default installare pacchetti dal repository di Ubuntu . Questi pacchetti sono testati, di solito pre-compilati in modo da installarsi più velocemente e alla fine progettati per Ubuntu. Inoltre, vengono installate anche tutte le dipendenze richieste e viene mantenuto un registro delle installazioni in modo che possano essere ripristinati. Penso che la maggior parte dei pacchetti abbia repository Launchpad corrispondenti in modo da poter presentare problemi.

Un altro motivo per usare entrambi i pacchetti Ubuntu è che a volte questi pacchetti Python hanno nomi diversi a seconda di dove li hai scaricati. Python-chardet è un esempio di un pacchetto che una volta è stato nominato una cosa su PyPI e un'altra cosa nel repository Ubuntu. Quindi fare qualcosa del genere pip install requestsnon si rende conto che chardet è già installato nel tuo sistema perché la versione di Ubuntu ha un nome diverso, e di conseguenza installa una nuova versione che corromperà il tuo sistema in un modo insignificante minore ma comunque perché lo faresti.

In generale, si desidera installare solo codice attendibile nel proprio sistema operativo. Quindi dovresti essere nervoso per la digitazione $ sudo pip <anything-could-be-very-bad>.

Infine, alcune cose sono semplicemente più facili da installare usando entrambi i pacchetti Ubuntu. Ad esempio, se provi pip install numpya installare numpy & scipy a meno che tu non abbia già installato gfortran, atlas-dev, blas-dev e lapack-dev, vedrai un flusso infinito di errori di compilazione. Tuttavia, installare numpy e scipy tramite il repository Ubuntu è facile come ...

$ sudo apt-get install python-numpy python-scipy

Sei fortunato, perché stai usando Ubuntu, una delle distribuzioni più ampiamente supportate e spesso aggiornate esistenti. Molto probabilmente ogni pacchetto Python di cui avrai bisogno si trova nel repository Ubuntu e probabilmente già installato sul tuo computer. E ogni 6 mesi verrà rilasciato un nuovo ciclo di pacchetti con l'ultima distribuzione di Ubuntu.

Se sei sicuro al 100% che il pacchetto non interferirà in alcun modo con il tuo sistema Ubuntu, allora puoi installarlo usando pip e Ubuntu è abbastanza carino da mantenere questi pacchetti separati dai pacchetti distro posizionando i pacchetti distro in una cartella chiamata dist-packages/. Il repository Ubuntu ha sia pip, virtualenv che setuptools. Tuttavia, secondo il suggerimento di Wojciech di usare virtualenv.

Per i progetti personali di Python usa pip and wheel in virtualenv

Se hai bisogno dell'ultima versione o il modulo non è nel repository Ubuntu, avvia un virtualenv e usa pip per installare il pacchetto. Sebbene pip e setuptools si siano fusi, pip IMO è preferito su easy-install o distutils, poiché attenderà sempre che il pacchetto sia completamente scaricato e compilato prima di copiarlo nel file system e rende l'aggiornamento o la disinstallazione un gioco da ragazzi. In molti modi è simile a apt-get, in quanto generalmente gestisce bene le dipendenze. Tuttavia si dovrà potrebbe dover gestire alcune dipendenze da soli, ma dal momento che PEP 513 è stato adottato ora ci sono manylinuxi binari del Python Package Index (PyPI) per popolari distribuzioni Linux come Ubuntu e Fedora .ad esempio come menzionato sopra per NumPy e SciPy assicurati di aver installato gfortran, atlas-dev, blas-dev e lapack-dev dal repository Ubuntu Ad esempio, sia NumPy che SciPy sono ora distribuiti per Ubuntu come manylinuxruote usando OpenBLAS invece come default di ATLAS. Puoi comunque costruirli dal sorgente usando le opzioni pip --no-use-wheelo--no-binary <format control> .

~$ sudo apt-get install gfortran libblas-dev liblapack-dev libatlas-dev python-virtualenv
~$ mkdir ~/.venvs
~$ virtualenv ~/.venvs/my_py_proj
~$ source ~/.venvs/my_py_proj/bin/activate
~(my_py_proj)$ pip install --no-use-wheel numpy scipy

Vedere la sezione successiva, "Non sei in sudoers", di seguito per l'installazione di versioni aggiornate di pip, setuptools, virtualenv o ruote sul profilo personale utilizzando lo --userschema di installazione con pip. Puoi usarlo per aggiornare pip per il tuo uso personale come JF Sebastian ha indicato nel suo commento a un'altra risposta . NOTA: -mè davvero necessario solo su MS Windows quando si aggiorna pip .

python -m pip install --user pip setuptools wheel virtualenv

Le versioni più recenti di pip memorizzano automaticamente nella cache le ruote, quindi le seguenti sono utili solo per le versioni precedenti di pip. Dato che potresti finire per installarle molte volte, considera di usare la ruota con pip per creare una timoneria. Wheel è già incluso in virtualenvv13.0.0 quindi se la tua versione di virtualenvè troppo vecchia, potrebbe essere necessario installare prima wheel.

~(my_py_proj)$ pip install wheel  # only for virtualenv < v13.0.0
~(my_py_proj)$ pip wheel --no-use-wheel numpy scipy

Questo creerà i file della ruota binaria in <cwd>/wheelhouse, utilizzare -dper specificare una directory diversa. Ora, se avvii un altro virtualenv e hai bisogno degli stessi pacchetti che hai già creato, puoi installarli dalla tua timoneria usandopip install --find-links=<fullpath>/wheelhouse

Leggi Installazione dei moduli Python nella documentazione di Python e Installazione dei pacchetti nella pagina principale Indice pacchetti Python . Anche pip , venv , virtualenv e wheel .

Se non ci sei sudoerse virtualenvnon è installato.

Un'altra opzione per l'utilizzo di un ambiente virtuale, o se si utilizza una condivisione Linux senza privilegi di root, l'utilizzo degli schemi di installazione di Python --usero --home=<wherever-you-want>con Python distutilsinstallerà i pacchetti sul valore di site.USERBASEo dove si desidera. Le versioni più recenti di pip hanno anche --userun'opzione. Non usare sudo!

pip install --user virtualenv

Se la tua versione Linux di pip è troppo vecchia, puoi passare le opzioni di installazione usando ciò --install-optionche è utile per passare opzioni personalizzate ad alcuni setup.pyscript per alcuni pacchetti che creano estensioni, come l'impostazione di PREFIX. Potrebbe essere necessario semplicemente estrarre la distribuzione e utilizzare distutilsper installare il pacchetto alla vecchia maniera digitando python setup install [options]. La lettura di parte della documentazione di installazione e della distutilsdocumentazione può essere d'aiuto.

Python è abbastanza carino da aggiungere site.USERBASEal tuo PYTHONPATHvantaggio su qualsiasi altra cosa, quindi le modifiche avranno effetto solo su di te. Una posizione popolare per --homeè ~/.local. Vedere la guida all'installazione del modulo Python per la struttura esatta dei file e in particolare dove si trovano i pacchetti del sito. Nota : se si utilizza il --homesistema di installazione, allora potrebbe essere necessario aggiungere alla PYTHONPATHvariabile d'ambiente utilizzando exportnel vostro .bashrc, .bash_profileo la shell per i pacchetti localizzati ad essere disponibile in Python.

Usa Continuum Anaconda Python per progetti matematici, scientifici, dati o personali

Se stai usando Python per matematica, scienza o dati, allora IMO un'opzione davvero buona è la distribuzione Anaconda-Python o la distro miniconda di base rilasciata da Anaconda, Inc. (precedentemente nota come Continuum Analytics ) . Sebbene chiunque possa trarre vantaggio dall'uso di Anaconda per progetti personali, l'installazione predefinita include oltre 500 pacchetti matematici e scientifici come NumPy, SciPy, Pandas e Matplotlib , mentre miniconda installa solo Anaconda-Python e il gestore dell'ambiente conda. Anaconda si installa solo nel tuo profilo personale, vale a dire: /home/<user>/ e modifica il tuo ~/.bashrco ~/.bash_profileper anteporre il percorso di Anaconda al tuo personale $PATH consiglia di approvvigionamentoconda.shnel tuo ~/.bashrcche ti permette di usare conda activate <env|default is base>per avviare anaconda - questo influisce solo su di te - il tuo percorso di sistema è invariato . Quindi non non necessario l'accesso root o sudoutilizzare Anaconda! Se hai già aggiunto Anaconda-Python, miniconda o conda al tuo percorso personale, dovresti rimuovere l' PATHesportazione dal tuo ~/.bashrce aggiornare alla nuova raccomandazione , quindi il tuo sistema Python sarà di nuovo il primo.

Questo è in qualche modo simile --userall'opzione che ho spiegato nell'ultima sezione tranne che si applica a Python nel suo insieme e non solo ai pacchetti. Pertanto Anaconda è completamente separato dal sistema Python , non interferirà con il sistema Python e solo tu puoi utilizzarlo o modificarlo. Poiché installa una nuova versione di Python e tutte le sue librerie, avrai bisogno di almeno 200 MB di spazio, ma è molto intelligente nella memorizzazione nella cache e nella gestione delle librerie che è importante per alcune delle cose interessanti che puoi fare con Anaconda.

Anaconda cura una raccolta di binari e librerie Python richiesti dalle dipendenze in un repository online (precedentemente chiamato binstar ) e ospitano anche pacchetti utente come "canali" diversi. Il gestore pacchetti utilizzato da Anaconda, condaper impostazione predefinita installa i pacchetti da Anaconda, ma è possibile segnalare un "canale" diverso utilizzando l' -copzione.

Installa i pacchetti condaproprio come pip:

$ conda install -c pvlib pvlib  # install pvlib pkg from pvlib channel

Ma condapuò fare molto di più! Può anche creare e gestire ambienti virtuali proprio come virtualenv. Pertanto, poiché Anaconda crea ambienti virtuali, il pipgestore pacchetti può essere utilizzato per installare pacchetti da PyPI in un ambiente Anaconda senza root o sudo. Da non utilizzare sudocon Anaconda! Avvertimento! Fai attenzione però quando mescoli pipe condain un ambiente Anaconda, b / c dovrai gestire le dipendenze dei pacchetti con più attenzione. Un'altra opzione da utilizzare pipin un ambiente conda è utilizzare il canale conda-forge, ma è anche meglio farlo in un nuovo ambiente conda con conda-forge come canale predefinito. Come ultima risorsa, se non riesci a trovare un pacchetto altro che su PyPI, considera l'utilizzo --no-depsquindi installa manualmente le dipendenze rimanenti utilizzando conda.

Anaconda è anche simile in qualche modo a Ruby RVM se hai familiarità con quello strumento. Anaconda condati consente anche di creare ambienti virtuali con diverse versioni di Python . es : conda create -n py35sci python==3.5.2 numpy scipy matplotlib pandas statsmodels seaborncreerà uno stack scientifico / data-science usando Python-3.5 in un nuovo ambiente chiamato py35sci. Puoi cambiare ambiente usando conda. Poiché conda-4.4.0, questo è ora diverso a virtualenvche usa source venv/bin/activate, ma precedente conda-4.4.0 i condacomandi erano gli stessi come virtualenve utilizzato anche source:

# AFTER conda-4.4 
~/Projects/myproj $ conda activate py35sci

# BEFORE conda-4.4 
~/Projects/myproj $ source activate py35sci

Ma aspetta, c'è di più! Anaconda può anche installare lingue diverse come R per la programmazione statistica dal canale Anacondar . Puoi persino impostare il tuo canale per caricare distribuzioni di pacchetti create per conda . Come accennato, conda-forge mantiene build automatizzate di molti pacchetti su PyPI sul canale Anaconda conda-forge .

Epilogo

Ci sono molte opzioni per mantenere i tuoi progetti Python su Linux a seconda delle tue esigenze e accessi personali. Tuttavia, se c'è qualcosa che spero tu possa togliere da questa risposta è che non dovresti quasi mai usare sudoper installare i pacchetti Python . L'uso di sudodovrebbe essere un odore per te che qualcosa non va. Sei stato avvertito.

Buona fortuna e buona programmazione!


Vorrei averlo letto prima di distruggere la distribuzione Python del mio sistema sudoing pip. Ottimo commento, grazie per queste informazioni.
slhck,

pip install numpydovrebbe installare tutte le dipendenze
Timo

@Timo come ho detto nell'aggiornamento 2017-03-27 da quando PEP 513 è stato implementato da manylinux numpy i binari sono disponibili su PyPI che sono costruiti con OpenBLAS, cioè : hanno le dipendenze richieste. Tuttavia, di regola, pip install <package>installerà solo le dipendenze dei pacchetti Python elencate nella install_requiressezione di setup.py. Ad esempio: l'installazione di Jupyter non installerà il pandoc della libreria Haskell per esportare i notebook Jupyter come LaTeX, ecc.
Mark Mikofski

Al contrario, conda install <package>probabilmente installerà tutte le dipendenze, tra cui C / C ++, FORTRAN, ecc., Anche le librerie Haskell, perché conda non gestisce solo i pacchetti Python come pip, ma gestisce gli ambienti. Quindi, se avevi Anaconda o Miniconda, conda install Jupyterinstalla tutto nel file della ricettameta.yml , inclusa la libreria Pandask di Haskell . Per maggiori informazioni vedi PyPA
Mark Mikofski

10

Oltre all'aggiunta di Novarchibald, è generalmente una buona idea creare un ambiente virtuale per il progetto Python e installare dipendenze all'interno. Ciò consente di avere un migliore controllo sulle dipendenze e sulle loro versioni. Per configurare un ambiente virtuale, immettere:

virtualenv --no-site-packages --distribute my_python_project

Quindi, attivalo con:

cd my_python_project
source bin/activate

A questo punto tutto ciò che si installa con pip verrà conservato all'interno di questo ambiente virtuale. Se vuoi installare qualcosa a livello globale, dovresti prima uscire da virtualenv con:

deactivate

Puoi scoprire di più su virtualenv qui .


1
In alternativa: usando il pip dalla directory bin virtualenv (qui my_python_project / bin / pip) si mantiene quell'ambiente, senza la necessità di "attivarlo". Quindi - l'utilizzo di uno qualsiasi degli script installati nel cestino utilizza virutalenv specificato. "activ" è utile solo per effettuare chiamate a "python", "easy_install" e "pip" utilizzando il bin specifico di virtualenv.
Jan Vlcinsky,

I documenti di installazione di Python dicono di usare "pyvenv" per creare ambienti virtuali specifici per un progetto; ma virtualenv è un fallback per i progetti che utilizzano la versione precedente di Python, docs.python.org/3/installing/index.html?highlight=pip .
pbhj,

2
Si noti che le virtualenvopzioni --no-site-packagese --distributesono deprecate al giorno d'oggi e non hanno più alcun effetto.
Foraggio

4

Oltre alla risposta di Zetah'a, il comando per installare python-pip dal terminale è:

sudo apt-get install python-pip

1

Prova questo Un framework GUI per PIP sviluppato usando PyQt4

Un framework GUI per PIP sviluppato utilizzando PyQt4

La schermata iniziale

inserisci qui la descrizione dell'immagine

La schermata iniziale contiene le opzioni per un utente per selezionare il processo che desidera eseguire.

Si può anche specificare la versione di Python su cui si desidera eseguire le operazioni.

Il menu file ha un'opzione per "Esci" (scorciatoia: Ctrl + Q) e "Aggiorna elenchi" che aggiorna i file di risorse contenenti i dati del pacchetto.

La schermata di installazione

inserisci qui la descrizione dell'immagine

La schermata di installazione ha una barra di ricerca che l'utente può usare per cercare e installare i pacchetti desiderati.

La schermata di aggiornamento

inserisci qui la descrizione dell'immagine

La schermata di aggiornamento mostra l'elenco dei pacchetti che non sono aggiornati e possono essere aggiornati.

Disinstalla Screem

inserisci qui la descrizione dell'immagine

La schermata di disinstallazione mostra l'elenco dei pacchetti installati nel sistema dell'utente e che possono essere disinstallati.

La finestra dei progressi

inserisci qui la descrizione dell'immagine

La finestra di avanzamento è un widget terminale integrato per PIP-GUI che visualizza i processi in esecuzione durante l'esecuzione delle operazioni.


1
Benvenuto in Ask Ubuntu! Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Kevin Bowen,
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.