Nouvelle organisation des fichiers

Les propositions de correctifs ou d'exercices pour Pyromaths.

Modérateur : Développeurs

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 23 mars 2013, 15:09

J'utilise Eclipse pour farfouiller dans pyromaths, et j'ai des erreurs à plusieurs endroits au niveau des imports avec chemin relatif, dont celui mentionné par Arnaud dans System.py:
from ..sixiemes import sixiemes
Coïncidence?

J'ai donc essayé, en vain jusqu'ici de résoudre ce problème principalement esthétique (les erreurs affichées n'empêchent pas l'exécution correcte du code). Ce qui m'a amené à regarder de plus près l'arborescence des fichiers et la structure des packages de pyromaths.
Il y a plusieurs détails qui m'échappent ou restent confus. Notamment certains "import", qui fonctionnent quand ils sont dans une fonction, mais échouent à l'exécution lorsqu'ils sont en dehors, ce qui m'apparaît suspect, non?

En particulier, je ne comprends pas pourquoi le dossier contenant le package (src) n'a pas le même nom que le package qu'il contient (pyromaths):

Code : Tout sélectionner

/pyromaths           # lanceur (python)
/src/                # package pyromaths
/src/pyromaths.py    # module pyromaths.pyromaths
N'est-ce pas à cause de ce détail que le lanceur contient ce "hack":
try:
    from pyromaths import pyromaths
except ImportError:
    basedir = dirname(realpath(__file__))
    workdir = join(basedir,'src')
    sys.path.insert(0, basedir)
    from src import pyromaths
    chdir(workdir)
pyromaths.main()
Si l'on renommait "src" en "pyromaths", ne pourrait-on résoudre certains problèmes d'imports relatifs, ou d'imports apparemment vulnérables?
Dernière modification par djinn le 28 mars 2013, 20:35, modifié 3 fois.

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1120
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Nouvelle organisation des fichiers

Message par Jérôme » 23 mars 2013, 15:16

Je crois que j'avais bidouiller ainsi pour satisfaire à la fois py2exe qui crée les exécutables windows et Didier qui crée les paquets ubuntu. De mémoire, il me semble que la bonne voie est d'avoir les sources dans un dossier src. Mais il est également possible que je fabule totalement... :?
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 23 mars 2013, 15:32

Je ne sais pas si c'est nécessaire, mais c'est sans doute préférable.
Pour autant, l'un n'empêche pas l'autre. On pourrait avoir une structure dans ce genre, par exemple:

Code : Tout sélectionner

data/
scripts/
src/
    pyromaths/
              cinquiemes/
              ...
              outils/
              pyromaths.py
              interface.py
              Values.py
    lanceur                      # doit changer de nom

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 24 mars 2013, 21:14

Code : Tout sélectionner

$ git grep "exec(" | wc -l
30
Autrement dit, il y a 30 instances d'exec() dans le code actuel -- dont 26 dans interface.py.

J'en soupçonne certains, au moins, de générer ces erreurs Eclipse qui n'en sont pas quand pyromaths tourne. Comme, en règle générale, il vaut mieux éviter de recourir à exec() pour diverses raisons, verriez-vous un inconvénient à ce que je les élimine partout où on peut le faire sans trop bouleverser l'existant?

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1120
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Nouvelle organisation des fichiers

Message par Jérôme » 25 mars 2013, 17:52

Pourquoi pas. par contre, tu le fais bien dans la branche develop ;) C'est quoi la solution pour éviter les exec ?
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 26 mars 2013, 09:43

Jérôme a écrit :Pourquoi pas. par contre, tu le fais bien dans la branche develop ;)
Je vais essayer… :-p
Jérôme a écrit :C'est quoi la solution pour éviter les exec ?
Ça dépend des cas:
  • Dans interface.py: il s'agit principalement de propriétés incluant le niveau dans leur nom (par exemple: self.tab_6e). L'exec sert à les référencer dans une boucle: exec("self.tab_%se=..." % i). Solution: utiliser une liste (self.tabs=...), ou bien __dict__ (self.__dict__["tab_%se" % i]=...). La solution n°1 est préférable.
  • Dans le package troisiemes (developpements.py et equations.py): je n'ai pas encore regardé en détail -- à suivre.
  • Dans pyromaths.py: mettre le package pyromaths dans un dossier pyromaths pour éviter le hack d'import (voir post ci-dessus)

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1120
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Nouvelle organisation des fichiers

Message par Jérôme » 26 mars 2013, 17:24

ben yapuka alors !? ;)
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 27 mars 2013, 02:40

Première phase: éradication des exec() du module interface.py.
J'ai procédé en 3 étapes dans l'espoir de rendre les modifications plus claires.
Finalement j'ai créé une classe Tab, ce qui permet de regrouper les éléments de chaque onglet et ainsi d'éviter les noms à rallonge (type spinBox_3_1). J'ai également transformé en simple variable locale tout ce qui n'avait pas besoin d'être référencé ultérieurement.
On dirait que tout fonctionne correctement… :-)

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 27 mars 2013, 12:55

Voilà, le package "troisiemes" est nettoyé de ses exec().

Ne reste plus que celui-ci, dans src/pyromaths.py:
if __name__ == "__main__":
    basedir = dirname(realpath(__file__))
    _path, _dir = split(basedir)
    sys.path[0] = realpath(_path)
    exec("from %s import pyromaths" % _dir)
    pyromaths.main()
Manifestement, il ne sert qu'à permettre le lancement de pyromaths.py depuis le dossier src/ (au lieu d'utiliser le lanceur pyromaths, situé dans le dossier parent). Je ne suis pas certain de l'intérêt de ce code, quelqu'un pourrait-il m'éclairer?
Dernière modification par djinn le 28 mars 2013, 20:37, modifié 1 fois.

Avatar de l’utilisateur
Arnaud
Critique officiel de pyromaths
Messages : 609
Inscription : 26 août 2006, 21:49
Localisation : Allemagne
Contact :

Re: Nouvelle organisation des fichiers

Message par Arnaud » 27 mars 2013, 14:18

Franchement, je ne me rappelle plus, c'est surtout Jérôme qui a réalisé cette partie du code.
Tout ce dont je me rappelle, c'est qu'il y a eu beaucoup de problème suivant les OS, l'encodage, et les éventuels caractères spéciaux dans les noms d'utilisateur.

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1120
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Nouvelle organisation des fichiers

Message par Jérôme » 27 mars 2013, 16:20

Comme le dit Arnaud, c'est indispensable pour les différents packages suivant les OS. je ne me souviens plus des détails, juste des souffrances ! :?
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 27 mars 2013, 16:30

Je sens en effet dans vos tons respectifs les stigmates d'une belle galère cross-plateforme! ;)
Les encodages et les caractères spéciaux, quel enfer…

Ces problèmes n'auraient-ils pas également une relation avec celui-ci?
En fait, j'essaie de comprendre pourquoi pyromaths serait confronté à des problèmes cross-platform auxquels ne sont pas, à ma connaissance, confrontés les autres programmes python cross-platform. Ou bien ce hack est-il plus courant que je ne l'imagine?

Avatar de l’utilisateur
djinn
Messages : 183
Inscription : 03 mars 2013, 10:38

Re: Nouvelle organisation des fichiers

Message par djinn » 11 avr. 2013, 16:34

Après l'éradication des exec(), je me rends compte qu'il y aussi son petit-frère eval(): :P
$ git grep "eval(" | wc -l
39
Mais bon, ceux-là ne me créent que des warnings, on dirait…

Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
Messages : 1120
Inscription : 26 août 2006, 13:10
Localisation : Nantes
Contact :

Re: Nouvelle organisation des fichiers

Message par Jérôme » 12 avr. 2013, 12:21

Ah oui, je n'avais pas trouvé comment les éviter ceux là.
Pyromaths génère des fiches d'exercices et leur corrigé en toute simplicité.
Un programme multi-plateformes libre et gratuit sous licence GPL

Répondre