Eu pensei ter ouvido falar que o py2exe era capaz de fazer isso, mas nunca entendi. Alguém já fez isso com sucesso? Posso ver seu arquivo setup.py e quais opções de linha de comando você usou?
Basicamente, estou pensando em me dar um único arquivo executável que faz algo como descompacta-se em talvez / temp e é executado.
Respostas:
PyInstaller criará um único arquivo .exe sem dependências; use a
--onefile
opção Ele faz isso compactando todas as bibliotecas compartilhadas necessárias no executável e descompactando-as antes da execução, assim como você descreve (EDIT: py2exe também possui esse recurso, consulte a resposta da minty )Eu uso a versão do PyInstaller do svn, pois a versão mais recente (1.3) está um pouco desatualizada. Ele está funcionando muito bem para um aplicativo que depende de PyQt, PyQwt, numpy, scipy e mais alguns.
fonte
A maneira de fazer isso usando py2exe é usar a opção bundle_files no seu arquivo setup.py. Para um único arquivo, você deseja definir
bundle_files
1,compressed
como True e definir a opção zipfile como Nenhum. Dessa forma, ele cria um arquivo compactado para facilitar a distribuição.Aqui está uma descrição mais completa da opção bundle_file citada diretamente no site py2exe *
Aqui está um exemplo de setup.py:
fonte
windows = [{'script': "single.py"}]
comconsole = ['single.py']
um clique duplo para que o arquivo fosse aberto em uma janela CMD no Windows.Como o outro pôster mencionado, py2exe, irá gerar um executável + algumas bibliotecas para carregar. Você também pode ter alguns dados para adicionar ao seu programa.
O próximo passo é usar um instalador, empacotar tudo isso em um programa instalável / não instalável fácil de usar.
Eu uso o InnoSetup ( http://www.jrsoftware.org/isinfo.php ) com prazer há vários anos e em programas comerciais, por isso recomendo vivamente.
fonte
Consegui criar um único arquivo exe com todos os recursos incorporados no exe. Estou construindo nas janelas. de modo a explicar algumas das chamadas do os.system que estou usando.
Primeiro, tentei converter todas as minhas imagens em bitmats e depois todos os meus arquivos de dados em cadeias de texto. mas isso fez com que o exe final fosse muito, muito grande.
Depois de pesquisar no google por uma semana, descobri como alterar o script py2exe para atender às minhas necessidades.
aqui está o link do patch no sourceforge que enviei, por favor, poste comentários para que possamos incluí-lo na próxima distribuição.
http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583
isso explica todas as alterações feitas, simplesmente adicionei uma nova opção à linha de instalação. aqui está o meu setup.py.
vou tentar comentar da melhor maneira possível. Saiba que meu setup.py é complexo, devido ao fato de eu acessar as imagens por nome de arquivo. então devo armazenar uma lista para acompanhá-los.
isso é de um protetor de tela que eu estava tentando criar.
Eu uso exec para gerar minha configuração em tempo de execução, é mais fácil cortar e colar assim.
demolir
script = py script eu quero virar para um exe
icon_resources = o ícone para o exe
file_resources = arquivos que eu quero incorporar no exe
other_resources = uma string para incorporar no exe, neste caso uma lista de arquivos.
options = py2exe opções para criar tudo em um arquivo exe
bitmap_strings = uma lista de arquivos para incluir
Observe que file_resources não é uma opção válida até você editar o arquivo py2exe.py, conforme descrito no link acima.
primeira vez que tentei postar código neste site, se eu entendi errado, não me chame.
ok, é isso para o setup.py agora a mágica necessária para acessar as imagens. Eu desenvolvi este aplicativo sem py2exe em mente e o adicionei mais tarde. então você verá acesso para ambas as situações. se a pasta da imagem não puder ser encontrada, ela tenta extrair as imagens dos recursos exe. o código irá explicar isso. isso faz parte da minha classe de sprite e usa um directx. mas você pode usar qualquer API que desejar ou apenas acessar os dados brutos. não importa.
Qualquer pergunta ficou livre para perguntar.
fonte
\'file_resources': [('txt2.txt')]
, ocorre um erro (o arquivo que eu quero inserir no meu .exe é denominado txt2 e é um arquivo .txt )Você deve criar um instalador, como mencionado anteriormente. Embora também seja possível permitir que o py2exe agrupe tudo em um único executável, definindo a opção bundle_files como 1 e o argumento da palavra-chave zipfile como None, não recomendo isso para aplicativos PyGTK.
Isso ocorre porque o GTK + tenta carregar seus arquivos de dados (locais, temas etc.) do diretório em que foi carregado. Portanto, você deve garantir que o diretório do seu executável contenha também as bibliotecas usadas pelo GTK + e os diretórios lib, share e etc da sua instalação do GTK +. Caso contrário, você terá problemas ao executar seu aplicativo em uma máquina em que o GTK + não esteja instalado em todo o sistema.
Para mais detalhes, leia meu guia sobre py2exe para aplicativos PyGTK . Ele também explica como agrupar tudo, exceto o GTK +.
fonte
Disseram-me que o bbfreeze criará um único arquivo .EXE e é mais recente que o py2exe.
fonte
Recentemente, usei o py2exe para criar um executável para pós-revisão para enviar revisões ao ReviewBoard.
Esse foi o setup.py que eu usei
Ele criou um diretório que contém o arquivo exe e as bibliotecas necessárias. Eu não acho que é possível usar o py2exe para obter apenas um único arquivo .exe. Se você precisar, primeiro precisará usar o py2exe e, em seguida, usar alguma forma de instalador para tornar o executável final.
Uma coisa para cuidar é que todos os arquivos egg que você usa no seu aplicativo precisam ser descompactados, caso contrário, o py2exe não poderá incluí-los. Isso é abordado nos documentos py2exe.
fonte
tente congelar c_x , pode criar um bom standalone
fonte
Não, ele não fornece um único executável no sentido de que você só tem um arquivo depois - mas você tem um diretório que contém tudo o que você precisa para executar seu programa, incluindo um arquivo exe.
Acabei de escrever este arquivo setup.py hoje. Você só precisa invocar
python setup.py py2exe
.fonte