TUTORIAL POUR CREER/UTILISER DES PYTHONEGGS

Les PyghonEggs sont à Python, ce que les JAR sont à JAVA. Une nouvelle méthode pour distribuer, plus facilement encore, des librairies (avec gestions des dépendances, et téléchargement automatique, cf EasyInstall). AFAIK, on peut faire des eggs depuis python2.3, et normalement, en python2.5, tout devrait être dispo en standard.

J'ai vite créer ce tuto, car dans mes recherches pour comprendre/tester ce qu'étaient réellement les eggs de python : je n'ai trouvé aucune ressource francophone (Ni même de bons tutos en langue anglaise).

Ce tuto aborde simplement la création, et l'utilisation d'un egg simple.

Petite note
Pour pouvoir créer des eggs, j'ai du installer le package python2.4-dev dans ma ubuntu. (sous win, je ne sais plus si j'ai du installer qqchose ou non ... sic ;-)

Création

On part du principe qu'on a le code python suivant, dans le fichier amoi.py :

def ajoute10(a):
    return a+10

Et qu'on désire le mettre dans un egg : il va falloir créer un module, qu'on va nommer « amoi ». Pour cela, on va créer un répertoire « amoi » dans lequel on va mettre le fichier « amoi.py », ainsi qu'un fichier __init__.py, qui contiendra le code suivant :

from amoi import *

On va donc se retrouver avec la structure de fichiers suivante :

amoi/
__init__.py
amoi.py

Pour construire le fichier EGG, il ne reste plus qu'à créer un fichier « setup.py » (cf setuptools), au même niveau que le répertoire « amoi », en y mettant ce contenu :

from setuptools import setup

PACKAGE = 'amoi'
VERSION = '0.1'

setup(name=PACKAGE, version=VERSION, packages=['amoi'] )

Vous devriez obtenir alors, la structure suivante :

amoi/
    __init__.py
amoi.py
setup.py

Il ne reste plus qu'à créer le package EGG en lançant la commande suivante, au niveau du répertoire qui contient le fichier setup.py

python setup.py bdist_egg

Si tout c'est bien passé, vous devriez trouver votre nouveau fichier egg (amoi-0.1-py2.4.egg), dans le répertoire « dist ».

Utilisation

Pour utiliser un fichier egg, il va falloir utiliser la méthode « require » du module « pkg_ressources ». Voilà un bout de code qui devrait utiliser l'egg créé précédemment :

from pkg_resources import require
require("amoi>=0.1")

from amoi import ajoute10

print ajoute10(10)

Peu importe que votre egg soit installé, ou simplement disponible dans votre PATH, « require » s'occupe de tout !

Egg et fichiers statiques

Il peut arriver que votre module utilise des fichiers externes, qu'on aimerait également mettre dans notre egg. Dans l'exemple d'avant, on veut maintenant retourner le contenu d'un fichier « meteo.txt » devant se trouver dans notre egg. On va modifier l'arborescence comme suit, en mettant n'importe quoi dans le ficher « meteo.txt » :

amoi/
     __init__.py
     amoi.py
     meteo.txt
setup.py

Et l'on va rajouter la méthode « meteo() » à notre module « amoi », pour obtenir ceci dans le fichier « amoi.py »:

def ajoute10(a):
    return a+10

def meteo():
    from pkg_resources import resource_filename
    path = resource_filename(__name__, 'meteo.txt')
    return open(path).read()

Il est nécessaire d'utiliser la méthode « ressource_filename() » du module « pkg_ressources », pour obtenir la localisation exacte du fichier statique (« meteo.txt ») de notre module, future egg .

Il reste encore à déclarer l'utilisation d'un fichier statique, pour qu'il soit inclus dans notre egg lors de sa génération, pour cela, il suffit de modifier notre setup.py comme ci-dessous :

from setuptools import setup  

PACKAGE = 'amoi'
VERSION = '0.2'

setup(name=PACKAGE, version=VERSION, packages=['amoi'],
       package_data={'amoi':['*.txt']}  )

Noter, que j'ai incrémenté le numéro de version. Et que je demande à la poule, d'inclure tous les fichiers txt de mon module. Le Egg peut maintenant être rebuilder, et utiliser.



Pour aller plus loin ->  PyghonEggs
un autre tuto sur les eggs, orienté plugins
©Copyleft 99-2006