Che cos'è un uovo Python?


532

Sono nuovo di Python e sto solo cercando di capire come funzionano i suoi pacchetti. Presumibilmente le "uova" sono una sorta di meccanismo di confezionamento, ma quale sarebbe una rapida panoramica del ruolo che svolgono e potrebbero essere alcune informazioni sul perché sono utili e su come crearle?

Risposte:


527

Nota: l' imballaggio delle uova è stato sostituito dall'imballaggio delle ruote.

Stesso concetto di un .jarfile in Java, è un .zipfile con alcuni file di metadati rinominati .egg, per distribuire il codice in bundle.

In particolare: la struttura interna delle uova di pitone

Un "uovo Python" è una struttura logica che incarna il rilascio di una versione specifica di un progetto Python, comprendente il suo codice, risorse e metadati. Esistono diversi formati che possono essere utilizzati per codificare fisicamente un uovo Python e altri possono essere sviluppati. Tuttavia, un principio chiave delle uova di Python è che dovrebbero essere individuabili e impraticabili. Cioè, dovrebbe essere possibile per un'applicazione Python scoprire facilmente ed efficacemente quali uova sono presenti su un sistema e garantire che il contenuto delle uova desiderato sia improprio.

Il .eggformato è adatto alla distribuzione e alla facile disinstallazione o aggiornamento del codice, poiché il progetto è essenzialmente autonomo all'interno di una singola directory o file, non combinato con il codice o le risorse di altri progetti. Inoltre, è possibile installare contemporaneamente più versioni di un progetto, in modo tale che i singoli programmi possano selezionare le versioni che desiderano utilizzare.


82

Il .eggfile è un formato di distribuzione per i pacchetti Python. È solo un'alternativa alla distribuzione del codice sorgente o a Windows exe. Ma nota che per puro Python, il .eggfile è completamente multipiattaforma.

Il .eggfile stesso è essenzialmente un .zipfile. Se si modifica l'estensione su “ zip”, si può vedere che avrà cartelle all'interno dell'archivio.

Inoltre, se si dispone di un .eggfile, è possibile installarlo come pacchetto utilizzandoeasy_install

Esempio: per creare un .eggfile per una directory dire mymathche può avere diversi script Python, procedere come segue:

# setup.py
from setuptools import setup, find_packages
setup(
    name = "mymath",
    version = "0.1",
    packages = find_packages()
    )

Quindi, dal terminale:

 $ python setup.py bdist_egg

Questo genererà molti output, ma una volta completato vedrai che hai tre nuove cartelle: build , dist e mymath.egg-info . L'unica cartella che ci interessa è la cartella dist dove troverai il tuo .eggfile, mymath-0.1-py3.5.eggcon il tuo numero di versione di Python (installazione) predefinito (il mio qui: 3.5)

Fonte: blog della libreria Python


3

Le uova Python sono un modo per raggruppare informazioni aggiuntive con un progetto Python, che consente di verificare e soddisfare le dipendenze del progetto in fase di esecuzione, oltre a consentire ai progetti di fornire plugin per altri progetti. Esistono diversi formati binari che incarnano le uova, ma il più comune è il formato zipfile '.egg', perché è conveniente per distribuire progetti. Tutti i formati supportano inclusi dati specifici del pacchetto, metadati a livello di progetto, estensioni C e codice Python.

Il modo più semplice per installare e usare le uova di Python è usare il gestore di pacchetti Python "Easy Install", che troverà, scaricherà, costruirà e installerà le uova per te; tutto ciò che fai è dirgli il nome (e, facoltativamente, la versione) dei progetti Python che vuoi usare.

Le uova Python possono essere utilizzate con Python 2.3 e versioni successive e possono essere create utilizzando il pacchetto setuptools (vedere la sandbox di Python Subversion per il codice sorgente o la pagina EasyInstall per le istruzioni di installazione correnti).

I principali vantaggi di Python Eggs sono:

  • Consentono strumenti come il gestore pacchetti Python "Easy Install"

  • I file .egg sono un formato "zero installazione" per un pacchetto Python; non è necessario alcun passaggio di compilazione o installazione, basta metterli su PYTHONPATH o sys.path e usarli (potrebbe essere necessario installare il runtime se si utilizzano estensioni C o file di dati)

  • Possono includere metadati del pacchetto, come le altre uova da cui dipendono

  • Consentono di "dividere i pacchetti dello spazio dei nomi" (pacchetti che contengono solo altri pacchetti) in distribuzioni separate (ad es. Zope. , Twisted. , Peak. * I pacchetti possono essere distribuiti come uova separate, a differenza dei normali pacchetti che devono sempre essere posizionati sotto lo stesso directory principale. Ciò consente a quelli che ora sono enormi pacchetti monolitici di essere distribuiti come componenti separati.)

  • Consentono alle applicazioni o alle librerie di specificare la versione necessaria di una libreria, in modo da poter richiedere ("Twisted-Internet> = 2.0") prima di eseguire un'importazione twisted.internet.

  • Sono un ottimo formato per la distribuzione di estensioni o plug-in ad applicazioni e framework estensibili (come Trac, che utilizza le uova per i plug-in a partire da 0.9b1), perché il runtime egg fornisce API semplici per individuare le uova e trovare i loro punti di accesso pubblicizzati (simili al concetto di "estensione punto" di Eclipse).

Ci sono anche altri vantaggi che possono derivare dall'avere un formato standardizzato, simile ai vantaggi del formato "jar" di Java.


Python Egg è una versione specifica? cioè uovo costruito per 2 vs 3? o anche versioni minori? ex 2.x
ealeon

1

"Egg" è un formato di distribuzione imponibile a file singolo per progetti relativi a Python.

"La guida rapida alle uova di Python" osserva che "Le uova sono per Python come i vasetti sono per Java ..."

Le uova in realtà sono più ricche dei barattoli; contengono metadati interessanti come dettagli sulle licenze, dipendenze di rilascio, ecc.


Il link è morto a partire da oggi.
Perfi,

@Perfi Link funziona per me.
Klik,

Divertente come funziona a volte! È tornato online. Sono contento di vederlo :)
Perfi
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.