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?

Foi útil?

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 o setup.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
    ou
  • include_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)

Veja cx-freeze:usando arquivos de dados

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top