Je suis nouveau sur Python et j'essaie simplement de comprendre comment fonctionnent ses paquets. On peut supposer que les "œufs" sont une sorte de mécanisme de conditionnement, mais quel serait un aperçu rapide de leur rôle et peut-être des informations sur la raison pour laquelle ils sont utiles et comment les créer?
Remarque: L'emballage de l'œuf a été remplacé par celui de la roue.
Même concept qu'un fichier .jar
en Java, il s'agit d'un fichier .Zip
avec des fichiers de métadonnées renommés .Egg
, pour la distribution du code en tant qu'ensembles.
Plus précisément: la structure interne de Python Eggs
Un "oeuf Python" est une structure logique incorporant la publication d'une version spécifique d'un projet Python, comprenant son code, ses ressources et ses métadonnées. Plusieurs formats peuvent être utilisés pour coder physiquement un Python Egg, et d'autres peuvent être développés. Cependant, un principe clé de Python œufs est qu'ils doivent pouvoir être découverts et importés. Autrement dit, il devrait être possible pour une application Python de déterminer facilement et efficacement quels œufs sont présents sur un système et de s'assurer que le contenu de ces œufs est importable.
Le format
.Egg
convient parfaitement à la distribution et à la désinstallation facile ou à la mise à niveau de code, car le projet est essentiellement autonome dans un seul répertoire ou fichier, sans aucune autre ressource ou code. Il est également possible d'installer simultanément plusieurs versions d'un projet, de sorte que des programmes individuels puissent sélectionner les versions qu'ils souhaitent utiliser.
Le fichier _.Egg
_ 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 fichier _.Egg
_ est complètement multiplate-forme.
Le fichier _.Egg
_ est lui-même essentiellement un fichier _.Zip
_. Si vous modifiez l'extension en "Zip
", vous pouvez voir qu'il y aura des dossiers dans l'archive.
De plus, si vous avez un fichier _.Egg
_, vous pouvez l’installer en tant que package en utilisant _easy_install
_
Exemple: pour créer un fichier _.Egg
_ pour un répertoire, par exemple mymath
qui peut lui-même comporter 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, faites:
_ $ 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 importe est le dossier dist où vous trouverez votre fichier _.Egg
_, mymath-0.1-py3.5.Egg
avec votre numéro de version par défaut de python (installation) (le mien ici: 3.5)
Source: blog de la bibliothèque Python
Les œufs Python permettent de regrouper des informations supplémentaires avec un projet Python, ce qui permet de vérifier et de satisfaire les dépendances du projet au moment de l'exécution, ainsi que de fournir des plugins pour d'autres projets. Il existe plusieurs formats binaires contenant des œufs, mais le plus courant est le format de fichier zip ".Egg", car il est très pratique pour la distribution de projets. Tous les formats prennent en charge les données spécifiques aux packages, les métadonnées à l'échelle du projet, les extensions C et le code Python.
Le moyen le plus simple d’installer et d’utiliser Python œufs consiste à utiliser le gestionnaire de paquets "Installation facile" Python, qui trouvera, téléchargera, construira et installera des oeufs pour vous; tout ce que vous faites est de lui indiquer le nom (et éventuellement la version) du ou des projets Python que vous souhaitez utiliser.
Les œufs Python peuvent être utilisés avec Python 2.3 et supérieur, et peuvent être construits à l'aide du paquet setuptools (voir le sandbox Python Subversion pour le code source ou la page EasyInstall pour les instructions d'installation actuelles) .
Les principaux avantages de Python Eggs sont les suivants:
Ils activent des outils tels que le "Easy Install" Python gestionnaire de paquets
Les fichiers .Egg sont au format "installation zéro" pour un package Python; aucune étape de construction ou d'installation n'est requise, il suffit de les mettre sur PYTHONPATH ou sys.path et de les utiliser (le logiciel d'exécution peut être installé si des extensions C ou des fichiers de données sont utilisés)
Ils peuvent inclure des métadonnées sur les paquets, tels que les autres œufs dont ils dépendent.
Ils permettent aux "paquets d'espace de noms" (paquets qui ne contiennent que d'autres paquets) d'être divisés en distributions séparées (par exemple, les paquets zope ., twisted., peak. * Peuvent être distribués sous forme d'oeufs distincts, contrairement aux paquets normaux qui doit toujours être placé dans le même répertoire parent, ce qui permet de distribuer ce qui est maintenant d’énormes paquets monolithiques en tant que composants distincts.)
Ils permettent aux applications ou aux bibliothèques de spécifier la version requise d’une bibliothèque, afin que vous puissiez par exemple require ("Twisted-Internet> = 2.0") avant de procéder à une importation twisted.internet.
C'est un excellent format pour la distribution d'extensions ou de plugins vers des applications et des frameworks extensibles (comme Trac, qui utilise des oeufs pour les plugins à partir de 0.9b1), car le moteur d'exécution Egg fournit des API simples pour localiser les oeufs et trouver les points d'entrée annoncés (similaire à concept "de point d’extension" d’Eclipse).
Un format normalisé peut également présenter d'autres avantages, similaires à ceux du format "jar" de Java.
"Egg" est un format de distribution importable dans un seul fichier pour les projets liés à Python.
"Le Guide rapide sur Python Oeufs" note que "Les oeufs sont au format Python comme les bocaux au langage 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 publication, etc.