Índice
O desenvolvimento explosivo do Python durante a última década provou ao mundo que é um método altamente eficaz e versátil para realizar praticamente algo que você deseja fazer na computação. Também está claro que o Python, no entanto, tem apenas algumas deficiências dolorosas que não podem ser ignoradas.
Certamente uma das maiores deficiências do Python é que é árduo, geralmente irracional, pegar um programa Python que você escreveu e simplesmente entregá-lo a outra pessoa. Linguagens como C e C++, e agora Go e Rust, possuem instrumentos de construção que geram um artefato binário independente. Python, uma linguagem interpretada, requer seu tempo de execução como uma forma de fazer algo. No entanto, agrupar o tempo de execução com seu código é, na melhor das hipóteses, um processo negligente.
Normalmente, você “distribuiria” um utilitário Python fornecendo a alguém o código de fornecimento e informando métodos para organizar o tempo de execução do Python (se ainda não o tiver) e quaisquer dependências para a aplicação. Existem ferramentas que você deve usar para gerar um redistribuível autônomo (basicamente, um artefato que pode ser descompactado em um sistema sem Python e executado como está), mas no momento são todas opções ad hoc de terceiros.
A partir de 2022, ainda não havia uma maneira formal de transformar um programa Python em um produto autônomo. A boa notícia é que, dependendo do dever em questão e das pessoas envolvidas, você pode conseguir usar uma técnica extra comum para distribuir seus propósitos Python.
Este texto parece ser como em vários métodos para fornecer propósitos de Python para outros comerem. Em alguns casos, o consumidor-alvo deve configurar o tempo de execução do Python; em outros, você pode distribuir o aplicativo como autônomo.
Criar um pacote pip instalável
A utilização pip
é o método mais comum e com melhor suporte para agrupar um utilitário Python para reutilização. Basta pegar sua lista de utilitários e equipá-la com um setup.py
arquivo, que o transforma em um pip
pacote instalável. Qualquer pessoa pode iniciar o programa seguinte adicionando um comando à scripts
lista de sua configuração Python, usando a especificação de fatores de entrada em setup.py
.
Você não precisa fornecer o pacote por PyPI, ambos. Você pode hospedá-lo em um repositório Git e, a partir pip set up
dele, usar o git+https://url.to.repository
formato (para repositórios hospedados na web).
Requer tempo de execução | Claro. |
---|---|
Permite o agrupamento de conhecimento | Claro, por meio do MANIFEST.in arquivo, mas normalmente é melhor considerar esse conhecimento somente leitura. |
Executivos | Faz uso dos mecanismos de configuração pessoal do Python. Simples de colocar em uso pip . |
Contras | Requer fazer um setup.py arquivo e estudar métodos para usar a biblioteca setuptools . Além disso, se o aplicativo exigir acesso de leitura e gravação ao conhecimento, ele pode querer colocar esse conhecimento em algum lugar além da site-packages lista onde foi inserido. Qualquer comportamento fora do que é formalmente suportado por um pip set up pacote -able não pode ser tratado. pelo curso configurado de si mesmo. |
Use PyInstaller, py2exe, Nuitka ou outra resolução de agrupamento
Essencialmente, o método mais útil para enviar um utilitário Python a um consumidor é fornecer a ele um executável – um único arquivo ou uma lista com um executável simplesmente reconhecido em algum lugar nele. Para fazer isso, você usaria um programa de terceiros para agrupar o aplicativo e todas as suas dependências e agrupá-lo com uma duplicata do tempo de execução.
O PyInstaller é provavelmente o programa mais conhecido desse tipo e o mais avançado. É extensível o suficiente para permitir que você agrupe os dados e os dados auxiliares e oferece muito controle sobre o pacote resultante – você pode até definir o ícone usado no executável. Outra resolução, Py2exe , funciona igualmente, embora não apresente algumas das opções de agrupamento, lembrando a capacidade de gerar um único executável de descompactação automática.
Um terceiro empreendimento, Nuitka , também cria um pacote redistribuível, mas é um total de empreendimento mais formidável. Ele converte um programa Python e suas bibliotecas relacionadas diretamente em um executável C++ com otimizações de eficiência. (No momento, essas otimizações estão em andamento.)
Mais uma solução é o pacote BeeWare , que os construtores podem usar para escrever e implantar propósitos Python em um método de plataforma cruzada .
Requer tempo de execução | No. |
---|---|
Permite o agrupamento de conhecimento | Claro, por meio de um arquivo de manifesto, que requer a configuração do manual. |
Executivos | Gera artefatos únicos — um pacote com um executável que pode ser descompactado e executado convenientemente. Quando realmente funciona, é sem dúvida a resolução mais útil, tanto quanto o consumidor está ansioso. |
Contras | Nem sempre detecta cada dependência de terceiros desejada; geralmente quer mais dicas sobre quais bibliotecas adicionar ao pacote. O resultado .exe do pacote pode ser geralmente sinalizado como falso construtivo por opções de antivírus (você pode contornar esse problema compilando o .exe .
Além disso, o PyInstaller não faz compilação cruzada. Home windows Com BeeWare, você deve escrever o aplicativo usando as bibliotecas BeeWare para fazer este sistema funcionar em um método de plataforma cruzada. No mínimo, você gostaria de usar a biblioteca Briefcase para agrupar um programa para fornecimento. |
Use Zipapps ou Shiv
Caso seu programa contenha apenas algumas informações sem dependências externas, você pode usar um sistema de empacotamento de utilitários incluído no próprio Python: o Zipapp normal . Uma lista de informações do Python (basicamente, um módulo) será empacotada diretamente em um .pyz
arquivo – um .zip
arquivo -format – e entregue a outra pessoa que tenha o tempo de execução do Python. Um clique no .pyz
arquivo, ou um python file.pyz
comando simples, inicia a aplicação.
A grande desvantagem do Zipapps é que ele pode não agrupar elegantemente pacotes de terceiros. Para isso, a biblioteca Shiv , criada por construtores no LinkedIn, oferece opções para mostrar .pyz
informações em arquivos de extração automática que descompactam dependências, juntamente com binários, diretamente em um subdiretório.
Requer tempo de execução | Claro. |
---|---|
Permite o agrupamento de conhecimento | Não prontamente; você deseja agrupar as informações como se fossem parte de um pacote ou incorporá-las com o zipapp em um arquivo. shiv torna isso incrementalmente mais simples. |
Executivos | Faz uso de mecanismos nativos do Python para agrupar aplicativos. |
Contras | É difícil empacotar módulos de terceiros. shiv torna possível, no entanto, ao preço de exigir que você anote uma setup.py configuração para seu programa. |
Hospede como um serviço de internet
Caso seu utilitário deva estar acessível apenas por meio de uma interface da Internet – ou se essa for a única forma de inscrição que você deseja conceder – você pode simplesmente hospedar o aplicativo como um serviço da Internet. Um utilitário que deve estar disponível apenas regionalmente pode ser hospedado por seus próprios servidores e talvez disponibilizado por uma conexão VPN. Um utilitário voltado para o público pode ser hospedado usando um serviço de hospedagem em nuvem de utilitário.
Caso seu utilitário Python esteja hospedado usando um livro de bolso do Jupyter , é possível configurar um servidor público (ou não menos que interno) para ele usando o JupyterHub .
Requer tempo de execução | Claro, você precisará hospedar o aplicativo com um tempo de execução para que outras pessoas acessem. |
---|---|
Permite o agrupamento de conhecimento | Claro, embora as informações devam ser incluídas manualmente no aspecto do servidor. |
Executivos | Pode ser acessado por uma interface de internet. |
Contras | O aparelho é acessível apenas por uma interface de internet. Um utilitário baseado em console, por exemplo, ou algo com uma GUI, deve ser reformulado para funcionar como um utilitário de Internet. Alguns propósitos podem não funcionar de forma eficaz quando embalados dessa maneira.
Qualquer serviço de utilidade pública pode querer ter medidas de segurança aceitáveis. Isso contém notebooks Jupyter hospedados, que têm seus próprios pontos de segurança peculiares . |
Usar recipientes
Os contêineres (da seleção do Docker) se desenvolveram rapidamente em um padrão de implantação para fins do lado do servidor, com cada sistema operacional principal sendo construído para apoiá-los. Não é mais difícil “dockerizar” um utilitário Python, como um utilitário da Internet , do que construir um contêiner para muitos outros utilitários que usam algum tipo de tempo de execução.
Requer tempo de execução | Não, o tempo de execução é fornecido com o contêiner. |
---|---|
Permite o agrupamento de conhecimento | Claro, como parte do sistema usual de conhecimento em um contêiner. |
Executivos | É um normal amplamente utilizado. |
Contras | Requer a presença de uma plataforma do tipo Docker no gol; não é adequado para aplicativos de desktop. |
Crie um pacote incorporável nas janelas iniciais
Os clientes de janelas domésticas têm apenas uma escolha alternativa, embora isso implique provavelmente o trabalho mais pesado de todos. Para começar, você pode obter um modelo de pacote incorporável do Python para Windows como um .zip
arquivo. É uma configuração mínima e independente do Python que reside em uma única listagem, junto com a biblioteca usual. É possível colocar um utilitário Python nesta lista, juntamente com suas dependências e informações de conhecimento. Você pode configurar as dependências na lista do incorporável com pip
—no entanto, observe que você deseja usar o pip
da configuração Python usada para criar o aplicativo, não do próprio pacote incorporável. (Assista a uma demonstração em vídeo para aprender mais sobre essa ideia.)
Requer tempo de execução | Não, ele vem junto com o aplicativo. |
---|---|
Permite o agrupamento de conhecimento | Claro, embora o método seja totalmente manual. |
Executivos | Todas as peças são agrupadas em uma única lista. |
Contras | A criação manual de tal pacote é difícil e, às vezes, requer muita tentativa e erro para ser adequada. |
Direitos autorais © 2022 IDG Communications, Inc.