Créer facilement un paquet .deb pour un programme Python
Posté par jbj le 6 sept 2007 dans Python • 17 commentairesC'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
Autres articles dans la catégorie Python
- Comment les spammeurs récupèrent-ils votre adresse mail?
- pygtk: Notebook avec un bouton fermer
- Créez un lecteur audio en python avec le module PyMedia
- Créez des executables pour vos scripts python
- Créer facilement un paquet .deb pour un programme Python
- Quelques modules Python








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
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.
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
En fait il s’agit d’utiliser l’éditeur vi pour remplacer toutes les occurences de « test » par le nom de ton programme.
J’ai écris quelques articles sur vi si tu ne connais pas encore cet éditeur, tu verra c’est une merveille!
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à
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
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.
oui
il me dit
user@ubuntu:~/pixit2/DEBIAN$ sudo create_package.sh
sudo: create_package.sh: command not found
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
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
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
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.
ok merci beaucoup de ton aide
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 ?
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″
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
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
merci