Speak English? Click here to read my English blog!

Créer facilement un paquet .deb pour un programme Python

Posté par jbj le 6 sept 2007 dans Python17 commentaires

C’est en flanant sur Ubuntu-fr.org, que je suis tombé sur ce code pour le moins intéréssant. Créé à l’origine pour pypar2, ce script permet, après quelques modifications, de créer un paquet Debian (.deb) pour votre script Python.
En théorie, le script devrait donner les même résultats avec d’autres langages, toutefois je n’ai pas testé.

On y va ;) Tout d’abord, il faut créer un fichier appellé control-install, avec ce contenu:

Package: test
Version: 0.1
Section: utils
Priority: optional
Architecture: i386
Depends: python (>=2.4), python-xml (>=0.8)
Maintainer: vous (vous@gmail.com)
Description: Juste un test de paquet Debian

Modifiez les valeurs à votre convenance, en prenant grand soin de renseigner avec exactitude les dépendances liées à votre programme. Dans le cas contraire, et si l’utilisateur de votre programme n’a pas ces dépendances d’installées sur sa machine, votre programme ne fonctionnera pas.

Créez le script suivant sur votre machine et nommez le create_package.sh:

#!/bin/sh
INSTALL_DIR="/usr/share/test"
MAN_DIR="/usr/share/man/test"
BIN_DIR="/usr/bin"
APP_DIR="/usr/share/applications"
LOC_DIR="/usr/share/locale"
ICO_DIR="/usr/local/share/pixmaps"
VERSION=`cat control-install | grep "Version" | cut -d  -f2`

mkdir -p test/DEBIAN
cp control-install test/DEBIAN/control

mkdir -p "test"$ICO_DIR
cp pix/test.png "test"$ICO_DIR

mkdir -p "test"$MAN_DIR
cp doc/test "test"$MAN_DIR

mkdir -p "test"$INSTALL_DIR
mkdir -p "test"$INSTALL_DIR"/src"
cp src/*.py "test"$INSTALL_DIR"/src/"

mkdir -p "test"$INSTALL_DIR"/res"
cp res/*.glade "test"$INSTALL_DIR"/res/"

mkdir -p "test"$INSTALL_DIR"/pix"
cp pix/*.png "test"$INSTALL_DIR"/pix/"

mkdir -p "test"$INSTALL_DIR"/doc"
cp doc/gpl.txt "test"$INSTALL_DIR"/doc/"

cp doc/whatsnew.txt "test"$INSTALL_DIR"/doc/"
mkdir -p "test"$APP_DIR

cp res/*.desktop "test"$APP_DIR
mkdir -p "test"$BIN_DIR

cp start-install.sh "test"$BIN_DIR"/test"
mkdir -p "test"$LOC_DIR

cp -R locale/* "test"$LOC_DIR

dpkg-deb --build test test-$VERSION.deb
rm -rf test

Placez le au même niveau que la source de votre programme et du fichier control-install puis rendez-le executable :

sudo chmod +x create_package.sh

Ensuite, vous devez modifier “test” par le nom de votre programme. Pour remplacer toutes les occurences de test par monprogramme, ouvrez create_package.sh sous VI et procédez comme suit:
:%s/test/monprogramme/g

Avant d’éxecuter le script, pensez à relire le script et à remplacer certaines valeurs qui ne correspondraient pas à l’arborescence de votre programme. Par exemple, le script considère par défaut que vos images sont dans un dossier pix.

Une fois que tout est prêt, un bon
sudo ./create_package.sh
et votre paquet Debian trône fièrement devant vous :)

Si vous avez aimé cet article, aidez-moi à le promouvoir en votant pour lui sur les sites suivants: Ces icones representent les sites de bookmarking social dans lesquels vos lecteurs peuvent partager et faire découvrir vos pages.
  • del.icio.us
  • Scoopeo
  • Tapemoi
  • Technorati
  • Tutmarks
  • Pioche
  • Blogasty
  • Diggons
  • Wikio
Tags: , ,

17 commentaires

» Flux RSS des commentaires
  1. jbj

    j’ai essayé ta methode

    mais des que je veut creer le paquet il me met

    dpkg-deb: la lecture du fichier « info » « create_package.sh/DEBIAN/control » du paquet a échoué: N’est pas un répertoire

    merci de votre aide

  2. Salut, je viens de réessayer chez moi. A mon avis tu t’es trompé avec les chemins et paramètres du create_package.sh et du control-install.

  3. voila c’est a se niveaux que je bloque pourrait-tu mieux expliqué

    ouvrez create_package.sh sous VI et procédez comme suit:
    :%s/test/monprogramme/g

    merci de ton aide

  4. En fait il s’agit d’utiliser l’éditeur vi pour remplacer toutes les occurences de “test” par le nom de ton programme.
    Procede comme suit:
    Dans le terminal: vi create_package.sh
    create_package.sh est alors ouvert dans vi. Par défaut, tu es en mode commande. Tu n’as plus qu’a taper:
    :%s/test/pixit/g
    ce qui signifie que tu veux remplacer “test” par “pixit” dans tout le fichier. Ensuite, tu sauvegarde et quite en tapant :wq
    Voilà :) J’ai écris quelques articles sur vi si tu ne connais pas encore cet éditeur, tu verra c’est une merveille!

  5. voila j’ai proceder comme tu m’a dit

    mais des que je veux le lancer il me dit

    sudo: unable to execute /home/user/pix/DEBIAN/create_package.sh: No such file or directory

    et puis je me suis dit je vais le lancer avec python

    il me dit

    sudo python ‘/home/user/pix/DEBIAN/create_package.sh’
    File “/home/user/pix/DEBIAN/create_package.sh”, line 7
    VERSION=`cat control-install | grep “Version” | cut -d -f2`
    ^
    SyntaxError: invalid syntax

    voila merci

  6. Il ne trouve pas le fichier create_package. Tu es sur de donner le chemin exact?
    ça ne sers à rien de tenter d’executer un fichier .sh avec Python. Ces fichiers appellés scripts Shell n’ont strictement rien à voir avec.

  7. oui

    il me dit

    user@ubuntu:~/pixit2/DEBIAN$ sudo create_package.sh
    sudo: create_package.sh: command not found

  8. je l’ai fait en root

    il me dit

    root@ubuntu:/pixit2# ./create_package.sh
    -su: ./create_package.sh : /bin/shINSTALL_DIR=”/usr/share/pixit” : mauvais interpréteur: Aucun fichier ou répertoire de ce type

    encore merci de ton aide

  9. Il y a une erreur de syntaxe: c’est:
    #!/bin/sh
    INSTALL_DIR=…..

    le #!/bin/sh indique l’emplacement de l’interpreteur. En l’occurence, vu qu’il était indiqué #!/bin/shINSTALL_DIR dans ton fichier, il ne trouvais pas d’interpretteur de ce nom ;)

  10. maintenant il me crait le paquet mais avec des erreur

    ./create_package.sh
    cut: Le délimiteur doit être un caractère simple.
    Pour en savoir davantage, faites: « cut –help ».
    cp: ne peut évaluer `background/pixit.png’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `doc/pixit’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `src/*.py’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `res/*.glade’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `background/*.png’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `doc/gpl.txt’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `doc/whatsnew.txt’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `res/*.desktop’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `start-install.sh’: Aucun fichier ou répertoire de ce type
    cp: ne peut évaluer `locale/*’: Aucun fichier ou répertoire de ce type
    dpkg-deb : construction du paquet « pixit » dans « pixit-.deb ».

    merci

  11. tu lui demande de copier des fichiers qui n’existe pas: Tu dois éditer le script et retirer les fichiers dont tu n’as pas besoin.

  12. ok merci beaucoup de ton aide

  13. une derniere petite question

    quand je lance le fichier create_package.sh il me m’ait

    cut: Le délimiteur doit être un caractère simple.
    Pour en savoir davantage, faites: « cut –help ».

    en rapport avec cette commande
    VERSION=`cat control-install | grep “Version” | cut -d -f2`

    il ne veut pas m’afficher la version de mon paquet

    pourquoi ?

  14. En fait la ligne VERSION=`cat control-install | grep “Version” | cut -d -f2` est sensée te récupérer le n° de version présent sur le fichier control-install.
    Si ça ne marche pas pour une raison X ou Y, tu peux tout simplment mettre le n° de version à la main:

    VERSION=”0.1″

  15. merci pas bete

    derniere petite question encore une
    je sais je suis embetant

    j’ai essayé d’installer le paquet que j’avais creer

    il m’installe le paquet correctement mais je n’ai pas de raccourci qui se creer ou meme en commande
    si je tape pixit sa ne marche pas pourquoi?

    merci

  16. Installer le paquet c’est une chose, créer une entrée de menu en est une autre :)
    Idem pour la commande.

    Pour créer une entrée dans ton menu, tu dois créer un fichier .desktop. C’est facile, je l’avais fait il y a quelques mois pour une appli python. Regardes dans /usr/share/app-install/. Tu as plein de fichiers nommés programme.desktop.
    Tu en regarde un pour voir comment il sont faits, puis sur le même modele tu crée pixit.desktop et voilà.
    J’ai peut etre oublié une étape car ça fait un bail que je l’ai pas fait, mais même au pire des cas ça te fera une bonne piste :)

  17. merci

Commenter