Qual è la differenza tra un modulo e una libreria in Python?


87

Ho un background in Java e sono nuovo in Python. Voglio assicurarmi di aver compreso correttamente la terminologia Python prima di andare avanti.

La mia comprensione di un modulo è: uno script che può essere importato da molti script, per facilitare la lettura. Proprio come in java hai una classe e quella classe può essere importata da molte altre classi.

La mia comprensione di una libreria è: Una libreria contiene molti moduli che sono separati dal suo utilizzo.

La mia domanda è: le librerie sono come i pacchetti, in cui hai un pacchetto ad esempio chiamato food, allora:

  • chocolate.py
  • sweets.py
  • biscuts.py

sono contenuti nella foodconfezione?

Oppure le biblioteche usano i pacchetti, quindi se avessimo un altro pacchetto drink:

  • milk.py
  • juice.py

contenuto nella confezione. Il librarycontiene due pacchetti?

Inoltre, un'interfaccia di programmazione dell'applicazione (API) di solito contiene un set di librerie, che si trova in cima alla gerarchia:

  1. API
  2. Biblioteca
  3. Pacchetto
  4. Modulo
  5. Script

Quindi un'API sarà composta da tutto 2-5?


3
Python usa il termine "pacchetto" e non molto "libreria" (a parte la libreria standard).
John Zwinck

Risposte:


79

Dal tutorial di Python - Moduli

  • Modulo :

    Un modulo è un file contenente definizioni e istruzioni Python. Il nome del file è il nome del modulo con il suffisso .pyaggiunto.

  • Pacchetto :

    I pacchetti sono un modo per strutturare lo spazio dei nomi dei moduli di Python utilizzando "nomi di moduli puntati".

Se leggi la documentazione per la importdichiarazione fornisce maggiori dettagli, ad esempio:

Python ha un solo tipo di oggetto modulo e tutti i moduli sono di questo tipo, indipendentemente dal fatto che il modulo sia implementato in Python, C o qualcos'altro. Per aiutare a organizzare i moduli e fornire una gerarchia di nomi, Python ha un concetto di pacchetti.

Puoi pensare ai pacchetti come alle directory su un file system e ai moduli come ai file all'interno di directory, ma non prendere questa analogia troppo alla lettera poiché non è necessario che pacchetti e moduli provengano dal file system. Ai fini di questa documentazione, useremo questa comoda analogia di directory e file. Come le directory del file system, i pacchetti sono organizzati gerarchicamente e i pacchetti stessi possono contenere sottopacchetti, nonché moduli regolari.

È importante tenere presente che tutti i pacchetti sono moduli, ma non tutti i moduli sono pacchetti. In altre parole, i pacchetti sono solo un tipo speciale di modulo. In particolare, qualsiasi modulo che contiene un __path__attributo è considerato un pacchetto.

Quindi il termine si moduleriferisce a un'entità specifica: è una classe le cui istanze sono gli moduleoggetti che usi nei programmi python. È anche usato, per analogia, per fare riferimento al file nel file system dal quale queste istanze "vengono create".

Il termine script viene utilizzato per fare riferimento a un modulo il cui scopo è essere eseguito. Ha lo stesso significato di "programma" o "applicazione", ma di solito è usato per descrivere programmi semplici e piccoli (cioè un singolo file con al massimo alcune centinaia di righe). Scrivere uno script richiede pochi minuti o poche ore.

Il termine libreria è semplicemente un termine generico per un gruppo di codice progettato con l'obiettivo di essere utilizzabile da molte applicazioni. Fornisce alcune funzionalità generiche che possono essere utilizzate da applicazioni specifiche.

Quando un modulo / pacchetto / qualcos'altro viene "pubblicato" le persone spesso lo chiamano una libreria. Spesso le librerie contengono un pacchetto o più pacchetti correlati, ma potrebbe essere anche un singolo modulo.

Le biblioteche di solito non forniscono alcuna funzionalità specifica, cioè non puoi "eseguire una libreria".

L'API può avere significati diversi a seconda del contesto. Per esempio:

  • può definire un protocollo come l' API DB o il protocollo buffer .
  • può definire come interagire con un'applicazione (es. il Python/C API)
  • quando è correlato a una libreria / pacchetto è semplicemente l'interfaccia fornita da quella libreria per la sua funzionalità (insieme di funzioni / classi / costanti ecc.)

In ogni caso un'API non è codice python. È una descrizione che può essere più o meno formale.


40

Solo pacchetto e modulo hanno un significato ben definito specifico di Python.

  1. Un API non è un insieme di codice per sé - è più come una specifica "protocollo" come le varie parti (solitamente librerie) comunicano tra loro. Ci sono alcune importanti API "standard" in python. Ad esempio l' API DB

  2. A mio parere, una libreria è tutto ciò che non è un'applicazione - in Python, una libreria è un modulo - di solito con sottomoduli . Lo scopo di una libreria è abbastanza variabile - per esempio la libreria standard python è vasta (con un bel po 'di sottomoduli) mentre ci sono molte librerie a scopo singolo nel PyPi, ad esempio un backport di collections.OrderedDictfor py <2.7

  3. Un pacchetto è una raccolta di moduli python in uno spazio dei nomi comune. In pratica uno viene creato inserendo più moduli python in una directory con un __init__.pymodulo speciale (file).

  4. Un modulo è un singolo file di codice Python che deve essere importato . Questa è un po 'una semplificazione poiché in pratica molti moduli rilevano quando vengono eseguiti come script e fanno qualcosa di speciale in quel caso.

  5. Uno script è un singolo file di codice Python che deve essere eseguito come programma "principale".

  6. Se hai un set di codice che si estende su più file, probabilmente hai un'applicazione al posto dello script.


1

Libreria: è una raccolta di moduli.

(La libreria contiene moduli integrati (scritti in C) + moduli scritti in python).

Modulo: ciascuno di un insieme di parti standardizzate o unità indipendenti che possono essere utilizzate per costruire una struttura più complessa.

Parlando in linguaggio informale, Un modulo è un insieme di linee di codice che vengono utilizzati per uno scopo specifico e possono essere utilizzate in altri programmi come è, per evitare DRY ( D on't R ipetere Y ourself) come squadra e concentrandosi su requisito principale. fonte

L'API è un'interfaccia per altre applicazioni per interagire con la tua libreria senza avere accesso diretto.

Il pacchetto è fondamentalmente una directory con file.

Script significa serie di comandi all'interno di un singolo file.


0

Cercherò di rispondere a questa domanda senza usare termini che userebbero i primi principianti, e spiegherò perché o come li usavano in modo diverso, insieme all'uso più "ufficiale" e / o più compreso o uniforme dei termini.

Può essere fonte di confusione, e mi sono confuso pensando troppo, quindi non pensarci troppo. Comunque il contesto è molto importante.

Libreria - Molto spesso si farà riferimento alla libreria generale o ad un'altra raccolta creata con un formato e un utilizzo simili. La Biblioteca generale è la somma di moduli "standard", popolari e ampiamente utilizzati, che possono essere pensati come strumenti a file singolo, per ora o scorciatoie che rendono le cose possibili o più veloci. La libreria generale è un'opzione che la maggior parte delle persone abilita durante l'installazione di Python. Poiché ha questo nome "Python General Library", viene spesso utilizzato con strutture e idee simili. La strega è semplicemente avere un mucchio di moduli, forse anche pacchetti raggruppati insieme, di solito in un elenco. L'elenco di solito serve per scaricarli. Generalmente si tratta solo di file correlati, con interessi simili. Questo è il modo più semplice per descriverlo.

Modulo : un modulo fa riferimento a un file. Il file ha uno script "in esso" e il nome del file è il nome del modulo, i file Python terminano con .py. Tutto il file contiene è codice che eseguito insieme fa accadere qualcosa, usando funzioni, stringhe ecc. I moduli principali che probabilmente vedi più spesso sono popolari perché sono moduli speciali che possono ottenere informazioni da altri file / moduli. È fonte di confusione perché il nome del file e del modulo sono uguali e rilascia semplicemente .py. In realtà è solo codice che puoi usare come scorciatoia scritta da qualcuno per rendere qualcosa di più semplice o possibile.

Pacchetto - Questo è un termine usato generalmente a volte, sebbene il contesto faccia la differenza. L'uso più comune dalla mia esperienza è più moduli (o file) raggruppati insieme. Perché sono raggruppati insieme può essere per alcuni motivi, cioè quando il contesto è importante. Questi sono i modi in cui ho notato il termine pacchetto (i)Usato. Sono un gruppo di moduli scaricati, creati e / o memorizzati. Che può essere tutto vero, o solo 1, ma in realtà è solo un file che fa riferimento ad altri file, che devono essere nella struttura o nel formato corretti, e l'intera somma è il pacchetto stesso, installato o potrebbe essere stato incluso nel libreria generale python. Un pacchetto può contenere moduli (file .py) perché dipendono l'uno dall'altro e talvolta potrebbero non funzionare correttamente o non funzionare affatto. C'è sempre un obiettivo comune di ogni parte (modulo / file) di un pacchetto e la somma totale di tutte le parti è il pacchetto stesso.

Molto spesso in Python i pacchetti sono moduli, perché il nome del pacchetto è il nome del modulo che viene utilizzato per connettere tutti i pezzi. Quindi puoi inserire un pacchetto perché è un modulo, gli permette anche di invocare altri moduli, che non sono pacchetti perché eseguono solo una certa funzione, o l'attività non coinvolge altri file. I pacchetti hanno un obiettivo e ogni modulo lavora insieme per raggiungere l'obiettivo finale.

La maggior parte della confusione deriva da un semplice file nome file o prefisso di un file, utilizzato come nome del modulo e poi di nuovo come nome del pacchetto.

Ricorda che è possibile installare moduli e pacchetti. Libreria è solitamente un termine generico per elencare o formattare un gruppo di moduli e pacchetti. Proprio come la biblioteca generale di Pythons. Una gerarchia non funzionerebbe, le API non appartengono realmente e se lo facessi potrebbero essere ovunque e ogni software che coinvolge Script, Modulo e Pacchetti, essendo la libreria worl una parola così generale, facilmente applicabile a molte cose, rende anche API in grado sedersi sopra o sotto. Alcuni moduli possono essere basati su altro codice, e questa è l'unica volta che penso si riferirebbe a una discussione relativa a Python puro.

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.