Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/10/2008, à 22:47

Linkid

[Python] Distribution d'un prog [eggs et deb]

Bonjour,

Récemment, j'ai voulu me lancer dans la création d'un package deb pour distribuer mon programme fait en python.
J'ai donc lu pas mal de doc sur le net et regardé la vidéo assez célèbre apparemment sur showmedo...

Sauf que j'ai aussi entendu parlé des python eggs et, après quelques recherches, j'ai découvert que l'on peut faire des .deb à partir des eggs.
Et bien que j'entends/lis souvent python egg à chaque fois que l'on parle de distribution d'un programme fait en python, je ne vois toujours pas à quoi servent les eggs...
En effet, pourquoi je m'embêterais à faire des eggs puis des deb si je peux sauter une étape et faire directement des deb !?

Donc si quelqu'un s'y connaît en egg, alors pourrait-il m'en expliquer l'utilité ?

Merci !

Dernière modification par Linkid (Le 06/10/2008, à 22:48)


Ubuntu 9.10 : "The Karmic Koala"... Un monde de rêve rempli d'animaux !
Notre liberté ne se limite pas à Windows...

Hors ligne

#2 Le 07/10/2008, à 14:48

reeth

Re : [Python] Distribution d'un prog [eggs et deb]

+1 cela m'intéresse aussi smile

Hors ligne

#3 Le 07/10/2008, à 16:22

aleph

Re : [Python] Distribution d'un prog [eggs et deb]

Il y a, je pense, ici

http://wxpython.org/download.php#binaries, voir Demo and Sample Application, wxPython-demo

une excellente application illustrant le fonctionnement et la puissance de Python. C'est la demo de wxPython. Elle nécessite, fort logiquement et pour qui comprend le fonctionnement de Python, l'installation préalable de wxPython.

Cette application, créée par des gens qui maîtrisent le fonctionnement de Python, est disponible, pour des raisons pratiques, sous forme de fichier tar. Elle contient *une* application Python "demo.py" utilisant quelques 200 scripts Python, 150 fichiers images, des fichiers .po, .wav, html et quelques autres subtilités répartis dans plusieurs répertoires, tous ces fichiers étant naturellement utilisés par l'application principale.

Cette application fonctionne telle quelle sur les systèmes OS X, Linux, Windows ou BSD, quelle que soit les droits d'accès utilisateurs et même à partir d'une simple clé usb.

Je pense, une excellente source d'inspiration quant au fonctionnement et à la distribution d'applications Python.

-----

Si votre préférence va à d'autres utilitaires créés et utilisés par des gens qui ne comprennent pas grand chose à Python, libre à vous.

-----

> Donc si quelqu'un s'y connaît en egg, alors pourrait-il m'en expliquer l'utilité ?

Pour les explications techniques, je crois que j'ai suffisamment donné au cours des 12-24 mois.

#4 Le 07/10/2008, à 19:03

Linkid

Re : [Python] Distribution d'un prog [eggs et deb]

Bonjour,

Je crois que je me suis mal exprimé...
En fait, je voudrais savoir ce qu'on y gagne à faire des eggs. Car j'ai lu sur un forum que c'était mieux de faire un deb à partir d'un egg plutôt que de faire un deb directement.
Mais pourquoi ? Voilà ce que j'aimerais savoir...

Et aussi à quoi cela sert de distribuer des eggs plutôt que des fichiers sources ? Car à ce que j'ai cru comprendre, il faut python pour utiliser des egg...

Merci !


Ubuntu 9.10 : "The Karmic Koala"... Un monde de rêve rempli d'animaux !
Notre liberté ne se limite pas à Windows...

Hors ligne

#5 Le 07/10/2008, à 19:34

aleph

Re : [Python] Distribution d'un prog [eggs et deb]

> En fait, je voudrais savoir ce qu'on y gagne à faire des eggs. Car j'ai lu sur un forum que c'était mieux de faire un deb à partir d'un egg plutôt que de faire un deb directement.
Mais pourquoi ? Voilà ce que j'aimerais savoir...

Moi, ce qui m'intéresse, est de savoir pourquoi veux-tu faire un paquet debian pour distribuer une application Python ? Je sais que j'insiste un peu, mais j'aimerais vraiment savoir. Merci d'avance.

#6 Le 07/10/2008, à 20:04

Linkid

Re : [Python] Distribution d'un prog [eggs et deb]

Faire un paquet, c'est déjà apprendre à en faire un. Donc c'est une sorte de défi que je me lance pour apprendre quelque chose de nouveau.

Ensuite, c'est apparement plus simple pour les mises à jour. Par exemple, si quelqu'un traduit mon prog ou si je je souhaite ajouter/modifier quelque chose, tout de suite, les utilisateurs en seront informés ! Alors que si je fais des mises à jour sur les sites comme google code, je ne suis pas sûr que les utilisateurs les voit.
Par exemple, est-ce que tu va tous les jours vérifier s'il y a des Màj sur le site de ceux qui font tes logiciels pour chacun d'entre eux ?!

Mais bon, là n'est pas là question.
Donc si tu as des arguments sur l'utilisation des eggs, j'aimerais bien les connaître, ça me permettrait de me décider sur l'outil que je vais utiliser pour faire des package...
D'ailleurs, faire des paquets debian, c'est bien, mais il faut aussi penser aux rpm. Et je crois avoir lu un jour qu'il y a un outil pour en faire à partir d'eggs. Une confirmation serait la bienvenue...

Merci !


Ubuntu 9.10 : "The Karmic Koala"... Un monde de rêve rempli d'animaux !
Notre liberté ne se limite pas à Windows...

Hors ligne

#7 Le 07/10/2008, à 21:36

aleph

Re : [Python] Distribution d'un prog [eggs et deb]

> Linkid

Merci de la réponse.

> Faire un paquet, c'est déjà apprendre à en faire un.  ...

C'est tout ce qu'il y a de plus honorable.

---

Quant à moi, quand je distribue des applications, modules et autres petits scripts qui étendent certaines bibliothèques pour Python, je le fais tout simplement sous forme de scripts comme le font les développeurs Python que j'ai l'honneur de cotoyer.

La raison somme toute assez simple et qui tient dans le fonctionnement de Python et que l'on laisse à l'utilisateur le soin de gérer le sys.path comme il l'entend,  la gestion dynamique des modules auxquels accède un autre module étant nettement plus sophistiqué que le rituel statique d'un apt-get, pour reprendre une expression vue sur la "mailing list" des développeurs de Python 3000.

Dans ces conditions, je ne saurais te dire des variantes eggs -> deb ou -> deb directement, laquelle est la meilleure.

A chacun sa façon de travailler, j'ai la mienne.

#8 Le 08/10/2008, à 10:14

bipede

Re : [Python] Distribution d'un prog [eggs et deb]

aleph a écrit :

Il y a, je pense, ici

http://wxpython.org/download.php#binaries, voir Demo and Sample Application, wxPython-demo

une excellente application illustrant le fonctionnement et la puissance de Python. C'est la demo de wxPython. Elle nécessite, fort logiquement et pour qui comprend le fonctionnement de Python, l'installation préalable de wxPython.

Cette application, créée par des gens qui maîtrisent le fonctionnement de Python, est disponible, pour des raisons pratiques, sous forme de fichier tar. Elle contient *une* application Python "demo.py" utilisant quelques 200 scripts Python, 150 fichiers images, des fichiers .po, .wav, html et quelques autres subtilités répartis dans plusieurs répertoires, tous ces fichiers étant naturellement utilisés par l'application principale.

Cette application fonctionne telle quelle sur les systèmes OS X, Linux, Windows ou BSD, quelle que soit les droits d'accès utilisateurs et même à partir d'une simple clé usb.

Je pense, une excellente source d'inspiration quant au fonctionnement et à la distribution d'applications Python.

Toujours la même discussion...:)

Même si je comprend parfaitement ce que tu veux dire aleph, voici ce que voit l'utilisateur lambda :

Sous Windows il rapatrie le binaire d'installation de wx.python qui lui installe wx.python, les exemples et la démo. Il lui suffit alors d'aller dans son menu démarrer cliquer sur

tous les programmes>wxPython2.8 Docs demo and tools>Run the wxPython DEMO

pour lancer la démo que tu cites.

Sous debian il lui suffit d'installer par apt-get le paquet wxpython-demo-2.8 pour obtenir l'équivalent.

L'utilisateur lambda s'en fout de son sys.path, il ne sait même pas que ça existe...

Le deb gère pour lui les dépendances comme reportlab ou wxpython et installe les paquets correspondants avant d'installer le script...

Perso, je préfère gérer moi-même les emplacements sur ma machine et les versions de python ou wxPython, mais moi je suis un utilisateur averti...

Dernière modification par bipede (Le 08/10/2008, à 10:15)


Desktop: MSI - Intel® Core™ i5-3330 CPU @ 3.00GHz × 4 - RAM 8 go- Kubuntu 21.04 - Système sur SSD 64 Go - /home sur HDD 500 Go.
Laptop: DELL Inspiron-15 3567 - Intel® Core™ i5-7200 CPU @ 2.50GHz × 4 - RAM 8 go - HDD 1 To - Ubuntu 20.10 avec /home séparé.

Mon site: Les contributions du bipède

Hors ligne

#9 Le 08/10/2008, à 14:02

aleph

Re : [Python] Distribution d'un prog [eggs et deb]

Si je relis bien ce fil de discussion :

- A la question "Distribution d'un prog", je n'ai que proposé un exemple. Sans plus.
- Par curiosité, j'ai demandé à l'intervenant pourquoi il voulait créer des deb.
- J'ai expliqué ma façon de travailler.

---

Maintenant, cruement, le fond de ma pensée. Quand un débutant ou un utilisateur/développeur Python peu expérimenté veux créer et distribuer une application avec mise à jour automatique (des dépendances ?) sans une connaissance assez fine des mécanismes de fonctionnement de Python, je pense sincèrement que cette personne va droit contre le mur et ce ne sont pas des paquets deb qui vont lui simplifier magiquement la tâche. Si, par tact, je ne l'ai pas dit ouvertement, j'ose espérer au moins avoir mis la puce à l'oreille et pense sincèrement que cette personne à tout intérêt à simplement distribuer ses scripts, comme elle sait si bien le faire ("bezout.py"), sans même réaliser tout la puissance sous-jacente.

Aider n'est pas une chose simple à faire. Surtout dans un forum où le niveau des intervenants est fort divers. C'est difficile pour ceux qui posent des questions et cela l'est aussi pour ceux qui essaient de répondre.

#10 Le 08/10/2008, à 16:33

aleph

Re : [Python] Distribution d'un prog [eggs et deb]

> Linkid

'bezout.py' brièvement modifié illustrant quelques aspects du fonctionnement
de Python. (A prendre à bien plaire ou mettre à la poubelle.)

# par paresse tout en ascii, sans accents, modification des indentations

'''Theoreme de Bezout :
Soient deux entiers relatifs a et b et d leur PGCD.
Il existe deux entiers relatifs u et v tels que a.u + b.v = d.
Et si a et b sont premiers entre eux, alors d=1 et donc a.u + b.v = 1'''

import os

def Affiche(liste):
    "fonction pour Afficher les listes en colonne"
    for i in range(0, len(liste)):
        if liste[i] == ' ':
            print liste[i].rjust(4),
        else:
            print repr(liste[i]).rjust(4),
        print

def Bezout(a, b):
    u0, u1 = 1, 0  ## a*1 + b*0 = a
    v0, v1 = 0, 1  ## a*0 + b*1 = b
    r = 1  ## reste fixe a 1 au depart
    pgcd = 0  ## pgcd fixe a 0 au depart
    zero = 0  ## pour verifier si le calul du pgcd est possible ou non
    
    if ((a == 0) or (b==0)):
        if (a == b):
            pgcd, r = 0, 0 ## PGCD(0;0) = 0
        else:
            r, zero = 0, 1
            print "ON NE PEUT PAS DIVISER PAR 0" ## pour tout entier NON NUL n, PGCD(0;n)=impossible
    else:
        if (a % b == 0):
            pgcd = b  ## si a et b sont des diviseurs, alors le pgcd est le plus petit, ici b
    
    if (a < 0):
        a = -a  ## pgcd(-5;2) = pgcd(5;2)
    elif (b < 0):
        b = -b  ## pgcd(5;-2) = pgcd(5;2)
    
    quo = [' ']  ## liste des quotients
    divi = [a, b]  ## liste des diviseurs et dividendes
    rest = []  ## liste des restes
    coefu = [u0]  ## liste des coefficients u de bezout
    coefv = [v0]  ## liste des coefficients v de bezout
    
    while (r>0):
        q = a/b  ## quotient de la division
        r = a-(b*q)  ## reste de la division euclidienne
        u2 = (u0 - (q*u1))  ## coef u_{n+2}
        v2 = (v0 - (q*v1))  ## coef v_{n+2}
        ## ajouts dans les listes
        quo.append(q)
        divi.append(r)
        rest.append(r)
        coefu.append(u1)
        coefv.append(v1)
        ## on remplace les anciennes valeurs par les nouvelles
        a = b
        b = r
        u0, v0 = u1, v1
        u1, v1 = u2, v2
    
    if (zero == 0):
        print "quotient :           "
        Affiche(quo)
        print "diviseur/dividende : "
        Affiche(divi)
        print "reste :              "
        Affiche(rest)
        print "u :                  "
        Affiche(coefu)
        print "v :                  "
        Affiche(coefv)
        if (pgcd != divi[1]):
            pgcd = rest[-2]  ## si pgcd est different du premier dividende, alors pgcd = dernier reste non nul
        print "PGCD(" + str(divi[0]) + "; " + str(divi[1]) + ") = " + repr(pgcd)  ## conversion des int en str par deux methodes pour Afficher le PGCD

def main():
    s = ''
    print "Calcul des coefficients de Bezout et affichage dans le tableau d'Euclide."
    print "<cr> pour quitter.", os.linesep
    while True:
        #aucun test de validite
        s = raw_input("Entrez le diviseur et le dividende: ")
        if not s: break
        s = s.split()
        a, b = eval(s[0]), eval(s[1])
        Bezout(a, b)
        
# Permet au module d'etre utilise comme *application* et/ou comme *bibliotheque*.
if __name__ == '__main__':
    main()

Application seule: on passe.

"bezout.py" utilisé dans une console Python, ce pourrait être n'importe quelle application.

>>> #par hasard dans ce répertoire
>>> import sys
>>> sys.path.append(r'C:\jm\jmpy\junk\bezout\bezout_pyt')
>>> import os
>>> os.getcwd()
C:\jm\jmpy\psi\psi86
>>> 
>>> import bezout
>>> print bezout.__doc__
Theoreme de Bezout :
Soient deux entiers relatifs a et b et d leur PGCD.
Il existe deux entiers relatifs u et v tels que a.u + b.v = d.
Et si a et b sont premiers entre eux, alors d=1 et donc a.u + b.v = 1
>>> #utilisation de la fonction Bezout du module 'bezout.py'
>>> bezout.Bezout(5, 55)
quotient :           
    
   0
  11
diviseur/dividende : 
   5
  55
   5
   0
reste :              
   5
   0
u :                  
   1
   0
   1
v :                  
   0
   1
   0
PGCD(5; 55) = 5
>>> bezout.Bezout(3, 11)
quotient :           
    
   0
   3
   1
   2
diviseur/dividende : 
   3
  11
   3
   2
   1
   0
reste :              
   3
   2
   1
   0
u :                  
   1
   0
   1
  -3
   4
v :                  
   0
   1
   0
   1
  -1
PGCD(3; 11) = 1
>>> #utilisation de la fonction main du module 'bezout.py'
>>> betout.main()
Traceback (most recent call last):
  File "<psi last command>", line 1, in <module>
NameError: name 'betout' is not defined
>>> #typo :-(
>>> bezout.main()
Calcul des coefficients de Bezout et affichage dans le tableau d'Euclide.
<cr> pour quitter. 

Entrez le diviseur et le dividende: 5 55
quotient :           
    
   0
  11
diviseur/dividende : 
   5
  55
   5
   0
reste :              
   5
   0
u :                  
   1
   0
   1
v :                  
   0
   1
   0
PGCD(5; 55) = 5
Entrez le diviseur et le dividende: 51 102
quotient :           
    
   0
   2
diviseur/dividende : 
  51
 102
  51
   0
reste :              
  51
   0
u :                  
   1
   0
   1
v :                  
   0
   1
   0
PGCD(51; 102) = 51
Entrez le diviseur et le dividende: 
>>>

Variante (disparaît dans Python 3)

>>> import os
>>> os.getcwd()
C:\jm\jmpy\psi\psi86
>>> execfile(r'C:\jm\jmpy\junk\bezout\bezout_pyt\bezout.py')
Calcul des coefficients de Bezout et affichage dans le tableau d'Euclide.
<cr> pour quitter. 

Entrez le diviseur et le dividende: 4 8
quotient :           
    
   0
   2
diviseur/dividende : 
   4
   8
   4
   0
reste :              
   4
   0
u :                  
   1
   0
   1
v :                  
   0
   1
   0
PGCD(4; 8) = 4
Entrez le diviseur et le dividende: 12 4
quotient :           
    
   3
diviseur/dividende : 
  12
   4
   0
reste :              
   0
u :                  
   1
   0
v :                  
   0
   1
PGCD(12; 4) = 4
Entrez le diviseur et le dividende:

#11 Le 08/10/2008, à 22:58

Linkid

Re : [Python] Distribution d'un prog [eggs et deb]

Merci pour cette modification aleph, je corrigerais cela plus tard... (je ne savais pas comment on modifiait __doc__)

Pour revenir au sujet, je compte distribuer par package une vraie appli, pas un script du genre 'bezout.py' dont je donnerais plutôt la source comme je le fais déjà.
Et certes, je sais pas tout faire en python, mais je compte apprendre. Et même si tu penses aleph que faire des deb dans mon cas est inutile, alors tu te trompes puisque mon but est d'enrichir mes connaissances quelque part...

Tout ce que je voulais savoir, ce sont les avantages et les inconvénients de faire un deb à partir d'un egg. Et même plus : savoir ce qu'est un egg, si ça se mange, ce que l'on peut en faire...

Voilà, j'espère que je me suis un peu mieux exprimé cette fois-ci et que vous avez compris ce que je demandais, car il est vrai que c'est dur quelque fois de comprendre les demandes (surtout les miennes !).

Merci !

Dernière modification par Linkid (Le 08/10/2008, à 22:58)


Ubuntu 9.10 : "The Karmic Koala"... Un monde de rêve rempli d'animaux !
Notre liberté ne se limite pas à Windows...

Hors ligne

#12 Le 09/10/2008, à 06:58

aleph

Re : [Python] Distribution d'un prog [eggs et deb]

> Tout ce que je voulais savoir, ce sont les avantages et les inconvénients de faire un deb à partir d'un egg.

Je l'ai écrit, je ne la sais pas.

#13 Le 09/10/2008, à 13:16

atlante

Re : [Python] Distribution d'un prog [eggs et deb]

Je crée des debs à partir de mes programmes python directement.
Va voir ici: http://forum.ubuntu-fr.org/viewtopic.php?id=257909

Hors ligne