Come posso raggruppare altri file quando si usa cx_freeze?
Domanda
Sto usando Python 2.6 e cx_Freeze 4.1.2 su un sistema Windows. Ho creato il setup.py per costruire la mia eseguibile e tutto funziona bene.
Quando cx_Freeze corre, si muove tutto nella directory build
. Ho alcuni altri file che vorrei inclusi nella mia directory build
. Come posso fare questo? Ecco la mia struttura:
src\
setup.py
janitor.py
README.txt
CHNAGELOG.txt
helpers\
uncompress\
unRAR.exe
unzip.exe
Ecco il mio frammento:
setup
( 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 ) ] )
Non riesco a farlo funzionare. Ho bisogno di un file di MANIFEST.in
?
Soluzione
capito.
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')]
)
Nota:
-
include_files
deve contenere "solo" i percorsi relativi allo scriptsetup.py
altrimenti la costruzione fallirà. -
include_files
può essere una lista di stringhe cioè un gruppo di file con i loro percorsi relativi
o -
include_files
può essere una lista di tuple in cui la prima metà del tupla è il nome del file con il percorso assoluto e la seconda metà è il nome del file di destinazione con il percorso assoluto.
(quando la mancanza della documentazione si pone, consultare Kermit la rana)
Altri suggerimenti
C'è un esempio più complesso a: cx_freeze - wxPyWiki
La documentazione mancante di tutte le opzioni e ': cx_Freeze (Internet Archive)
Con cx_Freeze
, ho ancora ottenere un output di generazione di 11 file in una singola cartella, anche se, a differenza di Py2Exe
.
Al fine di trovare i file allegati (include_files = [-> your attached files <-]
) è necessario inserire la seguente funzione nel codice 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)
Inoltre è possibile creare script separato che copierà i file dopo la compilazione. E 'quello che io uso per ricostruire l'applicazione su Windows (si dovrebbe avere "utilità GNU per Win32" installate a fare "cp" funziona).
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