Python ha un sistema di gestione di pacchetti / moduli?


145

Python ha un sistema di gestione di pacchetti / moduli, simile a come Ruby ha rubygems dove puoi fare gem install packagename?

Su Installazione di moduli Python , vedo solo i riferimenti a python setup.py install, ma che richiede di trovare il pacchetto prima.


3
Se ritieni che l'indice dei pacchetti di Python PyPI dovrebbe avere istruzioni più chiare su come installare i pacchetti, vota e commenta il problema su bitbucket.org/pypa/pypi/issue/149/…
Colonnello Panic,

Mentre era attuale al momento, il collegamento in questa domanda è ora alla documentazione distutils legacy. Ho archiviato bugs.python.org/issue26014 per capire che questi documenti devono essere più chiari sul fatto che non sono più adatti per l'uso come documentazione per l'utente finale (sono tenuti solo a vantaggio degli implementatori di strumenti).
ncoghlan,

Risposte:


213

Progressi recenti

Marzo 2014 : buone notizie! Python 3.4 viene fornito con Pip. Pip è da tempo il gestore di pacchetti standard di fatto di Python. Puoi installare un pacchetto come questo:

pip install httpie

Wahey! Questa è la migliore caratteristica di qualsiasi versione di Python. Rende la ricchezza delle biblioteche della comunità accessibile a tutti. I principianti non sono più esclusi dall'uso delle librerie della comunità a causa della difficoltà proibitiva dell'installazione.

Tuttavia , rimangono molte frustrazioni eccezionali nell'esperienza di packaging di Python. Cumulativamente, rendono Python molto poco accogliente per i neofiti. Inoltre, la lunga storia di abbandono (vale a dire che non è stato spedito con un gestore di pacchetti per 14 anni da Python 2.0 a Python 3.3) ha danneggiato la comunità. Descrivo entrambi di seguito.

Frustrazione eccezionale

È importante capire che mentre gli utenti esperti sono in grado di aggirare queste frustrazioni, rappresentano barriere significative per le persone che non conoscono Python. In effetti, è probabile che la difficoltà e la scarsa cordialità dell'utente possano scoraggiare molti di loro.

Il sito Web di PyPI è di aiuto

Ogni lingua con un gestore di pacchetti ha un repository ufficiale (o quasi ufficiale) per consentire alla community di scaricare e pubblicare pacchetti. Python ha l'indice del pacchetto Python, PyPI. https://pypi.python.org/pypi

Confrontiamo le sue pagine con quelle di RubyGems e Npm (il gestore pacchetti Node).

  1. https://rubygems.org/gems/rails Pagina di RubyGems per il pacchettorails
  2. https://www.npmjs.org/package/express Pagina Npm per il pacchettoexpress
  3. https://pypi.python.org/pypi/simplejson/ Pagina PyPI per il pacchettosimplejson

Vedrai entrambe le pagine RubyGems e Npm iniziare con una descrizione di una riga del pacchetto, quindi istruzioni amichevoli su come installarlo.

Nel frattempo, guai a qualsiasi utente sfortunato di Python che naviga ingenuamente verso PyPI. Su https://pypi.python.org/pypi/simplejson/ , non troveranno istruzioni così utili. Vi è tuttavia un grande link verde "Download". Non è irragionevole seguirlo. Ah, fanno clic! Il loro browser scarica un .tar.gzfile. Molti utenti di Windows non possono nemmeno aprirlo, ma se perseverano potrebbero eventualmente estrarlo, quindi eseguirlo setup.pyed eventualmente con l'aiuto di Google setup.py install. Alcuni si arrenderanno e reinventeranno la ruota ..

Certo, tutto ciò è sbagliato. Il modo più semplice per installare un pacchetto è con un comando Pip. Ma PyPI non ha nemmeno menzionato Pip. Invece, li ha condotti lungo un percorso arcaico e noioso.

Errore: impossibile trovare vcvarsall.bat

Numpy è una delle librerie più popolari di Python. Prova a installarlo con Pip, ricevi questo messaggio di errore criptico:

Errore: impossibile trovare vcvarsall.bat

Cercare di risolvere questa è una delle domande più popolari su Stack Overflow: " errore: impossibile trovare vcvarsall.bat "

Poche persone hanno successo.

Per fare un confronto, nella stessa situazione, Ruby stampa questo messaggio, che spiega cosa sta succedendo e come risolverlo:

Aggiorna il tuo PERCORSO per includere strumenti di compilazione o scarica DevKit da http://rubyinstaller.org/downloads e segui le istruzioni su http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

La pubblicazione di pacchetti è difficile

Ruby e Nodejs vengono forniti con gestori di pacchetti completi, Gem (dal 2007) e Npm (dal 2011), e hanno coltivato comunità di condivisione incentrate su GitHub. Npm rende i pacchetti di pubblicazione facili come installarli, ha già 64k pacchetti . RubyGems elenca pacchetti da 72k . Il venerabile indice del pacchetto Python elenca solo 41k .

Storia

Volando di fronte al motto " batterie incluse ", Python è stato spedito senza un gestore di pacchetti fino al 2014.

Fino a Pip, lo standard di fatto era un comando easy_install. Era dolorosamente inadeguato. Non era necessario il comando per disinstallare i pacchetti.

Pip è stato un enorme miglioramento. Aveva la maggior parte delle caratteristiche della gemma di Ruby. Sfortunatamente, Pip era - fino a poco tempo fa - ironicamente difficile da installare. In effetti, il problema rimane una delle principali domande di Python su Stack Overflow: " Come installo pip su Windows? "


3
Per chiunque sia interessato, PEP 439 sta proponendo un modo per semplificare il processo di installazione di pip, anche se penso che questo PEP sia solo parte di una strategia più ampia che viene esaminata. Vedi anche la discussione qui .
Cartroo,

3
@Cartroo questa è una grande notizia! Python merita un gestore di pacchetti, spero che gli sviluppatori possano realizzarlo.
Colonnello Panic,

Assolutamente da tempo. Spero sicuramente che arrivi a Python 3.4, almeno. Sfortunatamente dubito fortemente che finirà con il back-port su 2.x, ma c'è almeno luce alla fine del tunnel. Speriamo solo che non sia un drago in arrivo ... (^_^)
Cartroo,

6
A difesa di Python, i linguaggi più recenti come Ruby e Node hanno avuto la fortuna di poter osservare gli errori delle lingue precedenti ed evitarli. Detto questo, vorrei davvero che la gestione dei pacchetti su Python ricevesse più amore e cura, quindi sono felice di vedere PEP 439 come sottolineato da @Cartroo.
Dennis,

Sono d'accordo che la gestione dei pacchetti di Ruby è una cosa meravigliosa dal mio punto di vista (dell'utente finale) .. gem install Xsembra funzionare su tutte le piattaforme. Quindi come sono riusciti a farlo per le gemme che richiedono la compilazione del codice C su Windows?
bsa

64

L'indice del pacchetto Python (PyPI) sembra essere standard:

  • Per installare un pacchetto: pip install MyProject
  • Per aggiornare un pacchetto pip install --upgrade MyProject
  • Per correggere una versione di un pacchettopip install MyProject==1.0

È possibile installare il gestore pacchetti come segue:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

Riferimenti:


3
Questa è la risposta moderna.
Gringo Suave,

6
Ho cercato su Internet per 20 minuti e questa risposta non era da nessuna parte. Grazie mille. Inoltre, ho seri dubbi sull'uso di Python se la documentazione è così male ... dovrebbe essere sulla pagina principale di Python o accessibile da google o qualcosa del genere
Chris J

63

E solo per fornire un contrasto, c'è anche pip .


2
Grazie! perché pip non è menzionato nella pagina di documentazione dei moduli python di installazione?
Tommy Chheng,

Nota che pip non supporta le uova, installa solo pacchetti sorgente. In generale, pip fa molte cose molto meglio di easy_install, ma è probabile che easy_install sia installato di default sulla maggior parte degli unix, al contrario di pip.
Jeffrey Harris,

8
@ Tommy Right! Se gli sviluppatori Python si preoccupassero dell'esperienza utente, spedirebbero Python con un gestore di pacchetti (come pip). Ruby viene spedito con Gem e Nodejs con Npm. stackoverflow.com/a/13445719/284795
Colonnello Panic

21

Come sviluppatore di Ruby e Perl e ragazzo di Python che apprende, non ho trovato easy_install o pip come l'equivalente di RubyGems o CPAN.

Tendo a mantenere i miei sistemi di sviluppo in esecuzione con le ultime versioni dei moduli mentre gli sviluppatori li aggiornano e congelano i miei sistemi di produzione a versioni prestabilite. Sia RubyGems che CPAN rendono facile trovare i moduli elencando ciò che è disponibile, quindi installarli e successivamente aggiornarli singolarmente o in blocco, se lo si desidera.

easy_install e pip rendono semplice l'installazione di un modulo UNA VOLTA che l'ho individuato tramite una ricerca nel browser o ne ho appreso in qualche altro modo, ma non mi diranno cosa è disponibile. Posso nominare esplicitamente il modulo da aggiornare, ma le app non mi diranno cosa è stato aggiornato né aggiorneranno tutto in blocco, se lo desidero.

Quindi, la funzionalità di base è disponibile in pip e easy_install ma mancano alcune funzionalità che mi piacerebbe vedere che li renderebbero più facili e intuitivi e alla pari con CPAN e RubyGems.


Questa risposta ora è davvero superata.
ncoghlan,


11

Almeno alla fine del 2014, dovrebbe essere presa in considerazione la distribuzione Anaconda Python di Continuum Analytics con il gestore dei pacchetti conda . Risolve la maggior parte dei gravi problemi che le persone incontrano con Python in generale (gestione di diverse versioni di Python, aggiornamento di versioni di Python, gestione dei pacchetti, ambienti virtuali, compatibilità Windows / Mac) in un unico download coerente.

Ti consente di fare praticamente tutto ciò che potresti desiderare con Python senza dover cambiare il sistema. La mia prossima soluzione preferita è pip + virtualenv, ma devi installare virtualenv nel tuo sistema Python (e il tuo sistema Python potrebbe non essere la versione che desideri), o compilare dal sorgente . Anaconda rende l'intero processo il clic di un pulsante, oltre ad aggiungere un sacco di altre funzionalità.


7

Sarebbe easy_install .


1
Se vuoi sottovalutare tutti coloro che hanno detto la pagina easy_install, controlla prima le date. Questo è stato un valido consiglio quando è stato dato quasi 7 anni fa . Non penso a noi risponditori che lo rivedremo regolarmente per aggiornarlo, quindi il downvoting è sciocco.
Kirk Strauser,


5

Non vedo né MacPortsHomebrew menzionati in altre risposte qui, ma dal momento che li vedo menzionati altrove su Stack Overflow per domande correlate, aggiungerò i miei $ 0,02 che molti sembrano considerare MacPorts come non solo un pacchetto gestore di pacchetti in generale (ad oggi elencano 16311 pacchetti / porte, 2931 corrispondenti a "python", anche se solo per Mac), ma anche come gestore di pacchetti decente (forse migliore) per pacchetti / moduli Python:

Domanda

"... qual è il metodo utilizzato dagli sviluppatori Mac Python per gestire i loro moduli?"

risposte

SciPy

"I Mac (a differenza di Linux) non hanno un gestore di pacchetti, ma ci sono un paio di famosi gestori di pacchetti che puoi installare. Macports ..."

Sto ancora discutendo se usare MacPorts da solo, ma al momento mi sto sporgendo in quella direzione.


1
Lo stesso Homebrew dice: Puoi installare i pacchetti Python con (easy_install obsoleto o) pip install <your_favorite_package>
Simone

4

Su Windows installa http://chocolatey.org/ quindi

choco install python

Apri una nuova finestra cmd con il PERCORSO aggiornato. Quindi, fallo

choco install pip

Dopo ciò puoi

pip install pyside
pip install ipython
...

Volevo rispondere a questo come un commento alla risposta di Thomas Bratt ma non ho abbastanza reputazione ...
hansvb

3

Dato che nessuno ha menzionato pipenv qui, vorrei descrivere le mie opinioni sul perché tutti dovrebbero usarlo per gestire i pacchetti python.

Come accennato da @ColonelPanic, ci sono diversi problemi con l' indice del pacchetto Python e anche con pip e virtualenv .

Pipenv risolve la maggior parte dei problemi con pip e offre anche funzionalità aggiuntive.

Funzionalità Pipenv

Pipenv ha lo scopo di sostituire pip e virtualenv, il che significa che pipenv creerà automaticamente un ambiente virtuale separato per ogni progetto, evitando così conflitti tra diverse versioni di python / versioni di pacchetti per diversi progetti.

  • Consente build veramente deterministiche, specificando facilmente solo ciò che si desidera.
  • Genera e controlla gli hash dei file per le dipendenze bloccate.
  • Installa automaticamente Pythons richiesti, se pyenv è disponibile.
  • Trova automaticamente il progetto a casa, ricorsivamente, cercando un Pipfile.
  • Genera automaticamente un Pipfile, se non esiste.
  • Crea automaticamente un virtualenv in una posizione standard.
  • Aggiunge / rimuove automaticamente i pacchetti in un Pipfile quando sono / installati.
  • Carica automaticamente i file .env, se presenti.

Se in precedenza hai lavorato a progetti Python, ti renderesti conto che queste funzionalità semplificano la gestione dei pacchetti.

Altri comandi

  • checkverifica la presenza di vulnerabilità della sicurezza e afferma che l'ambiente attuale soddisfa i requisiti PEP 508. ( che penso sia una grande funzionalità soprattutto dopo questo - Pacchetti dannosi su PyPi )
  • graph ti mostrerà un grafico delle dipendenze, delle dipendenze installate.

Puoi leggere di più qui - Pipenv .

Installazione

Puoi trovare la documentazione di installazione qui

PS: Se ti è piaciuto lavorare con le richieste del pacchetto Python , ti farebbe piacere sapere che pipenv è dello stesso sviluppatore Kenneth Reitz



0

La poesia è ciò che stai cercando. Si occupa della gestione delle dipendenze, degli ambienti virtuali, della corsa.

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.