python - instalar - cx_freeze tutorial
¿Cómo puedo agrupar otros archivos cuando uso cx_freeze? (4)
Estoy usando Python 2.6 y cx_Freeze 4.1.2 en un sistema Windows. Creé setup.py para construir mi ejecutable y todo funciona bien.
Cuando se ejecuta cx_Freeze, mueve todo al directorio de build
. Tengo algunos otros archivos que me gustaría incluir en mi directorio de build
. ¿Cómo puedo hacer esto? Aquí está mi estructura:
src/
setup.py
janitor.py
README.txt
CHNAGELOG.txt
helpers/
uncompress/
unRAR.exe
unzip.exe
Aquí está mi fragmento:
preparar
( 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 ) ] )
Parece que no puedo hacer que esto funcione. ¿Necesito un archivo MANIFEST.in
?
Hay un ejemplo más complejo en: cx_freeze - wxPyWiki
La falta de documentación de todas las opciones está en: cx_Freeze (Internet Archive)
Sin cx_Freeze
, con cx_Freeze
, todavía obtengo un resultado de compilación de 11 archivos en una sola carpeta, a diferencia de Py2Exe
.
Alternativas: Embalaje | El ratón vs. Pitón
Lo averigué.
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'')]
)
Nota:
-
include_files
debe contener "solo" rutas relativas al scriptsetup.py
contrario la compilación fallará. -
include_files
puede ser una lista de cadenas, es decir, un grupo de archivos con sus rutas relativas
o -
include_files
puede ser una lista de tuplas en la que la primera mitad de la tupla es el nombre de archivo con la ruta absoluta y la segunda mitad es el nombre de archivo de destino con la ruta absoluta.
(Cuando surge la falta de documentación, consulte a Kermit the Frog)
Para encontrar sus archivos adjuntos ( include_files = [-> your attached files <-]
) debe insertar la siguiente función en su código 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)
También puede crear un script separado que copiará los archivos después de la compilación. Es lo que utilizo para reconstruir la aplicación en Windows (debe tener instaladas las "utilidades de GNU para win32" para hacer que funcione "cp").
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