Crie um único executável de um projeto Python

87

Eu quero criar um único executável do meu projeto Python. O usuário deve ser capaz de fazer o download e executá-lo sem precisar instalar o Python. Se eu estivesse apenas distribuindo um pacote, poderia usar pip, wheel e PyPI para construí-lo e distribuí-lo, mas isso requer que o usuário tenha Python e saiba como instalar pacotes. O que posso usar para construir um executável autocontido de um projeto Python?

ShadowFlame
fonte
Ainda estou escrevendo em 2.x (2.7.2 para ser exato), mas posso ver a necessidade de transferir para 3.x (se os módulos e outros forem compatíveis) e também precisarei de uma solução.
ShadowFlame de
Observe que a embalagem complicará muito o diagnóstico de problemas. Não só você (ou pdb) não tem acesso fácil aos arquivos que estão sendo executados, py2exe(não sei sobre os outros) não inclui .pyarquivos, então você não verá linhas de origem nos rastreamentos de pilha.
ivan_pozdeev
Apenas como um ponto de interesse, comecei a usar o pyinstaller
ShadowFlame de

Respostas:

114

Aqui estão alguns exemplos comuns. A menos que explicitamente indicado, todos os projetos listados abaixo estão sendo mantidos ativamente desde minha última edição (janeiro de 2020).

Também incluí links para seus respectivos sites, repositórios e listas de PyPi, caso você queira verificar por si mesmo a frequência com que eles foram atualizados.

Além disso, salvo indicação em contrário, todos os programas listados abaixo produzirão um exe especificamente para o sistema operacional em que está sendo executado. Portanto, por exemplo, executar o Pyinstaller no Windows produzirá um exe do Windows, mas executar o Pyinstaller no Linux produzirá um exe do Linux. Se você quiser produzir um exe para vários sistemas operacionais, terá que examinar o uso de máquinas virtuais ou algo como o Wine .


Todos os programas a seguir funcionam de forma semelhante - eles agrupam o Python e o seu programa, combinando-os efetivamente para produzir um executável.

  • PyInstaller:

    • Links : Site || Repo || PyPi
    • Suporta : Python 2.7 e Python 3.4 - 3.7 no Windows, Mac e Linux.
  • cx_Freeze:

    • Links: Site || Repo || PyPi
    • Suporta: Python 2.7 e 3.5 - 3.8 no Windows, Mac e Linux.
  • py2app:

    • Links: Site || Repo || PyPi
    • Suporta: Python 2.7 e 3.3 (?) - 3.7 (?) Somente no Mac.
    • Nota: Na minha última edição, não fui capaz de determinar de forma conclusiva a faixa exata de versões do Python suportadas pelo pyapp. A versão mais recente menciona o suporte ao Python 3.7.

Nota: as versões anteriores deste post incluíam write-ups para py2exe ( repo ) e bbfreeze ( repo ). Ambos os projetos foram removidos desta lista: eles viram pouca ou nenhuma atividade por vários anos e parecem estar completamente sem manutenção. Veja o histórico de edições para as redações antigas.


Claro, essa não é a única maneira de fazer as coisas:

  • pynsist:

    • Links: Site || Repo || PyPi
    • Suporta: Todas as versões Python? Observação - criará apenas instaladores do Windows .
    • Outras notas: Pynsist parece oferecer suporte ao agrupamento de qualquer versão arbitrária de Python com seu aplicativo. No entanto, a própria ferramenta requer Python 3.5+ para funcionar.

      O Pynsist criará um instalador do Windows para o seu programa, que instalará diretamente o Python no computador do usuário em vez de agrupá-lo com o seu código e criará atalhos que vinculam ao seu script Python. Embora este programa produza apenas instaladores do Windows, parece que você ainda pode executar o Pynsist em computadores Mac e Linux.

  • Nuitka:

    • Links: Site || Repo (espelho Github) || PyPi
    • Suporta: Python 2.6 - 2.7 e Python 3.3 - 3.7 no Windows, Mac e Linux.
    • Outras notas: Nuitka literalmente compilará seu código Python e produzirá um exe (ao contrário de outros projetos, que simplesmente incluem Python) para tentar acelerar seu código. Como efeito colateral, você também receberá um exe útil para distribuir. Observe que você precisa ter um compilador C ++ disponível em seu sistema.
  • cython:

    • Links: Site || Repo || PyPi
    • Suporta: Python 2.6 - 2.7 e Python 3.2 - 3.8 no Windows, Mac e Linux.
    • Outras notas: Cython é semelhante ao Nuitka por ser um compilador Python. No entanto, em vez de compilar seu código diretamente, ele o compilará em C. Você pode então pegar esse código C e transformá-lo em um exe . Você precisará ter um compilador C disponível em seu sistema.

Minha preferência pessoal é usar o PyInstaller, pois é o mais fácil de instalar e executar, foi projetado para funcionar bem com várias bibliotecas populares, como numpy ou pygame, e tem grande compatibilidade com vários sistemas operacionais e versões de Python.

No entanto, também construí vários exes com sucesso usando cx_Freeze sem muita dificuldade, então você também deve considerar experimentar esse programa.

Ainda não tive a chance de experimentar extensivamente o pynist, Nuitka ou Cython, mas eles parecem soluções muito interessantes e inovadoras. Se você tiver problemas ao usar o primeiro grupo de programas, pode valer a pena tentar um destes três. Como eles funcionam de maneira fundamentalmente diferente dos programas estilo Pyinstaller / cx_freeze, eles podem ter sucesso naqueles casos extremos em que o primeiro grupo falha.

Em particular, acho que pynist é uma boa maneira de contornar todo o problema de distribuição de seu código: Macs e Linux já têm suporte nativo para Python, e apenas instalar Python no Windows pode realmente ser a solução mais limpa. (A desvantagem agora é que você precisa se preocupar em almejar várias versões das bibliotecas de instalação do Python +)

Nuitka e Cython (em minha experiência limitada) parecem funcionar muito bem. Novamente, eu mesmo não os testei extensivamente e, portanto, minha principal observação é que eles parecem demorar muito mais para produzir um exe do que os programas do estilo "congelar".


Dito isso, converter seu programa Python em um executável não é necessariamente a única maneira de distribuir seu código. Para saber mais sobre as outras opções disponíveis, consulte os seguintes links:

Michael0x2a
fonte
1
Observe que você também precisa incluir em seu pacote o Microsoft C ++ Redistributables (também conhecido como msvcrxx.dll, onde xxé um número de versão) para fazer o .exe executar (ou pedir aos usuários que o instalem por conta própria). Isso é necessário porque o Python é desenvolvido no Windows usando o Visual Studio.
gaborous
Portanto, parece que nenhum dos IDE do python (pycharm ou pydev - pluggin eclipse) ainda não incorporou a funcionalidade de compilação para executável único no próprio IDE. Isso é correto? :-)
Nelda.techspiress
Se você se preocupa em manter seguro seu código-fonte, provavelmente Cython é a melhor escolha porque compila o código C. Esses programas que usam a técnica de congelamento geralmente podem ser facilmente descompilados.
Martín De la Fuente
PyInstaller está listado acima como compatível com Python 3.7. Isso não é verdade de acordo com minha experiência e de acordo com a descrição em pyinstaller.org, que afirma "PyInstaller funciona com Python 2.7 e 3.3-3.6".
Tom
1
@Tom - Depois de fazer um pouco mais de pesquisa, parece que, embora o próprio pyinstaller ofereça suporte ao Python 3.7, eles não lançaram oficialmente uma nova versão com suporte ao 3.7. (Por exemplo, seu repositório github afirma que eles suportam Python 3.7 +, eles parecem não ter mais problemas em aberto relacionados ao 3.7, mas a versão mais recente do pyinstaller no PyPi é de dezembro de 2017). Portanto, se você precisa do suporte 3.7, pode tentar compilar + instalar o pyinstaller diretamente do código-fonte ou esperar até o próximo lançamento. (Ou use outro programa, é claro)
Michael0x2a
10

pyinstaller ainda está em desenvolvimento ativo. Você pode ver as últimas mudanças no GitHub.

Tem suporte para as três plataformas principais:

  • Windows (32 bits e 64 bits)
  • Linux (32 bits e 64 bits)
  • Mac OS X (32 bits e 64 bits)

e é compatível com as versões 2.6 e 2.7 do Python. Não é compatível com Python 3, mas existe um branch experimental do Python 3 .

Atualizar

A partir da versão 3.2.1, ele oferece suporte a Python 2.7, 3.3-3.5

Jterrace
fonte
2

Melhor uso pip install auto-py-to-exeque fornece uma bela IU com todas as opções necessárias para criar um executável.

Após a instalação, basta digitar auto-py-to-exeseu terminal ou prompt de comando.

Auto-py-to-exe

Ratnesh Kushwaha
fonte
obrigado por ainda responder em um tópico tão antigo como este. Parece ser um achado incrível e realmente simplifica o trabalho ao configurar, além de fornecer o comando real usado: D
ShadowFlame