Distribuer une application Python

media/sleeping.jpg

Pour les développeurs paresseux

Qui suis-je ?

Mon rôle à Ingeniweb sur l'aspect empaquetage/distribution

Plan

ceci n'est pas un tutoriel wink

Empaqueter une application

Méthode 1: RACHE

  1. créer un module python launch.py, main.py

  2. y glisser le code de démarrage:

    import mon_appli
    import sys
    
    if __name__ == '__main__':
        mon_appli.se_lance(sys.argv)
    

Méthode 1: RACHE

Avantages:
  • portable
  • sûr de fonctionner
  • pas de problèmes de désinstallation
Inconvénients:
  • installation manuelle
  • démarrage manuel et spécifique
  • pas d'intégration au système hôte
  • modules C à compiler

et à terme : http://www.cafenware.org/la-rache/index.php?z=2

Empaqueter une application

Méthode 2: distribution par source

Méthode 2: distribution par source

Avantages:
  • préparation automatique
  • installation standardisée
  • installation universelle
Inconvénients:
  • désinstallation manuelle sad
  • installation universelle (pas de .deb, etc)
  • modules C à compiler

Empaqueter une application

Méthode 3: distribution binaire

Méthode 2 +
  • pré-compilation des extensions C
Avantage:
  • pas de compilateur nécessaire
Inconvénient:
  • compilation à faire pour toutes les plate-formes cibles
  • difficulté de la compilation statique

Show-time !

Fournir une application

Méthode 1 - Site web

Avantages:
  • media central d'infos sur le projet
  • organisation sur-mesure
Inconvénients:
  • création de scripts pour pusher les distributions
  • marketing nécessaire

Fournir une application

Méthode 2 - PyPI

Avantages:
  • automatique via distutils
  • visibilité publique des paquets
  • répertorié
Inconvénients:
  • visibilité publique des paquets
  • mise en ligne de doc limitée
  • anonymisation
  • maintien de deux media (site web+PyPI)

Show-time !

La révolution des Oeufs

Inconvénient des paquets:

La révolution des Oeufs

Et... les eggs fûrent

http://www.albinoblacksheep.com/flash/eggsong

La révolution des Oeufs

setuptools:

La révolution des Oeufs

setuptools permet de:

La révolution des Oeufs

Découper une application en paquets:

Show-time

Distribuer une omelette

Méthode 1: un master egg

Avantages:
  • dépendances faciles à gérer
  • récupération automatique des mis à jour
Inconvénients:
  • désinstallation manuelle
  • conflits de versions de paquets dans Python

Méthode 2: environnement de configuration

zc.buildout permet de:

Show-time

Présentation d'un fichier buildout pour Plone.

-> lancer la construction d'un Plone

zc.buildout

utilisé pour:

zc.buildout

zc.buildout existe car:

zc.buildout

Avantages:
  • standard simple pour installer un projet:

    wget http://projet/buildout.cfg && wget http://projet/bootstrap.py
    python bootstrap.py && bin/buildout
    
  • permet de gérer aussi le déploiement:
    • archivage et distribution d'un buildout pre-construit
  • pas de conflits

  • distribution universelle

zc.buildout

Installation localisée, pas de conflit ou de problèmes de désinstallation

media/poules.jpg

zc.buildout

Inconvénients :

Déploiement décentralisé

Problématique:
  • comment construire et déployer des applications privées ?
Solution:
  • gérer son PyPI privé !

Déploiement décentralisé

Problématique:
  • comment construire et déployer des applications privées ?
Solution:
  • gérer son PyPI privé !

Déploiement décentralisé

http://tarekziade.files.wordpress.com/2008/05/collective-dist.png

Mes travaux dans ce domaine

Mes travaux dans ce domaine

Utilisation actuelle concrète

Construction d'applications Plone avec:

Manque de temps

J'aurais voulu de parler de:

Merci

Merci pour votre attention !

Merci à Olivier Grisel (essayez son paquet virtualkeyring)

Questions ?