Meu aplicativo é parecido com este:
main.py janelas/ __init__.py mainwindow.py ... modelo/ __init__.py orders.py ... Recursos/ image1.png logo.jpg ...
O programa é iniciado com main.py. Existe uma boa maneira de criar um aplicativo 'final' a partir disso? Estou pensando em algo como py2exe / py2app, mas sem copiar o interpretador / módulos python para o aplicativo onde se tem apenas um executável.
Dei uma olhada no distutils, mas parece que ele instala um programa no diretório Python, o que não é comum em plataformas não linux.
No momento, eu apenas copio a pasta de origem inteira para a máquina de destino e crio um alias main.pyw
no windows. Alguns inconvenientes:
- O ícone é o ícone python padrão.
- Tenho que criar o alias manualmente.
- No meu diretório de origem, há muitos arquivos adicionais, como a pasta de controle de origem.
- Tenho que renomear
main.py
paramain.pyw
manualmente. - Seria bom se apenas os arquivos `.pyo * estivessem na máquina de destino. Não há uma razão real para isso, eu simplesmente não gosto de arquivos desnecessários.
Como criar uma boa distribuição automatizada?
- para Windows? (Essa é a única plataforma para a qual tenho suporte no momento.)
- para mac?
- para linux?
Respostas:
A maneira normal de distribuir aplicativos Python é com distutils . Ele é feito para distribuir módulos de tipo de biblioteca python e aplicativos python, embora eu não saiba como funciona no Windows. No Windows, você teria que instalar o Python separadamente se usar distutils, em qualquer caso.
Eu provavelmente recomendo que você o distribua com disutils para Linux e Py2exe ou algo semelhante para Windows. Para OS XI não sei. Se for um aplicativo de usuário final, você provavelmente gostaria de um tipo de imagem de disco, não sei como fazer isso. Mas leia esta postagem para obter mais informações sobre a experiência do usuário. Para um aplicativo feito para programadores, você provavelmente concorda com uma instalação do tipo distutils no OS X também.
fonte
dist
e copiar todos os arquivos relevantes nele ?Eu recomendo fortemente o Pyinstaller , que suporta todas as principais plataformas perfeitamente. Como o py2exe e o py2app, ele produz um executável padrão no Windows e um pacote de aplicativos no OS X, mas tem a vantagem de também fazer um trabalho fantástico de resolução automática de dependências comuns e incluí-las sem ajustes extras de configuração.
Observe também que, se estiver implantando o Python 2.6 no Windows, você deve aplicar este patch ao tronco Pyinstaller.
Você indicou que não precisa de um instalador, mas o Inno Setup é uma opção fácil de usar e rápida de configurar para a plataforma Windows.
fonte
Hello world
programa simples ocuparia 500 MB de espaço e tempo de inicialização de 3-5 segundos.Fredrik Lundh
squeeze.py
pode criar um único arquivo que não contém o interpretador Python, mas em vez disso contém bytecode. Com os argumentos corretos, você pode incluir outros arquivos, módulos, etc. no arquivo de resultado. Usei-o com sucesso em um projeto. O programa resultante rodou em OS X, Linux e Windows sem nenhum problema!PS : Cada máquina precisa ter um interpretador Python que seja compatível com o bytecode gerado pelo squeeze.py. Você pode gerar diferentes versões de bytecode para diferentes versões do Python, se necessário (apenas execute squeeze.py com a versão correta do Python).
fonte
Acho que vale a pena mencionar também o PEX (considerando mais a atenção que essa pergunta recebeu e menos a própria pergunta). De acordo com sua própria descrição :
Eu me deparei com isso quando li uma visão geral do pacote para python . Eles postaram esta bela foto lá:
Para resumir: se você pode contar com o python sendo instalado na máquina de destino, use o PEX para produzir um »executável« autocontido que provavelmente terá um tamanho de arquivo menor do que um executável produzido pelo PyInstaller, por exemplo.
fonte
Posso estar enganado, mas o IronPython não tem um compilador embutido para windows?
http://www.ironpython.net
[EDITAR]
Experimente o Cx_Freeze, de longe o melhor compilador .py para .exe (mais alguns .dlls) que já usei.
http://cx-freeze.sourceforge.net/
fonte
Se você estiver distribuindo no Windows, use um instalador para instalar todos os arquivos / interpretadores relevantes, o que for necessário. Distribua um setup.exe. Essa é a melhor maneira no windows. Caso contrário, os usuários reclamarão.
fonte
A maneira mais conveniente * de plataforma cruzada de distribuir aplicativos de desktop Python é contar com o gerenciador de pacotes conda de plataforma cruzada. Existem várias ferramentas que o utilizam:
* O mais conveniente para o desenvolvedor. Suficientemente conveniente para o usuário final.
fonte