Comment puis-je regrouper d'autres fichiers lors de l'utilisation cx_freeze?
Question
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 fonctionne, il se déplace tout au répertoire build
. J'ai d'autres fichiers que je souhaite 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:
Configuration
( name='Janitor', version='1.0', description='Janitor', author='John Doe', author_email='john.doe@gmail.com', 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 ne peux pas sembler obtenir ce travail. Ai-je besoin d'un fichier MANIFEST.in
?
La solution
figured it out.
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 = 'le...@null.com',
options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [Executable('janitor.py')]
)
Note:
-
include_files
doit contenir « seulement » des chemins relatifs au scriptsetup.py
autre la construction échouera. -
include_files
peut être une liste de chaînes i.e. un tas de fichiers avec leurs chemins relatifs
ou -
include_files
peut être une liste de tuples dans lequel 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.
(Lorsque l'absence de la documentation se pose, consultez Kermit la grenouille)
Autres conseils
Il y a un exemple plus complexe à: cx_freeze - wxPyWiki
La documentation manque de toutes les options est à: cx_Freeze (Internet Archive)
Avec cx_Freeze
, je reçois encore une sortie de construction de 11 fichiers dans un seul dossier, bien que, contrairement à Py2Exe
.
Alternatives: Packaging | La souris Vs. Python
Pour trouver vos fichiers joints (de 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 script séparé qui copie des fichiers après la construction. Il est ce que j'utilise pour reconstruire l'application sur Windows (vous devriez avoir « utilitaires GNU pour win32 » installés pour faire « 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