2015-07-14 42 views
18

Il vantaggio delle ruote sulle uova è chiaro (vedere la sezione perché non uova? https://pypi.python.org/pypi/wheel).Confezione Python: ruote vs tarball (tar.gz)

Tuttavia, non mi è del tutto chiaro quale sia il vantaggio dell'uso delle ruote rispetto allo tar.gz. Potrei mancare qualcosa di ovvio come "sono gli stessi". Come ho visto entrambi possono essere installati direttamente usando pip (anche in Windows), hanno dimensioni simili e quando la confezione richiede uno sforzo simile. Mi sembra il tipo di domande che si possono ottenere quando si giustifica una metodologia di packaging.

MODIFICA: Abbiamo appena trovato un esempio in cui tar.gz potrebbe essere migliore delle ruote. CherryPy (https://pypi.python.org/pypi/CherryPy) fornisce solo ruote per Python 3.x, quindi se si desidera avere un repository locale per servire le dipendenze di CherryPy per Python 2.7 e 3.x, sembra più sensato archiviare il tarball. È corretto? (Solo per aggiungere un paio di giustificazione "case-based" per la discussione)

risposta

6

Questa risposto per me (direttamente dal PEP ruota):

Python ha bisogno di un formato di pacchetto che è più facile da installare rispetto sdist. I pacchetti sdist di Python sono definiti e richiedono i sistemi di configurazione di distroils e setuptools, eseguendo codice arbitrario per compilare e installare, e ricompilare, codice solo per poter essere installato in un nuovo virtualenv . Questo sistema di installazione di build conflating è lento, difficile da mantenere e ostacola l'innovazione in entrambi i sistemi di generazione e gli installer.

La ruota tenta di risolvere questi problemi fornendo un'interfaccia più semplice tra il sistema di generazione e il programma di installazione. Il formato del pacchetto binario ruota consente agli installatori di non conoscere il sistema di build, di risparmiare tempo amortizzando la compilazione su molte installazioni, e rimuove la necessità di installare un sistema di build nell'ambiente target .

https://www.python.org/dev/peps/pep-0427/#rationale

Nota i tarball stiamo parlando di sono ciò che sono indicati come "sdists" di cui sopra.

1

Da Python Wheels

Vantaggi di ruote

• Installazione più rapida per Python puro e pacchetti di estensione C nativi.
• Evita l'esecuzione di codice arbitrario per l'installazione. (Evita setup.py)
• L'installazione di un'estensione C non richiede un compilatore su Windows o OS X.
• Consente il caching migliore per il test e l'integrazione continua.
• Crea file .pyc come parte dell'installazione per assicurarsi che corrispondano all'interprete python utilizzato.
• Installazioni più coerenti su piattaforme e macchine.

Assicurarsi che la ruota sia installata.

pip install wheel 
+0

sono tutti quei punti che cose che i tarball non possono fare? (Potrei facilmente dire che hai bisogno di un software "extra" per ruote in una macchina Linux mentre tarball non lo farebbe per esempio) –

+0

Non so sempre cosa c'è in un tarball, anche aprendo l'archivio, nella stessa misura in cui io sapere cosa c'è in un file .whl che dovrebbe "funzionare", e questo è un grande vantaggio per me quando uso pip che spesso non "funziona". – karel

+1

Potresti andare un po 'più a fondo su questo punto? come la vedo io, quando guardo una ruota e un tarball, entrambi hanno il pacco chiuso dentro e un po 'di magia extra per il packaging. Anche io posso dire che nel tarball posso vedere la licenza proprio lì mentre non riesco a trovarla nella ruota (un punto abbastanza importante quando si fa un softwr commerciale). Entrambi potrebbero nascondere qualcosa di indesiderabile, ecco perché non ottengo il "solo lavoro". (A proposito, mi piacciono le ruote ma ho bisogno di una giustificazione valida) –