Bonjour à tous,
Je pense que ma question est un problème assez classique mais 1) je n'ai
pas réussi à trouver des explications claires et 2) je suis très loin
d'être un expert python.
Par exemple, je veux déployer cette "application" (elle crée juste un
fichier pdf avec écrit "blabla" dedans) :
#---------------------------------
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
styles = getSampleStyleSheet()
story = []
texte = "Blabla blabla. " * 40
story.append(Paragraph(texte, styles["Normal"]))
story.append(Spacer(0, 0.5 *cm))
story.append(Paragraph(texte, styles["Normal"]))
pdf = SimpleDocTemplate('test.pdf', pagesize¤,
title='Premier Test', author='FL')
pdf.build(story)
#---------------------------------
Mon objectif est le suivant : je voudrais distribuer cette "application"
à d'autre personnes de manière à ce qu'ils aient à faire le minimum au
niveau installation.
L'idéal serait qu'un utilisateur ait seulement à faire ceci :
1. Il installe python sur son système.
2. Il télécharge une archive blablapdf.zip et procède à une extraction.
3. Il va dans le dossier blablapdf et lance un script python du genre
main.py.
Évidemment, si l'application n'utilisait que des modules de la
bibliothèque standard, ce serait facile. Mais là, reportlab est utilisé
et il n'en fait pas partie. Typiquement, je voudrais éviter à
l'utilisateur d'avoir à l'installer par lui-même sur son système. Est-ce
possible et comment ?
Merci d'avance pour votre aide.
PS : je suis sous Debian Squeeze et utilise python version 2.6.6.
Bonjour à tous,
Je pense que ma question est un problème assez classique mais 1) je n'ai
pas réussi à trouver des explications claires et 2) je suis très loin
d'être un expert python.
Par exemple, je veux déployer cette "application" (elle crée juste un
fichier pdf avec écrit "blabla" dedans) :
#---------------------------------
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
styles = getSampleStyleSheet()
story = []
texte = "Blabla blabla. " * 40
story.append(Paragraph(texte, styles["Normal"]))
story.append(Spacer(0, 0.5 *cm))
story.append(Paragraph(texte, styles["Normal"]))
pdf = SimpleDocTemplate('test.pdf', pagesize¤,
title='Premier Test', author='FL')
pdf.build(story)
#---------------------------------
Mon objectif est le suivant : je voudrais distribuer cette "application"
à d'autre personnes de manière à ce qu'ils aient à faire le minimum au
niveau installation.
L'idéal serait qu'un utilisateur ait seulement à faire ceci :
1. Il installe python sur son système.
2. Il télécharge une archive blablapdf.zip et procède à une extraction.
3. Il va dans le dossier blablapdf et lance un script python du genre
main.py.
Évidemment, si l'application n'utilisait que des modules de la
bibliothèque standard, ce serait facile. Mais là, reportlab est utilisé
et il n'en fait pas partie. Typiquement, je voudrais éviter à
l'utilisateur d'avoir à l'installer par lui-même sur son système. Est-ce
possible et comment ?
Merci d'avance pour votre aide.
PS : je suis sous Debian Squeeze et utilise python version 2.6.6.
Bonjour à tous,
Je pense que ma question est un problème assez classique mais 1) je n'ai
pas réussi à trouver des explications claires et 2) je suis très loin
d'être un expert python.
Par exemple, je veux déployer cette "application" (elle crée juste un
fichier pdf avec écrit "blabla" dedans) :
#---------------------------------
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
styles = getSampleStyleSheet()
story = []
texte = "Blabla blabla. " * 40
story.append(Paragraph(texte, styles["Normal"]))
story.append(Spacer(0, 0.5 *cm))
story.append(Paragraph(texte, styles["Normal"]))
pdf = SimpleDocTemplate('test.pdf', pagesize¤,
title='Premier Test', author='FL')
pdf.build(story)
#---------------------------------
Mon objectif est le suivant : je voudrais distribuer cette "application"
à d'autre personnes de manière à ce qu'ils aient à faire le minimum au
niveau installation.
L'idéal serait qu'un utilisateur ait seulement à faire ceci :
1. Il installe python sur son système.
2. Il télécharge une archive blablapdf.zip et procède à une extraction.
3. Il va dans le dossier blablapdf et lance un script python du genre
main.py.
Évidemment, si l'application n'utilisait que des modules de la
bibliothèque standard, ce serait facile. Mais là, reportlab est utilisé
et il n'en fait pas partie. Typiquement, je voudrais éviter à
l'utilisateur d'avoir à l'installer par lui-même sur son système. Est-ce
possible et comment ?
Merci d'avance pour votre aide.
PS : je suis sous Debian Squeeze et utilise python version 2.6.6.
Il y a la solution cx_freeze qui permet de générer un ensemble de
fichiers autonomes. Même pas la peine d'installer Python. Je n'ai jamais
utilisé cx_freeze par contre, j'ai déjà utilisé py2exe qui est
l'équivalent sous Windows. Avec py2exe, il est même possible de générer
un fichier unique, un installeur. L'utilisateur final n'a qu'a installer
l'application et l'utiliser.
Sinon, il me semble que les eggs sont faits pour résoudre ton problème
comme tu le décris. A vérifier.
Il y a la solution cx_freeze qui permet de générer un ensemble de
fichiers autonomes. Même pas la peine d'installer Python. Je n'ai jamais
utilisé cx_freeze par contre, j'ai déjà utilisé py2exe qui est
l'équivalent sous Windows. Avec py2exe, il est même possible de générer
un fichier unique, un installeur. L'utilisateur final n'a qu'a installer
l'application et l'utiliser.
Sinon, il me semble que les eggs sont faits pour résoudre ton problème
comme tu le décris. A vérifier.
Il y a la solution cx_freeze qui permet de générer un ensemble de
fichiers autonomes. Même pas la peine d'installer Python. Je n'ai jamais
utilisé cx_freeze par contre, j'ai déjà utilisé py2exe qui est
l'équivalent sous Windows. Avec py2exe, il est même possible de générer
un fichier unique, un installeur. L'utilisateur final n'a qu'a installer
l'application et l'utiliser.
Sinon, il me semble que les eggs sont faits pour résoudre ton problème
comme tu le décris. A vérifier.
En fait, j'ai testé cx_freeze mais sans succès. J'avais des messages de
modules manquants et même en jouant avec les options et en ajoutant les
fameux modules, à l'exécution, j'avais plein d'erreur de modules
manquants malgré tout. Bref, je ne suis arrivé à rien de probant.
En fait, j'ai testé cx_freeze mais sans succès. J'avais des messages de
modules manquants et même en jouant avec les options et en ajoutant les
fameux modules, à l'exécution, j'avais plein d'erreur de modules
manquants malgré tout. Bref, je ne suis arrivé à rien de probant.
En fait, j'ai testé cx_freeze mais sans succès. J'avais des messages de
modules manquants et même en jouant avec les options et en ajoutant les
fameux modules, à l'exécution, j'avais plein d'erreur de modules
manquants malgré tout. Bref, je ne suis arrivé à rien de probant.
for keyname in standardEncodings:
modname = '_fontdata_enc_%s' % keyname.lower()[:-8]
module = __import__(modname, globals(), locals())
encodings[keyname] = getattr(module, keyname)
Même si je me doute bien qu'il y a un import de quelque chose, je serais
incapable de dire quoi et cxfreeze non plus. D'ailleurs, cette fonction
__import__(), je ne sais pas trop ce qu'elle fait. Mais si j'ajoute les
import *explicitement* dans mon script blabla.py, alors à cxfreeze le
voit et mon .exe fonctionne impeccable. Donc il faut ajouter des lignes
d'import inutiles d'un point de vue Python pour dire à cxfreeze «
attention mon cher cxfreeze, je t'avertis qu'il faudra que tu m'englobe
tous ces modules dans ton .exe ! »
for keyname in standardEncodings:
modname = '_fontdata_enc_%s' % keyname.lower()[:-8]
module = __import__(modname, globals(), locals())
encodings[keyname] = getattr(module, keyname)
Même si je me doute bien qu'il y a un import de quelque chose, je serais
incapable de dire quoi et cxfreeze non plus. D'ailleurs, cette fonction
__import__(), je ne sais pas trop ce qu'elle fait. Mais si j'ajoute les
import *explicitement* dans mon script blabla.py, alors à cxfreeze le
voit et mon .exe fonctionne impeccable. Donc il faut ajouter des lignes
d'import inutiles d'un point de vue Python pour dire à cxfreeze «
attention mon cher cxfreeze, je t'avertis qu'il faudra que tu m'englobe
tous ces modules dans ton .exe ! »
for keyname in standardEncodings:
modname = '_fontdata_enc_%s' % keyname.lower()[:-8]
module = __import__(modname, globals(), locals())
encodings[keyname] = getattr(module, keyname)
Même si je me doute bien qu'il y a un import de quelque chose, je serais
incapable de dire quoi et cxfreeze non plus. D'ailleurs, cette fonction
__import__(), je ne sais pas trop ce qu'elle fait. Mais si j'ajoute les
import *explicitement* dans mon script blabla.py, alors à cxfreeze le
voit et mon .exe fonctionne impeccable. Donc il faut ajouter des lignes
d'import inutiles d'un point de vue Python pour dire à cxfreeze «
attention mon cher cxfreeze, je t'avertis qu'il faudra que tu m'englobe
tous ces modules dans ton .exe ! »
La fonction __import__() permet de faire des importations de modules de
façon dynamique.
C'est ça qui pose problème à cx_freeze car celui-ci ne peut analyser que
les import statiques. Les import dynamiques ne sont "vus" par cx_freeze
et par conséquent, les modules correspondants ne sont pas ajoutés à
l'exécutable.
Une solution est effectivement d'importer explicitement les modules qui
posent problème. Par contre, il serait préférable de faire ces import
dans le script de configuration de cx_freeze. De cette manière, ton soft
n'est pas modifié et tu peux en faire un exécutable quand même.
La fonction __import__() permet de faire des importations de modules de
façon dynamique.
C'est ça qui pose problème à cx_freeze car celui-ci ne peut analyser que
les import statiques. Les import dynamiques ne sont "vus" par cx_freeze
et par conséquent, les modules correspondants ne sont pas ajoutés à
l'exécutable.
Une solution est effectivement d'importer explicitement les modules qui
posent problème. Par contre, il serait préférable de faire ces import
dans le script de configuration de cx_freeze. De cette manière, ton soft
n'est pas modifié et tu peux en faire un exécutable quand même.
La fonction __import__() permet de faire des importations de modules de
façon dynamique.
C'est ça qui pose problème à cx_freeze car celui-ci ne peut analyser que
les import statiques. Les import dynamiques ne sont "vus" par cx_freeze
et par conséquent, les modules correspondants ne sont pas ajoutés à
l'exécutable.
Une solution est effectivement d'importer explicitement les modules qui
posent problème. Par contre, il serait préférable de faire ces import
dans le script de configuration de cx_freeze. De cette manière, ton soft
n'est pas modifié et tu peux en faire un exécutable quand même.
#-----------------------------------------
Traceback (most recent call last):
File "/home/francois/cxfreeze/cx_Freeze/initscripts/Console.py", line
27, in <module>
exec code in m.__dict__
File "test.py", line 1, in <module>
exit()
NameError: name 'exit' is not defined
#-----------------------------------------
La fonction exit() n'est pas définie, c'est un peu fort de café quand
même. Une idée ?
2) Autre question : est-il possible, avec un cx_freeze installé sur une
Debian, de «compiler» un programme python pour obtenir un exà ©cutable
pour Windows et non pas pour Linux ?
#-----------------------------------------
Traceback (most recent call last):
File "/home/francois/cxfreeze/cx_Freeze/initscripts/Console.py", line
27, in <module>
exec code in m.__dict__
File "test.py", line 1, in <module>
exit()
NameError: name 'exit' is not defined
#-----------------------------------------
La fonction exit() n'est pas définie, c'est un peu fort de café quand
même. Une idée ?
2) Autre question : est-il possible, avec un cx_freeze installé sur une
Debian, de «compiler» un programme python pour obtenir un exà ©cutable
pour Windows et non pas pour Linux ?
#-----------------------------------------
Traceback (most recent call last):
File "/home/francois/cxfreeze/cx_Freeze/initscripts/Console.py", line
27, in <module>
exec code in m.__dict__
File "test.py", line 1, in <module>
exit()
NameError: name 'exit' is not defined
#-----------------------------------------
La fonction exit() n'est pas définie, c'est un peu fort de café quand
même. Une idée ?
2) Autre question : est-il possible, avec un cx_freeze installé sur une
Debian, de «compiler» un programme python pour obtenir un exà ©cutable
pour Windows et non pas pour Linux ?
cx_freeze fonctionne en empaquetant l'interpréteur (qui dépend de
l'architecture) et le code python (qui n'en dépend pas). Il faut do nc
lui demander de n'empaqueter que le code python, et laisser cx_freeze
faire son boulot de l'autre coté.
a) J'imagine alors que l'exécutable obtenu ne sera pas "standalone" dans
ce cas et que le système devra avoir un interpréteur Python ins tallé,
c'est ça ? (ce qui, au passage, n'est pas un problème. Mais je voudrais
être sûr de bien comprendre.)
b) Comment fait-on pour demander à cx_freeze de ne pas empaqueter
l'interpréteur ? Je ne vois pas dans la mini sur internet de cx_free ze.
D'autant plus que, lors de la « compilation cx_freeze » de mon script,
j'utilise quand même la bibliothèque tierce reportlab que je vo udrais,
quant à ellen, empaqueter dans l'exécutable.
cx_freeze fonctionne en empaquetant l'interpréteur (qui dépend de
l'architecture) et le code python (qui n'en dépend pas). Il faut do nc
lui demander de n'empaqueter que le code python, et laisser cx_freeze
faire son boulot de l'autre coté.
a) J'imagine alors que l'exécutable obtenu ne sera pas "standalone" dans
ce cas et que le système devra avoir un interpréteur Python ins tallé,
c'est ça ? (ce qui, au passage, n'est pas un problème. Mais je voudrais
être sûr de bien comprendre.)
b) Comment fait-on pour demander à cx_freeze de ne pas empaqueter
l'interpréteur ? Je ne vois pas dans la mini sur internet de cx_free ze.
D'autant plus que, lors de la « compilation cx_freeze » de mon script,
j'utilise quand même la bibliothèque tierce reportlab que je vo udrais,
quant à ellen, empaqueter dans l'exécutable.
cx_freeze fonctionne en empaquetant l'interpréteur (qui dépend de
l'architecture) et le code python (qui n'en dépend pas). Il faut do nc
lui demander de n'empaqueter que le code python, et laisser cx_freeze
faire son boulot de l'autre coté.
a) J'imagine alors que l'exécutable obtenu ne sera pas "standalone" dans
ce cas et que le système devra avoir un interpréteur Python ins tallé,
c'est ça ? (ce qui, au passage, n'est pas un problème. Mais je voudrais
être sûr de bien comprendre.)
b) Comment fait-on pour demander à cx_freeze de ne pas empaqueter
l'interpréteur ? Je ne vois pas dans la mini sur internet de cx_free ze.
D'autant plus que, lors de la « compilation cx_freeze » de mon script,
j'utilise quand même la bibliothèque tierce reportlab que je vo udrais,
quant à ellen, empaqueter dans l'exécutable.
Bonsoir,
Je continue dans mes essais de cx_freeze et j'ai voulu le tester sous ma
Debian (Squeeze) pour faire un "exécutable" sous Linux. Mais là, je me
heurte à un curieux problème.
1) Pas de problème pour l'installation de cx_freeze (j'ai dû installer
le paquet python-dev qui me faisait défaut). Mais ensuite, j'ai un
problème, avec le mini-script suivant :
exit()
Rien qu'avec ça, quand je « compile » mon script avec cx_freeze, et que
je lance l'exécutable, j'obtiens ça :
#-----------------------------------------
Traceback (most recent call last):
File "/home/francois/cxfreeze/cx_Freeze/initscripts/Console.py", line
27, in <module>
exec code in m.__dict__
File "test.py", line 1, in <module>
exit()
NameError: name 'exit' is not defined
#-----------------------------------------
La fonction exit() n'est pas définie, c'est un peu fort de café quand
même. Une idée ?
Bonsoir,
Je continue dans mes essais de cx_freeze et j'ai voulu le tester sous ma
Debian (Squeeze) pour faire un "exécutable" sous Linux. Mais là, je me
heurte à un curieux problème.
1) Pas de problème pour l'installation de cx_freeze (j'ai dû installer
le paquet python-dev qui me faisait défaut). Mais ensuite, j'ai un
problème, avec le mini-script suivant :
exit()
Rien qu'avec ça, quand je « compile » mon script avec cx_freeze, et que
je lance l'exécutable, j'obtiens ça :
#-----------------------------------------
Traceback (most recent call last):
File "/home/francois/cxfreeze/cx_Freeze/initscripts/Console.py", line
27, in <module>
exec code in m.__dict__
File "test.py", line 1, in <module>
exit()
NameError: name 'exit' is not defined
#-----------------------------------------
La fonction exit() n'est pas définie, c'est un peu fort de café quand
même. Une idée ?
Bonsoir,
Je continue dans mes essais de cx_freeze et j'ai voulu le tester sous ma
Debian (Squeeze) pour faire un "exécutable" sous Linux. Mais là, je me
heurte à un curieux problème.
1) Pas de problème pour l'installation de cx_freeze (j'ai dû installer
le paquet python-dev qui me faisait défaut). Mais ensuite, j'ai un
problème, avec le mini-script suivant :
exit()
Rien qu'avec ça, quand je « compile » mon script avec cx_freeze, et que
je lance l'exécutable, j'obtiens ça :
#-----------------------------------------
Traceback (most recent call last):
File "/home/francois/cxfreeze/cx_Freeze/initscripts/Console.py", line
27, in <module>
exec code in m.__dict__
File "test.py", line 1, in <module>
exit()
NameError: name 'exit' is not defined
#-----------------------------------------
La fonction exit() n'est pas définie, c'est un peu fort de café quand
même. Une idée ?