Qual é a diferença entre um módulo e uma biblioteca em Python?

86

Tenho experiência em Java e sou novo em Python. Quero ter certeza de que entendi corretamente a terminologia do Python antes de prosseguir.

Meu entendimento de um módulo é: um script que pode ser importado por vários scripts, para tornar a leitura mais fácil. Assim como em java, você tem uma classe, e essa classe pode ser importada por muitas outras classes.

Meu entendimento de uma biblioteca é: Uma biblioteca contém muitos módulos que são separados por seu uso.

Minha pergunta é: as bibliotecas são como pacotes, onde você tem um pacote, por exemplo food, chamado , então:

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

estão contidos no foodpacote?

Ou as bibliotecas usam pacotes, então se tivéssemos outro pacote drink:

  • milk.py
  • suco.py

contido no pacote. O librarycontém dois pacotes?

Além disso, uma interface de programação de aplicativo (API) geralmente contém um conjunto de bibliotecas no topo da hierarquia:

  1. API
  2. Biblioteca
  3. Pacote
  4. Módulo
  5. Roteiro

Portanto, uma API consistirá de 2 a 5?

palhaço
fonte
3
Python usa o termo "pacote" e não muito "biblioteca" (exceto a Biblioteca Padrão).
John Zwinck,

Respostas:

75

Do Tutorial Python - Módulos

  • Módulo :

    Um módulo é um arquivo que contém definições e instruções do Python. O nome do arquivo é o nome do módulo com o sufixo .pyanexado.

  • Pacote :

    Os pacotes são uma forma de estruturar o namespace do módulo Python usando “nomes de módulo pontilhados”.

Se você leu a documentação para a importdeclaração dá mais detalhes, por exemplo:

Python tem apenas um tipo de objeto de módulo , e todos os módulos são desse tipo, independentemente de o módulo ser implementado em Python, C ou outro. Para ajudar a organizar os módulos e fornecer uma hierarquia de nomenclatura, o Python possui um conceito de pacotes.

Você pode pensar em pacotes como diretórios em um sistema de arquivos e módulos como arquivos dentro de diretórios, mas não tome essa analogia muito literalmente, pois os pacotes e módulos não precisam se originar do sistema de arquivos. Para os fins desta documentação, usaremos esta analogia conveniente de diretórios e arquivos. Como os diretórios do sistema de arquivos, os pacotes são organizados hierarquicamente e os próprios pacotes podem conter subpacotes, bem como módulos regulares.

É importante ter em mente que todos os pacotes são módulos, mas nem todos os módulos são pacotes. Ou dito de outra forma, os pacotes são apenas um tipo especial de módulo. Especificamente, qualquer módulo que contém um __path__atributo é considerado um pacote.

Portanto, o termo modulese refere a uma entidade específica: é uma classe cujas instâncias são os moduleobjetos que você usa em programas python. Também é usado, por analogia, para se referir ao arquivo no sistema de arquivos a partir do qual essas instâncias "são criadas".

O termo script é usado para se referir a um módulo cujo objetivo é ser executado. Tem o mesmo significado que "programa" ou "aplicativo", mas geralmente é usado para descrever programas simples e pequenos (ou seja, um único arquivo com no máximo algumas centenas de linhas). Escrever um script leva minutos ou algumas horas.

O termo biblioteca é simplesmente um termo genérico para um grupo de código que foi projetado com o objetivo de ser utilizável por muitos aplicativos. Ele fornece algumas funcionalidades genéricas que podem ser usadas por aplicativos específicos.

Quando um módulo / pacote / algo mais é "publicado", as pessoas costumam se referir a ele como uma biblioteca. Freqüentemente, as bibliotecas contêm um pacote ou vários pacotes relacionados, mas podem ser até mesmo um único módulo.

As bibliotecas geralmente não fornecem nenhuma funcionalidade específica, ou seja, você não pode "executar uma biblioteca".

A API pode ter significados diferentes dependendo do contexto. Por exemplo:

  • pode definir um protocolo como a API DB ou o protocolo de buffer .
  • pode definir como interagir com um aplicativo (por exemplo, o Python/C API)
  • quando relacionado a uma biblioteca / pacote, é simplesmente a interface fornecida por essa biblioteca para sua funcionalidade (conjunto de funções / classes / constantes etc.)

Em qualquer caso, uma API não é um código python. É uma descrição que pode ser mais ou menos formal.

Bakuriu
fonte
37

Apenas pacote e módulo têm um significado bem definido específico para Python.

  1. Uma API não é uma coleção de código em si - é mais como uma especificação de "protocolo" como várias partes (geralmente bibliotecas) se comunicam umas com as outras. Existem algumas APIs "padrão" notáveis ​​em python. Por exemplo, a API DB

  2. Na minha opinião, uma biblioteca é qualquer coisa que não seja um aplicativo - em python, uma biblioteca é um módulo - geralmente com submódulos . O escopo de uma biblioteca é bastante variável - por exemplo, a biblioteca padrão do python é vasta (com alguns submódulos), embora haja muitas bibliotecas de propósito único no PyPi, por exemplo, um backport de collections.OrderedDictfor py <2.7

  3. Um pacote é uma coleção de módulos Python em um namespace comum. Na prática, um é criado colocando vários módulos Python em um diretório com um __init__.pymódulo especial (arquivo).

  4. Um módulo é um único arquivo de código Python que deve ser importado . Isso é uma simplificação, pois na prática alguns módulos detectam quando são executados como script e fazem algo especial nesse caso.

  5. Um script é um único arquivo de código python que deve ser executado como o programa 'principal'.

  6. Se você tem um conjunto de código que abrange vários arquivos, provavelmente tem um aplicativo em vez de um script.

Kimvais
fonte
1

Biblioteca: é uma coleção de módulos.

(A biblioteca contém módulos integrados (escritos em C) + módulos escritos em python).

Módulo: Cada um de um conjunto de peças padronizadas ou unidades independentes que podem ser usadas para construir uma estrutura mais complexa.

Falando em linguagem informal, um módulo é um conjunto de linhas de código que são usadas para uma finalidade específica e podem ser usadas em outros programas como está, para evitar DRY ( D on't R epeat Y ourself) como uma equipe e com foco em requisito principal. fonte

API é uma interface para outros aplicativos interagirem com sua biblioteca sem ter acesso direto.

O pacote é basicamente um diretório com arquivos.

Script significa série de comandos em um único arquivo.

Premraj
fonte
0

Tentarei responder a isso sem usar termos que os primeiros iniciantes usariam, e explicarei por que ou como eles usaram de forma diferente, junto com o uso mais "oficial" e / ou mais compreendido ou uniforme dos termos.

Pode ser confuso, e eu me confundi pensando muito, então não pense muito sobre isso. De qualquer forma, o contexto é muito importante.

Biblioteca - na maioria das vezes se refere à biblioteca geral ou outra coleção criada com um formato e uso semelhantes. A Biblioteca Geral é a soma de Módulos 'padrão', populares e amplamente usados, que podem ser considerados como ferramentas de arquivo único, por enquanto ou atalhos que tornam as coisas possíveis ou mais rápidas. A biblioteca geral é uma opção que a maioria das pessoas habilita ao instalar o Python. Por ter esse nome "Biblioteca Geral do Python", é freqüentemente usada com estruturas e ideias semelhantes. Witch é simplesmente ter um monte de Módulos, talvez até pacotes agrupados, geralmente em uma lista. A lista geralmente é para baixá-los. Geralmente são apenas arquivos relacionados, com interesses semelhantes. Essa é a maneira mais fácil de descrever.

Módulo - um módulo se refere a um arquivo. O arquivo tem um script 'nele' e o nome do arquivo é o nome do módulo, os arquivos Python terminam com .py. Tudo o que o arquivo contém é código executado em conjunto para que algo aconteça, usando funções, strings etc. Os módulos principais que você provavelmente vê com mais frequência são populares porque são módulos especiais que podem obter informações de outros arquivos / módulos. É confuso porque o nome do arquivo e do módulo são iguais e apenas eliminam o .py. Na verdade, é apenas um código que você pode usar como um atalho escrito por alguém para tornar algo mais fácil ou possível.

Pacote - Este é um termo geralmente usado às vezes, embora o contexto faça uma diferença. O uso mais comum de minha experiência são vários módulos (ou arquivos) que são agrupados. O motivo pelo qual eles estão agrupados pode ser por alguns motivos, ou seja, quando o contexto é importante. Estas são as maneiras que percebi no (s) termo (s) pacote (s)usava. Eles são um grupo de módulos baixados, criados e / ou armazenados. O que pode ser verdade, ou apenas 1, mas na verdade é apenas um arquivo que faz referência a outros arquivos, que precisam estar na estrutura ou formato correto, e toda essa soma é o próprio pacote, instalado ou pode ter sido incluído no biblioteca geral do python. Um pacote pode conter módulos (arquivos .py) porque eles dependem uns dos outros e às vezes podem não funcionar corretamente ou nem funcionar. Sempre há um objetivo comum para cada parte (módulo / arquivo) de um pacote, e a soma total de todas as partes é o próprio pacote.

Na maioria das vezes, em Python, os Pacotes são Módulos, porque o nome do pacote é o nome do módulo que é usado para conectar todas as peças. Então você pode inserir um pacote porque é um módulo, também permite que ele chame outros módulos, que não são pacotes porque eles desempenham apenas uma determinada função, ou a tarefa não envolve outros arquivos. Os pacotes têm um objetivo e cada módulo trabalha em conjunto para atingir esse objetivo final.

A maior parte da confusão vem de um simples nome de arquivo de arquivo ou prefixo de um arquivo, usado como o nome do módulo e novamente o nome do pacote.

Lembre-se de que os módulos e pacotes podem ser instalados. Biblioteca é geralmente um termo genérico para listar ou formatar um grupo de módulos e pacotes. Muito parecido com a biblioteca geral Pythons. Uma hierarquia não funcionaria, as APIs não pertencem realmente, e se você pertencesse, elas poderiam estar em qualquer lugar e em todos os ware envolvendo Script, Módulo e Pacotes, a biblioteca worl sendo uma palavra tão geral, facilmente aplicada a muitas coisas, também torna a API capaz sentar acima ou abaixo disso. Alguns módulos podem ser baseados em outro código, e essa é a única vez que acho que se relacionaria a uma discussão puramente relacionada ao Python.

Mizat
fonte