Packaging

Les propositions de correctifs ou d'exercices pour Pyromaths.

Modérateur: Développeurs

Packaging

Messagede djinn » Jeu 11 Avr 2013, 16:25

Comme indiqué précédemment dans ces différents posts, je me suis lancé dans une entreprise de standardisation de l'arborescence, pour différentes raisons. Rien de transcendant et pourtant, je suis déjà assez content du résultat: un code un peu plus simple et surtout plus une erreur dans mon IDE.

Comme on me l'avait fait remarquer à juste titre, le gros poisson dans cette affaire c'est de ne pas casser la génération des packages linux/win/osx. Et en effet, ce n'est pas la partie la plus simple/claire du code! :P
Comme je suis obligé de comprendre comment tout ça fonctionne pour ne pas faire de dégâts je me dis que, tant qu'à faire, ça serait peut-être pas mal que j'essaie de remettre à plat et de factoriser ce qui peut l'être. Dans cette optique, j'aurais pas mal de questions à poser mais, comme ça n'a pas l'air d'exciter grand monde (ce que je peux comprendre!), je vais essayer de m'en tenir au minimum…

Est-il nécessaire d'avoir deux systèmes de packaging "différents": distutils pour linux/win et setuptools pour osx? Ou bien puis-je envisager de n'en utiliser qu'un seul -- peu importe lequel?
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Packaging

Messagede Yves » Jeu 11 Avr 2013, 17:25

L'application pour Mac OS X est réalisée avec py2app et implique l'utilisation de setuptools.
Avatar de l’utilisateur
Yves
 
Messages: 453
Inscription: Mer 21 Jan 2009, 21:40

Re: Packaging

Messagede Jérôme » Ven 12 Avr 2013, 12:27

site http://www.py2exe.org/ a écrit:py2exe is a Python Distutils extension which converts Python scripts into executable Windows programs, able to run without requiring a Python installation.

Je ne vois pas comment faire sans. Cela dit, je ne suis pas certain que l'utilisation combinée de distutils et setuptools ait compliqué les choses. Je testerai un packaging linux et Windows prochainement en fonction de tes modifications.
Merci pour tout :)
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: 1060
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Packaging

Messagede djinn » Ven 12 Avr 2013, 16:48

Si je comprends bien, setuptools n'est qu'une couche supplémentaire reposant sur distutils et permettant d'en simplifier l'usage:
site peak.telecommunity.com a écrit:setuptools is a collection of enhancements to the Python distutils (...) that allow you to more easily build and distribute Python packages, especially ones that have dependencies on other packages.
Packages built and distributed using setuptools look to the user like ordinary Python packages based on the distutils.
On devrait donc pouvoir l'utiliser exclusivement, i.e. sans mention explicite de distutils (bien qu'il soit appelé "sous le manteau").

J'ai pu trouver un exemple quelque part d'un tel setup.py compatible avec py2exe et py2app:
setup(name='CurrencyConverter',
version='1.0',
description = "",
long_description="",
url='http://creativecommons.org',
author='Nathan R. Yergler',
author_email='nathan@creativecommons.org',
windows=[{'script':'converter_4.py',
}],
app = ['converter_4.py'],
scripts=['converter_4.py',],
options={"py2exe": {"packages": ["encodings", 'rdflib'], },
"py2app": {"argv_emulation": True,
},
},
)

Voilà un autre exemple, tiré de la doc py2app:
"""
py2app/py2exe build script for MyApplication.

Will automatically ensure that all build prerequisites are available
via ez_setup

Usage (Mac OS X):
python setup.py py2app

Usage (Windows):
python setup.py py2exe
"""
import ez_setup
ez_setup.use_setuptools()

import sys
from setuptools import setup

mainscript = 'MyApplication.py'

if sys.platform == 'darwin':
extra_options = dict(
setup_requires=['py2app'],
app=[mainscript],
# Cross-platform applications generally expect sys.argv to
# be used for opening files.
options=dict(py2app=dict(argv_emulation=True)),
)
elif sys.platform == 'win32':
extra_options = dict(
setup_requires=['py2exe'],
app=[mainscript],
)
else:
extra_options = dict(
# Normally unix-like platforms will use "setup.py install"
# and install the main script as such
scripts=[mainscript],
)

setup(
name="MyApplication",
**extra_options
)

À ce stade, je rêve d'un setup.py unique, pouvant générer tous les paquets dont nous avons besoin… :P
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Packaging

Messagede Jérôme » Ven 12 Avr 2013, 17:44

djinn a écrit:À ce stade, je rêve d'un setup.py unique, pouvant générer tous les paquets dont nous avons besoin… :P

On t'a reconnu Martin... ;)
Et pourquoi cela te fait-il rêver ?
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: 1060
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Packaging

Messagede Yves » Ven 12 Avr 2013, 17:54

djinn a écrit:À ce stade, je rêve d'un setup.py unique, pouvant générer tous les paquets dont nous avons besoin… :P


Pour utiliser py2app, un Mac est nécessaire. Du coup, un setup.py unique n'apporte pas grand chose.
Avatar de l’utilisateur
Yves
 
Messages: 453
Inscription: Mer 21 Jan 2009, 21:40

Re: Packaging

Messagede djinn » Ven 12 Avr 2013, 19:56

Bon, d'accord, peut-être que j'exagère… :)
Mais en gros, voilà mes motivations:
Déjà, ça nous permettrait d'avoir un setup.py en tête de gondole (conformément au "standard"), plutôt que trois dans des sous-dossiers.
Et puis ça permettrait de factoriser: aujourd'hui, si je déplace ou renomme un fichier/dossier je suis obligé d'aller modifier ces trois setup.py, voire creer_packages.sh et script.bat. Outre python, je suis obligé de connaître bash, la ligne de commande windows et de savoir comment fonctionnent py2exe et py2app (pour éviter les mauvaises surprises), ce qui n'a pas grand chose à voir avec le renommage initial.
Que l'on mette les scripts/icônes/etc spécifiques à chaque plateforme dans leur sous-dossier, soit, mais que la logique ou les metadata communes doivent se retrouver en plusieurs exemplaires, quel intérêt?
J'ai déjà passé pas mal de temps à essayer de comprendre le processus de packaging, et je suis loin d'avoir l'impression de le comprendre entièrement (ceci expliquant peut-être nos apparentes divergences!). Du coup, je doute que la complexité que je ressens à la lecture de tout cela soit complètement nécessaire…
Peut-être que je me trompe?
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Packaging

Messagede Jérôme » Sam 13 Avr 2013, 10:27

Aucune idée. Je te laisse chercher. :)
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: 1060
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Packaging

Messagede djinn » Sam 13 Avr 2013, 11:20

Bon, je vous propose donc de créer une branche "pack" dans le dépôt git pour que vous puissiez tester les modifs packaging dont nous discutons ici. Si on arrive à un truc plus simple et qui marche partout, je réorganiserai les commits proprement et les intégrerai à develop…
Sounds good?
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Packaging

Messagede Jérôme » Sam 13 Avr 2013, 20:11

Yes it does. ;)
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: 1060
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Packaging

Messagede djinn » Lun 15 Avr 2013, 11:54

Bon, après étude plus approfondie de la problématique packaging, ma conclusion à ce stade c'est que nous devrions nous reposer sur setuptools, qui supporte:
  • La création:
    • d'exécutables self-embedded pour les plateformes M&M's (M$ et Mac), via py2exe et py2app
    • de paquets RPM (via distutils sur lequel il vient se greffer)
    • de paquets DEB via stdeb, qui semble la méthode privilégiée par Debian
    • accessoirement, d'EGG Python pour distribution via PyPI
  • Les dépendances sur d'autres paquets (par exemple: lxml>=2.2.2).
  • L'architecture framework+plugins, pour pouvoir distribuer séparément du core des extensions qui seront découverts au runtime:
    • des exercices (ou groupes d'exercices)
    • des traductions
    • des interfaces utilisateur (ou présentations/filtres)
  • D'autres choses qui pourraient également être intéressantes…
… et tout ça avec un seul setup.py! :)
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Packaging

Messagede Jérôme » Lun 15 Avr 2013, 18:18

OK. :)
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: 1060
Inscription: Sam 26 Aoû 2006, 13:10
Localisation: Nantes

Re: Packaging

Messagede djinn » Jeu 18 Avr 2013, 10:41

Pour commencer, j'ai "commité" dans develop le déplacement du package pyromaths dans un sous-dossier homonyme, en essayant dans un premier temps de changer le moins de choses possible au code existant. J'ai modifié les différents scripts qui en dépendent et testé tout ce que je pouvais; Tout, donc, sauf le packaging.
Ça serait sympa que vous testiez que le packaging n'est pas cassé quand vous en aurez le temps, que je puisse corriger le cas échéant (et ainsi comprendre un peu mieux comment il fonctionne dans les différents cas de figure, avant de factoriser).
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Re: Packaging

Messagede Yves » Jeu 18 Avr 2013, 11:30

Sur Mac OS X, le packaging est cassé avec tes modifs:

Code: Tout sélectionner
An unexpected error has occurred during execution of the main script
ImportError: No module named Resources
Avatar de l’utilisateur
Yves
 
Messages: 453
Inscription: Mer 21 Jan 2009, 21:40

Re: Packaging

Messagede djinn » Jeu 18 Avr 2013, 13:26

Merci pour ta réponse rapide. :-)

La seule mention du package Resources que je peux voir dans les fichiers trackés par git est dans scripts/mac/standalone.sh:
# Supprimer les fichiers py inutiles
rm $mac/dist/Pyromaths.app/Contents/Resources/lib/python2.6/lxml/*.py
rm $mac/dist/Pyromaths.app/Contents/Resources/lib/python2.6/lxml/html/*.py
rm $mac/dist/Pyromaths.app/Contents/Resources/site.py
Si je comprends bien, c'est le dossier dans lequel sont copiées les dépendances (lxml en l'occurrence). Or, je n'ai rien touché dans la déclaration de dépendances du setup.py mac…
Par contre, outre la modif' du chemin vers les paquets python, j'ai enlevé la référence explicite à chacun des fichiers du paquet pyromaths (__init__.py, interface.py et Values.py), sachant que ce paquet peut désormais être référencé "normalement" (comme les autres paquets):
diff --git a/scripts/mac/setup.py b/scripts/mac/setup.py
index 860925d..eedb326 100644
--- a/scripts/mac/setup.py
+++ b/scripts/mac/setup.py
@@ -1,7 +1,11 @@
from setuptools import setup

-APP = ['../../src/pyromaths.py']
-DATA_FILES = ['pyromaths.icns', 'qt.conf', '../../src/sixiemes', '../../src/cinquiemes', '../../src/quatriemes', '../../src/troisiemes', '../../src/classes', '../../src/lycee', '../../src/outils', '../../src/__init__.py', '../../src/interface.py', '../../src/Values.py']
+APP = ['../../src/pyromaths/pyromaths.py']
+DATA_FILES = ['pyromaths.icns', 'qt.conf', '../../src/pyromaths',
+ '../../src/pyromaths/sixiemes', '../../src/pyromaths/cinquiemes',
+ '../../src/pyromaths/quatriemes', '../../src/pyromaths/troisiemes',
+ '../../src/pyromaths/classes', '../../src/pyromaths/lycee',
+ '../../src/pyromaths/outils']
OPTIONS = dict(
plist='Info.plist',
argv_emulation=True,
As-tu créé ce setup.py toi-même ou as-tu utilisé py2applet? Je trouve étonnant que ces paquets soient référencés comme data_files et non comme packages… :-/
Est-ce que tu pourrais m'envoyer le contenu du dossier scripts/mac/dist (que je ne peux pas créer moi-même)? Ou à tout le moins le fichier python qui buggue et le message d'erreur complet?
Avatar de l’utilisateur
djinn
 
Messages: 183
Inscription: Dim 03 Mar 2013, 11:38

Suivante

Retourner vers Propositions

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

cron