O que é um ovo Python?

532

Eu sou novo no Python e estou apenas tentando entender como seus pacotes funcionam. Presumivelmente, "ovos" são algum tipo de mecanismo de empacotamento, mas qual seria uma visão geral rápida de qual papel eles desempenham e pode haver algumas informações sobre por que são úteis e como criá-los?

Bialecki
fonte

Respostas:

527

Nota: A embalagem do ovo foi substituída pela embalagem da roda.

Mesmo conceito que um .jararquivo em Java, é um .ziparquivo com alguns arquivos de metadados renomeados .eggpara distribuir código como pacotes configuráveis.

Especificamente: A estrutura interna dos ovos Python

Um "ovo Python" é uma estrutura lógica que incorpora o lançamento de uma versão específica de um projeto Python, compreendendo seu código, recursos e metadados. Existem vários formatos que podem ser usados ​​para codificar fisicamente um ovo Python e outros podem ser desenvolvidos. No entanto, um princípio fundamental dos ovos Python é que eles devem ser descobertos e importáveis. Ou seja, deve ser possível para um aplicativo Python descobrir de maneira fácil e eficiente quais óvulos estão presentes em um sistema e garantir que o conteúdo dos óvulos desejados seja importável.

O .eggformato é adequado à distribuição e à fácil desinstalação ou atualização de código, uma vez que o projeto é essencialmente independente em um único diretório ou arquivo, sem mistura com o código ou os recursos de qualquer outro projeto. Também possibilita a instalação simultânea de várias versões de um projeto, para que programas individuais possam selecionar as versões que desejam usar.

jefe2000
fonte
82

O .eggarquivo é um formato de distribuição para pacotes Python. É apenas uma alternativa para uma distribuição de código fonte ou Windows exe. Mas observe que, para puro Python, o .eggarquivo é completamente multiplataforma.

O .eggarquivo em si é essencialmente um .ziparquivo. Se você alterar a extensão para “ zip”, poderá ver que ela terá pastas dentro do arquivo morto.

Além disso, se você tiver um .eggarquivo, poderá instalá-lo como um pacote usandoeasy_install

Exemplo: Para criar um .eggarquivo para um diretório, digamos mymathque possa ter vários scripts python, execute a seguinte etapa:

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

Então, a partir do terminal, faça:

 $ python setup.py bdist_egg

Isso gerará muitas saídas, mas quando estiver concluído, você verá três novas pastas: build , dist e mymath.egg-info . A única pasta com a qual nos preocupamos é a pasta dist, na qual você encontrará seu .eggarquivo, mymath-0.1-py3.5.eggcom o seu número de versão padrão do python (instalação) (o meu aqui: 3.5)

Fonte: blog da biblioteca Python

kmario23
fonte
3

Os ovos Python são uma maneira de agrupar informações adicionais com um projeto Python, que permite que as dependências do projeto sejam verificadas e satisfeitas em tempo de execução, além de permitir que os projetos forneçam plug-ins para outros projetos. Existem vários formatos binários que incorporam os ovos, mas o mais comum é o formato zipfile '.egg', porque é conveniente para a distribuição de projetos. Todos os formatos são compatíveis, incluindo dados específicos de pacotes, metadados para todo o projeto, extensões C e código Python.

A maneira mais fácil de instalar e usar os ovos Python é usar o gerenciador de pacotes Python "Easy Install", que irá encontrar, baixar, compilar e instalar ovos para você; tudo o que você faz é informar o nome (e, opcionalmente, a versão) do (s) projeto (s) Python que você deseja usar.

Os ovos Python podem ser usados ​​com o Python 2.3 ou superior e podem ser criados usando o pacote setuptools (consulte a caixa de areia do Python Subversion para obter o código-fonte ou a página EasyInstall para obter as instruções de instalação atuais).

Os principais benefícios dos ovos Python são:

  • Eles habilitam ferramentas como o gerenciador de pacotes Python "Easy Install"

  • arquivos .egg são um formato de "instalação zero" para um pacote Python; nenhuma etapa de compilação ou instalação é necessária, basta colocá-los em PYTHONPATH ou sys.path e usá-los (pode exigir o tempo de execução instalado se extensões C ou arquivos de dados forem usados)

  • Eles podem incluir metadados do pacote, como os outros ovos dos quais eles dependem

  • Eles permitem que "pacotes de namespace" (pacotes que contêm apenas outros pacotes) sejam divididos em distribuições separadas (por exemplo, zope. , Twisted. , Peak. * Pacotes podem ser distribuídos como ovos separados, diferentemente dos pacotes normais, que sempre devem ser colocados sob o mesmo diretório pai. Isso permite que agora os enormes pacotes monolíticos sejam distribuídos como componentes separados.)

  • Eles permitem que aplicativos ou bibliotecas especifiquem a versão necessária de uma biblioteca, para que você possa, por exemplo, exigir ("Internet torcida> = 2.0") antes de fazer uma importação twisted.internet.

  • Eles são um ótimo formato para distribuir extensões ou plugins para aplicativos e estruturas extensíveis (como o Trac, que usa egg para plugins a partir de 0.9b1), porque o egg runtime fornece APIs simples para localizar ovos e encontrar seus pontos de entrada anunciados (semelhante ao conceito de "ponto de extensão" do Eclipse).

Há também outros benefícios que podem advir de um formato padronizado, semelhante aos benefícios do formato "jar" do Java.

prosti
fonte
python egg é uma versão específica? ou seja, ovo construído para 2 vs 3? ou mesmo versões menores? ex 2.x
ealeon 21/11/19
1

"Egg" é um formato de distribuição importável de arquivo único para projetos relacionados ao Python.

"O Guia Rápido para Ovos Python" observa que "Os ovos são para Pythons como os Jars são para Java ..."

Os ovos são realmente mais ricos que os frascos; eles contêm metadados interessantes, como detalhes de licenciamento, dependências de lançamento etc.

Aerin
fonte
O link está esgotado a partir de hoje.
Perfi
@Perfi Link funciona para mim.
Klik 8/01
Engraçado como funciona às vezes! Está de volta online. Fico feliz em vê-lo :)
Perfi 08/01