Estou construindo um aplicativo Python e não quero forçar meus clientes a instalar o Python e os módulos.
Então, existe uma maneira de compilar um script Python para ser um executável independente?
Estou construindo um aplicativo Python e não quero forçar meus clientes a instalar o Python e os módulos.
Então, existe uma maneira de compilar um script Python para ser um executável independente?
Respostas:
Você pode usar py2exe como já respondido e usar o cython para converter seus .py
arquivos- chave em arquivos .pyc
compilados em C, como .dll
no Windows e .so
no linux, muito mais difíceis de reverter do que os arquivos .pyo
e os comuns .pyc
(e também obter desempenho!)
Você pode usar o PyInstaller para empacotar programas em Python como executáveis independentes. Funciona no Windows, Linux e Mac.
Início rápido do PyInstaller
Instale o PyInstaller a partir do PyPI:
pip install pyinstaller
Vá para o diretório do seu programa e execute:
pyinstaller yourprogram.py
Isso irá gerar o pacote configurável em um subdiretório chamado
dist
.Para uma explicação mais detalhada, consulte o manual .
Você pode querer investigar Nuitka . Ele pega o código-fonte python e o converte em chamadas da API C ++. Em seguida, ele compila em um binário executável (ELF no Linux). Já existe há alguns anos e suporta uma ampla variedade de versões do Python.
Você provavelmente também terá uma melhoria de desempenho se usá-lo. Recomendado.
Gostaria de compilar algumas informações úteis sobre a criação de arquivos autônomos no Windows usando o Python 2.7.
Eu usei py2exe e funciona, mas tive alguns problemas.
Ele mostrou alguns problemas para criar arquivos únicos no Windows 64 bits: O uso de bundle_files = 1 com py2exe não está funcionando ;
É necessário criar um arquivo setup.py para que ele funcione. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
Eu tive problemas com dependências que você precisa resolver importando pacotes no arquivo de instalação;
Não consegui fazê-lo funcionar em conjunto com o PyQt.
Esta última razão me fez tentar PyInstaller http://www.pyinstaller.org/ .
Na minha opinião, é muito melhor porque:
Sugiro a criação de um arquivo .bat com as seguintes linhas, por exemplo (pyinstaller.exe deve estar no caminho do Windows):
pyinstaller.exe --onefile MyCode.py
Você pode criar um único arquivo, entre outras opções ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
Eu tive apenas um problema ao usar o PyInstaller e o pacote de multiprocessamento que foram resolvidos usando esta receita: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Então, acho que, pelo menos para o python 2.7, uma opção melhor e mais simples é o PyInstaller.
--onefile
sinalizador não ajudará você a torná-lo portátil no Windows, porque o executável ainda deseja vincular à api-ms-win-crt-runtime-l1-1-0.dll
biblioteca (ou outras) que deve ser instalada através do vcredist
pacote. Portanto, uma dependência ainda existe e deve ser instalada antes da execução.
Sim, é possível compilar scripts Python em executável independente.
O PyInstaller pode ser usado para converter programas Python em executáveis independentes, no Windows , Linux , Mac OS X , FreeBSD , Solaris e AIX . É um dos conversores recomendados.
py2exe converte scripts Python em apenas executável na plataforma Windows.
Cython é um compilador estático para a linguagem de programação Python e a linguagem de programação estendida Cython.
E uma terceira opção é cx_Freeze
, que é multiplataforma.
cx_Freeze
lançamentos listados no pypi desde o final de 2017. Este projeto foi abandonado?
Use py2exe .... use os arquivos de configuração abaixo:
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import matplotlib
setup(
console=['PlotMemInfo.py'],
options={
'py2exe': {
'packages' : ['matplotlib'],
'dll_excludes': ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll']
}
},
data_files = matplotlib.get_py2exe_datafiles()
)
Eu gosto do pyinstaller - especialmente a variante "windowed":
pyinstaller --onefile --windowed myscript.py
Ele criará um único arquivo * .exe em uma pasta dist /.
Eu também recomendo o pyinstaller
para melhor compatibilidade com versões anteriores, como o python 2.3 - 2.7.
para py2exe , você precisa ter o python 2.6
Para scripts Python 3.2, a única opção é o Cxfreeze. Construa a partir de fontes, caso contrário não funcionará.
Para o python 2.x, sugiro o pyinstaller, pois ele pode empacotar um programa python em um único executável, ao contrário do CxFreeze, que também gera bibliotecas.
O py2exe criará o arquivo exe que você deseja, mas você precisa da mesma versão do MSVCR90.dll na máquina em que irá usar o seu novo exe. Consulte http://www.py2exe.org/index.cgi/Tutorial para obter mais informações.
Você pode encontrar a lista de utilitários de distribuição listados em https://wiki.python.org/moin/DistributionUtilities .
Eu uso o bbfreeze e tem funcionado muito bem (ainda para ter suporte ao python 3).
.so
arquivos ou copia os arquivos .egg diretamente e eles devem estar presentes em um único diretório (ou como um único arquivo). Não é necessária instalação.
Usando pyinstaller, encontrei um método melhor usando o atalho para o .exe em vez de fazer --onefile
. De qualquer forma, provavelmente existem alguns arquivos de dados e, se você estiver executando um aplicativo baseado em site, seu programa também depende de arquivos html, js, css. Não adianta mover todos esses arquivos para algum lugar. Em vez disso, se movermos o caminho de trabalho para cima.
Faça um atalho para o exe, mova-o para cima e defina os caminhos de destino e de inicialização, conforme especificado, para ter caminhos relativos indo para dist \ folder: É
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
possível renomear o atalho para qualquer coisa que seja renomeada para "GTFS-Manager"
Agora, quando eu dobro -clique no atalho, é como se eu tivesse executado o arquivo em python! Achei essa abordagem melhor que a seguinte --onefile
:
Ah, lembre-se de excluir a pasta de compilação após a compilação, economizará tamanho.
Use o Cython para converter para c, compilar e vincular ao gcc. Outra poderia ser: criar as funções principais em c (aquelas que você deseja dificultar a reversão), compilá-las e usar o python boost para importar o código compilado (além de obter uma execução de código muito mais rápida). depois use qualquer ferramenta mencionada para distribuir.
Disseram-me que o PyRun, https://www.egenix.com/products/python/PyRun/ , também é uma opção.