Nouvelle organisation des fichiers

Les propositions de correctifs ou d'exercices pour Pyromaths.

Modérateur: Développeurs

Re: Nouvelle organisation des fichiers

Messagede djinn » Sam 23 Mar 2013, 16: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 édition par djinn le Jeu 28 Mar 2013, 21:35, édité 3 fois.
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede Jérôme » Sam 23 Mar 2013, 16: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
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Nouvelle organisation des fichiers

Messagede djinn » Sam 23 Mar 2013, 16: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: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede djinn » Dim 24 Mar 2013, 22: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
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede Jérôme » Lun 25 Mar 2013, 18: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
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Nouvelle organisation des fichiers

Messagede djinn » Mar 26 Mar 2013, 10: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[i]=...), 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
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede Jérôme » Mar 26 Mar 2013, 18: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
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Nouvelle organisation des fichiers

Messagede djinn » Mer 27 Mar 2013, 03: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: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede djinn » Mer 27 Mar 2013, 13: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 édition par djinn le Jeu 28 Mar 2013, 21:37, édité 1 fois.
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede Arnaud » Mer 27 Mar 2013, 15: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
Arnaud
Critique officiel de pyromaths
 
Messages: 603
Inscription: Sam 26 Aoû 2006, 21:49
Localisation: Allemagne

Re: Nouvelle organisation des fichiers

Messagede Jérôme » Mer 27 Mar 2013, 17: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
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Nouvelle organisation des fichiers

Messagede djinn » Mer 27 Mar 2013, 17: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: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede djinn » Jeu 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
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Nouvelle organisation des fichiers

Messagede Jérôme » Ven 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
Avatar de l’utilisateur
Jérôme
Administrateur - Site Admin
 
Messages: 1071
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Précédente

Retourner vers Propositions

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron