Qu'est-ce qu'un œuf en Python?

532

Je suis nouveau sur Python et j'essaie juste de comprendre comment ses packages fonctionnent. On peut supposer que les "œufs" sont une sorte de mécanisme d'emballage, mais quel serait un aperçu rapide de leur rôle et peut-être des informations sur leur utilité et comment les créer?

Bialecki
la source

Réponses:

527

Remarque: L'emballage des œufs a été remplacé par l'emballage des roues.

Même concept qu'un .jarfichier en Java, c'est un .zipfichier avec quelques fichiers de métadonnées renommés .egg, pour distribuer du code sous forme de bundles.

Plus précisément: la structure interne des œufs en Python

Un «œuf Python» est une structure logique incarnant la sortie d'une version spécifique d'un projet Python, comprenant son code, ses ressources et ses métadonnées. Il existe plusieurs formats qui peuvent être utilisés pour coder physiquement un œuf Python, et d'autres peuvent être développés. Cependant, un principe clé des œufs Python est qu'ils doivent être détectables et importables. Autrement dit, il devrait être possible pour une application Python de découvrir facilement et efficacement quels œufs sont présents sur un système et de s'assurer que le contenu des œufs souhaité est importable.

Le .eggformat est bien adapté à la distribution et à la désinstallation ou aux mises à niveau faciles du code, car le projet est essentiellement autonome dans un seul répertoire ou fichier, sans mélange avec le code ou les ressources d'autres projets. Il permet également d'avoir plusieurs versions d'un projet installées simultanément, de sorte que les programmes individuels peuvent sélectionner les versions qu'ils souhaitent utiliser.

jefe2000
la source
82

Le .eggfichier est un format de distribution pour les packages Python. C'est juste une alternative à une distribution de code source ou à Windows exe. Mais notez que pour pure Python, le .eggfichier est complètement multi-plateforme.

Le .eggfichier lui-même est essentiellement un .zipfichier. Si vous changez l'extension en « zip», vous pouvez voir qu'elle aura des dossiers à l'intérieur de l'archive.

De plus, si vous avez un .eggfichier, vous pouvez l'installer en tant que package en utilisanteasy_install

Exemple: Pour créer un .eggfichier pour un répertoire, mymathqui peut lui-même avoir plusieurs scripts python, procédez comme suit:

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

Ensuite, depuis le terminal:

 $ python setup.py bdist_egg

Cela générera beaucoup de sorties, mais une fois terminé, vous verrez que vous avez trois nouveaux dossiers: build , dist et mymath.egg-info . Le seul dossier qui nous intéresse est le dossier dist où vous trouverez votre .eggfichier, mymath-0.1-py3.5.eggavec votre numéro de version par défaut de python (installation) (le mien ici: 3.5)

Source: blog de la bibliothèque Python

kmario23
la source
3

Les œufs Python sont un moyen de regrouper des informations supplémentaires avec un projet Python, qui permet de vérifier et de satisfaire les dépendances du projet au moment de l'exécution, ainsi que de permettre aux projets de fournir des plugins pour d'autres projets. Il existe plusieurs formats binaires qui incarnent des œufs, mais le plus courant est le format de fichier zip «.egg», car il est pratique pour distribuer des projets. Tous les formats prennent en charge les données spécifiques au package, les métadonnées à l'échelle du projet, les extensions C et le code Python.

La façon la plus simple d'installer et d'utiliser des oeufs Python est d'utiliser le gestionnaire de packages Python "Installation facile", qui trouvera, téléchargera, construira et installera des oeufs pour vous; il vous suffit de lui indiquer le nom (et éventuellement la version) du ou des projets Python que vous souhaitez utiliser.

Les oeufs Python peuvent être utilisés avec Python 2.3 et versions ultérieures, et peuvent être créés à l'aide du package setuptools (voir le sandbox Python Subversion pour le code source, ou la page EasyInstall pour les instructions d'installation actuelles).

Les principaux avantages des œufs Python sont:

  • Ils activent des outils comme le gestionnaire de packages Python "Easy Install"

  • Les fichiers .egg sont un format "zéro installation" pour un package Python; aucune étape de construction ou d'installation n'est requise, il suffit de les placer sur PYTHONPATH ou sys.path et de les utiliser (peut nécessiter l'installation du runtime si des extensions C ou des fichiers de données sont utilisés)

  • Ils peuvent inclure des métadonnées de package, telles que les autres œufs dont ils dépendent

  • Ils permettent aux "packages d'espaces de noms" (packages qui ne contiennent que d'autres packages) d'être divisés en distributions distinctes (par exemple zope. , Twisted . , Peak. * Les packages peuvent être distribués comme des œufs séparés, contrairement aux packages normaux qui doivent toujours être placés sous le même répertoire parent. Cela permet de distribuer des packages monolithiques désormais gigantesques en tant que composants séparés.)

  • Ils permettent aux applications ou aux bibliothèques de spécifier la version requise d'une bibliothèque, de sorte que vous pouvez par exemple exiger ("Twisted-Internet> = 2.0") avant d'effectuer une importation twisted.internet.

  • Ils sont un excellent format pour distribuer des extensions ou des plugins à des applications et des cadres extensibles (tels que Trac, qui utilise des oeufs pour les plugins à partir de 0.9b1), car le runtime d'oeuf fournit des API simples pour localiser les oeufs et trouver leurs points d'entrée annoncés (similaire au concept de "point d'extension" d'Eclipse).

Il existe également d'autres avantages pouvant découler d'un format normalisé, similaires aux avantages du format "jar" de Java.

prosti
la source
l'oeuf de python est-il une version spécifique? c'est-à-dire un œuf construit pour 2 vs 3? ou même des versions mineures? ex 2.x
ealeon
1

"Egg" est un format de distribution importable à fichier unique pour les projets liés à Python.

"Le Guide rapide des œufs Python" note que "Les œufs sont en Pythons comme les Jars en Java ..."

Les œufs sont en réalité plus riches que les bocaux; ils contiennent des métadonnées intéressantes telles que les détails de licence, les dépendances de version, etc.

Aerin
la source
Le lien est mort à ce jour.
Perfi
@Perfi Link fonctionne pour moi.
Klik
C'est drôle comme ça fonctionne parfois! Il est de retour en ligne. Heureux de le voir :)
Perfi