J'utilise Python 2.6 et cx_Freeze 4.1.2 sur un système Windows. J'ai créé le setup.py pour construire mon exécutable et tout fonctionne bien.
Lorsque cx_Freeze s'exécute, il déplace tout vers le répertoire build
. J'ai d'autres fichiers que j'aimerais inclure dans mon répertoire build
. Comment puis-je faire ceci? Voici ma structure:
src\
setup.py
janitor.py
README.txt
CHNAGELOG.txt
helpers\
uncompress\
unRAR.exe
unzip.exe
Voici mon extrait:
installer
( name='Janitor', version='1.0', description='Janitor', author='John Doe', author_email='[email protected]', url='http://www.this-page-intentionally-left-blank.org/', data_files = [ ('helpers\uncompress', ['helpers\uncompress\unzip.exe']), ('helpers\uncompress', ['helpers\uncompress\unRAR.exe']), ('', ['README.txt']) ], executables = [ Executable\ ( 'janitor.py', #initScript ) ] )
Je n'arrive pas à faire fonctionner ça. Ai-je besoin d'un MANIFEST.in
fichier?
Deviner.
from cx_Freeze import setup,Executable
includefiles = ['README.txt', 'CHANGELOG.txt', 'helpers\uncompress\unRAR.exe', , 'helpers\uncompress\unzip.exe']
includes = []
excludes = ['Tkinter']
packages = ['do','khh']
setup(
name = 'myapp',
version = '0.1',
description = 'A general enhancement utility',
author = 'lenin',
author_email = '[email protected]',
options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [Executable('janitor.py')]
)
Remarque:
include_files
doit contenir "uniquement" des chemins relatifs vers setup.py
script sinon la construction échouera.include_files
peut être une liste de chaînes, c'est-à-dire un tas de fichiers avec leurs chemins d'accès relatifsinclude_files
peut être une liste de tuples dans laquelle la première moitié du Tuple est le nom du fichier avec le chemin absolu et la seconde moitié est le nom du fichier de destination avec le chemin absolu.(En cas de manque de documentation, consultez Kermit la grenouille)
Il y a un exemple plus complexe à: cx_freeze - wxPyWiki
La documentation manquante de toutes les options est à: cx_Freeze (Internet Archive)
Avec cx_Freeze
, J'ai toujours une sortie de build de 11 fichiers dans un seul dossier, contrairement à Py2Exe
.
Alternatives: Emballage | La souris contre Python
Pour trouver vos fichiers joints (include_files = [-> your attached files <-]
), vous devez insérer la fonction suivante dans votre code setup.py:
def find_data_file(filename):
if getattr(sys, 'frozen', False):
# The application is frozen
datadir = os.path.dirname(sys.executable)
else:
# The application is not frozen
# Change this bit to match where you store your data files:
datadir = os.path.dirname(__file__)
return os.path.join(datadir, filename)
Vous pouvez également créer un script séparé qui copiera les fichiers après la génération. C'est ce que j'utilise pour reconstruire l'application sur Windows (vous devriez avoir "GNU utilities for win32" installé pour que "cp" fonctionne).
build.bat:
cd .
del build\*.* /Q
python setup.py build
cp -r icons build/exe.win32-2.7/
cp -r interfaces build/exe.win32-2.7/
cp -r licenses build/exe.win32-2.7/
cp -r locale build/exe.win32-2.7/
pause