Como posso agrupar outros arquivos ao usar cx_freeze?
Pergunta
Estou usando Python 2.6 e cx_Freeze 4.1.2 em um sistema Windows.Criei o setup.py para construir meu executável e tudo funciona bem.
Quando cx_Freeze é executado, ele move tudo para o build
diretório.Tenho alguns outros arquivos que gostaria de incluir em meu build
diretório.Como posso fazer isso?Aqui está minha estrutura:
src\
setup.py
janitor.py
README.txt
CHNAGELOG.txt
helpers\
uncompress\
unRAR.exe
unzip.exe
Aqui está meu trecho:
configurar
( 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 ) ] )
Não consigo fazer isso funcionar.Eu preciso de um MANIFEST.in
arquivo?
Solução
Descobri.
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')]
)
Observação:
include_files
deve conter "apenas" caminhos relativos para osetup.py
script, caso contrário, a compilação falhará.include_files
pode ser uma lista de strings, ou seja, um monte de arquivos com seus caminhos relativos
ouinclude_files
pode ser uma lista de tuplas em que a primeira metade da tupla é o nome do arquivo com o caminho absoluto e a segunda metade é o nome do arquivo de destino com o caminho absoluto.
(Quando surgir a falta da documentação consulte Caco, o Sapo)
Outras dicas
Há um exemplo mais complexo em: cx_freeze - wxPyWiki
A documentação que falta de todas as opções está em: cx_Freeze (arquivo da Internet)
Com cx_Freeze
, ainda recebo uma saída de compilação de 11 arquivos em uma única pasta, ao contrário de Py2Exe
.
Alternativas: Embalagem | O mouse vs.Pitão
Para encontrar seus arquivos anexados (include_files = [-> your attached files <-]
) você deve inserir a seguinte função em seu 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)
Além disso, você pode criar um script separado que copiará os arquivos após a compilação.É o que eu uso para reconstruir o aplicativo no Windows (você deve ter "utilitários GNU para win32" instalados para fazer o "cp" funcionar).
construir.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