Une question revient souvent : "Comment faire un fichier Exe" à partir d'un petit programme, souvent sous pygame.
Voici ci dessous un copié-collé d'un code bien fait (merci Tyrtamos)
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Icone sous Windows: il faut:
=> un xxx.ico pour integration dans le exe, avec "icon=xxx.ico"
=> un xxx.png pour integration avec PyQt4 + demander la recopie avec includefiles.
"""
import sys, os
from cx_Freeze import setup, Executable
#############################################################################
# preparation des options
# chemins de recherche des modules
# ajouter d'autres chemins (absolus) si necessaire: sys.path + ["chemin1", "chemin2"]
path = sys.path
# options d'inclusion/exclusion des modules
includes = [] # nommer les modules non trouves par cx_freeze
excludes = []
packages = [] # nommer les packages utilises
# copier les fichiers non-Python et/ou repertoires et leur contenu:
includefiles = []
if sys.platform == "win32":
pass
# includefiles += [...] : ajouter les recopies specifiques à Windows
elif sys.platform == "linux2":
pass
# includefiles += [...] : ajouter les recopies specifiques à Linux
else:
pass
# includefiles += [...] : cas du Mac OSX non traite ici
# pour que les bibliotheques binaires de /usr/lib soient recopiees aussi sous Linux
binpathincludes = []
if sys.platform == "linux2":
binpathincludes += ["/usr/lib"]
# niveau d'optimisation pour la compilation en bytecodes
optimize = 0
# si True, n'affiche que les warning et les erreurs pendant le traitement cx_freeze
silent = True
# construction du dictionnaire des options
options = {"path": path,
"includes": includes,
"excludes": excludes,
"packages": packages,
"include_files": includefiles,
"bin_path_includes": binpathincludes,
"create_shared_zip": False, # <= ne pas generer de fichier zip
"include_in_shared_zip": False, # <= ne pas generer de fichier zip
"compressed": False, # <= ne pas generer de fichier zip
"optimize": optimize,
"silent": silent
}
# pour inclure sous Windows les dll system de Windows necessaires
if sys.platform == "win32":
options["include_msvcr"] = True
#############################################################################
# preparation des cibles
base = None
if sys.platform == "win32":
base = "Win32GUI" # pour application graphique sous Windows
# base = "Console" # pour application en console sous Windows
icone = None
if sys.platform == "win32":
icone = "icone.ico"
cible_1 = Executable(
script="monprogramme1.pyw",
base=base,
compress=False, # <= ne pas generer de fichier zip
copyDependentFiles=True,
appendScriptToExe=True,
appendScriptToLibrary=False, # <= ne pas generer de fichier zip
icon=icone
)
cible_2 = Executable(
script="monprogramme2.pyw",
base=base,
compress=False,
copyDependentFiles=True,
appendScriptToExe=True,
appendScriptToLibrary=False,
icon=icone
)
#############################################################################
# creation du setup
setup(
name="monprogramme",
version="1.00",
description="monprogramme",
author="auteurduprogramme",
options={"build_exe": options},
executables=[cible_1, cible_2]
)
Chez moi ça marche bien en faisant les ptites modif adéquates. Mais, ceci implique de devoir retoucher le code au cas par cas. Comme je lisais un bon tuto sur Tkinter (http://fsincere.free.fr/isn/python/cours_python_tkinter.php)
je me suis dis que l'allais essayé d'automatiser le truc avec une ptite GUI vite fait bien fait.C'est l'occasion de relire ce qui concerne le path et le cours sur le setup.
MAIS, le cours sur le setup n'est pas adapté à mon petit exemple : je ne vais pas distribuer sur pypy, je veux quelquechose de simple.
Donc ma problematique est de trouver la liste des modules non standards qu'il faudra mettre dans OPTIONS.par exemple pygame .
J'ai fais un mini-fichier setup pour tester le bon fonctionnement, voici:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys, os
import setuptools
import main
path = sys.path
mesimports = setuptools.find_packages()
print(mesimports)
input("PAUSE - tapez sur espace")
J'obtiens une liste vide ! Pourtant le fichier main, dans le meme repertoire, importe pygame et le jeu marche.
Bref, comment faire pour lister tous les modules et packages non standards, de façon à pouvoir automatiser cx_freeze ?