Existem muitas, muitas, muitas, muitas, muitas, muitas maneiras de fazer isso. Vou analisar os princípios por trás de cada um, e é o caso de uso.
1. Um ambiente python
Existem diversas formas de fazer isto. pipenv
, condomínio requirments.txt
, etc etc.
Com alguns deles, você pode especificar versões do python. Com outras pessoas, basta especificar um intervalo de versões do python com as quais você sabe que funciona - por exemplo, se você estiver usando o python 3.7, é improvável que não suporte o 3.6; há apenas uma ou duas pequenas alterações. 3.8 também deve funcionar.
Outro método semelhante é setup.py
. Eles geralmente são usados para distribuir bibliotecas - como PyInstaller (outra solução que mencionarei abaixo), ou numpy, wxPython ou PyQt5 etc. - para uso na importação / linha de comando. O guia de empacotamento python é bastante útil, e há muitos tutoriais por aí. (google python setup.py tutorial
) Você também pode especificar requisitos nesses arquivos.
2. Um contêiner
Docker é o grande. Se você nunca ouviu falar, ficarei surpreso. Um rápido google de um resumo vem com isso , do qual cito parte:
Então, por que todo mundo adora containers e Docker? James Bottomley, ex-CTO de virtualização de servidores da Parallels e um dos principais desenvolvedores de kernel do Linux, explicou os hipervisores de VM, como Hyper-V, KVM e Xen, todos "baseados na emulação de hardware virtual. Isso significa que eles são gordos em termos de requisitos de sistema."
Os contêineres, no entanto, usam sistemas operacionais compartilhados. Isso significa que eles são muito mais eficientes do que os hipervisores em termos de recursos do sistema. Em vez de virtualizar o hardware, os contêineres ficam sobre uma única instância do Linux. Isso significa que você pode "deixar para trás o lixo inútil de 99,9% da VM, deixando uma cápsula pequena e limpa contendo seu aplicativo"
Isso deve resumir para você. (Observe que você não precisa de um sistema operacional específico para contêineres.)
3. Um arquivo executável
Existem 2 ferramentas principais que fazem isso no momento da escrita. PyInstaller e cx_Freeze. Ambos são desenvolvidos ativamente. Ambos são de código aberto.
Você pega seu script e a ferramenta o compila no bytecode, localiza as importações, copia-as e cria um ambiente python portátil que executa seu script no sistema de destino sem que o usuário final precise de python.
Pessoalmente, prefiro o PyInstaller - sou um dos desenvolvedores. O PyInstaller fornece todas as suas funcionalidades por meio de um script de linha de comando e suporta a maioria das bibliotecas que você pode imaginar - e é extensível para suportar mais. cx_Freeze requer um script de instalação.
Ambas as ferramentas suportam janelas, Linux, macOS e muito mais. O PyInstaller pode criar exes de arquivo único ou um pacote de uma pasta, enquanto o cx_Freeze suporta apenas pacotes de uma pasta. O PyInstaller 3.6 suporta python 2.7 e 3.5-3.7 - mas o 4.0 não suporta o python 2. O cx_Freeze abandonou o suporte ao python 2 a partir da última versão principal (6.0 acho).
Enfim, basta sobre os recursos das ferramentas; você mesmo pode olhar para eles. (Consulte https://pyinstaller.org e https://cx-freeze.readthedocs.io para obter mais informações)
Ao usar esse método de distribuição, você geralmente fornece o código-fonte no repositório do GitHub, alguns exes (um para cada plataforma) prontos para download e instruções sobre como criar o código em um arquivo executável.