Pythonturtle: Compilar pacotes de instalação automaticamente

Criado em 23 set. 2018  ·  31Comentários  ·  Fonte: PythonTurtle/PythonTurtle

Seguindo as questões https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, # 106 e # 90, gostaria de começar a coletar informações sobre como (melhor) fazer empacotamento para todos plataformas em que o PythonTurtle é executado. Quando soubermos realizar o empacotamento manualmente, será fácil automatizar tudo.

Em outras palavras, precisamos

  1. uma lista de tipos de pacotes de
  2. uma lista completa de etapas concretas e detalhadas ( leia: comandos do shell) de como cada tipo de pacote é construído, a partir do código-fonte que reside apenas no controle de origem.

NOTA: Se escrever isso nesta edição for desconfortável, podemos usar a Wiki do

automation

Comentários muito úteis

A próxima grande coisa depois de obter EXE para Windows e pacotes para macOS funcionando pode ser construir um AppImage para Linux. Isso é algo semelhante a um arquivo .dmg em um Mac. Seria uma solução única para todas as distros GNU / Linux! : tada:: smiley:

AppImage também tem (de certa forma) uma AppStore, apelidada de AppImageHub . E a comparação faz você entender que é realmente uma coisa legal. : +1:

Todos 31 comentários

Atualmente, parece que usamos o py2exe e o py2app para Windows e macOS.

De acordo com uma palestra recente na PyCon Otto , devemos mudar para o PyInstaller , que permite construir executáveis ​​autônomos para Windows, macOS e GNU / Linux.

Concordo que devemos usar PyInstaller em vez de py2exe e py2app.

E eu concordo que precisamos de um processo de construção confiável e automático.

Também não devemos nos esquecer de construir o pacote PythonTurtle Python e

Eu também sugiro acionar lançamentos empurrando uma tag Git (com o número da versão) para o repositório GitHub. Os instaladores podem então ser baixados através da página de lançamento . Espero que tudo seja possível de uma forma contínua.

Eu concordo, embora esse tipo de automação seja um objetivo um pouco alto, se chegarmos ao ponto em que pudéssemos fazer um lançamento, eu ficaria em êxtase.

se chegarmos ao ponto em que possamos fazer um lançamento, eu ficaria em êxtase.

Em seguida, prepare seu traje espacial! :sorriso:

Como suspeito, o PyInstaller exigirá a execução na infraestrutura para a qual deve construir o instalador (por exemplo, no Windows para um instalador do Windows, em um Mac para um instalador do macOS).

Não tenho Windows e Mac. Portanto, preciso descobrir como a construção é feita no AppVeyor. Além disso, precisamos de um macOS com Python 3 instalado (e cruze os dedos que a documentação está desatualizada e também podemos construir com Python 3).

Provavelmente, é melhor começar automatizando a construção de um pacote Python (e enviá-lo ao PyPI automaticamente). IIUC, um setup.py é necessário para construir com (alguns recursos do) PyInstaller, de qualquer maneira.
Teremos uma maneira possível de instalar o PythonTurtle desta forma.

Você quer me adicionar como mantenedor do projeto PyPI ? Seria mais fácil para mim automatizar as coisas quando posso usar minhas próprias credenciais. Meu nome de usuário é "bittner", sem surpresa.

Eu adicionei você como mantenedor do PyPI.

Em relação ao PyInstaller, gostaria de saber se uma VM com ReactOS funcionaria para gerar um instalador do Windows.

Para fazer pip install PythonTurtle instalar o programa e todas as dependências necessárias prova ser difícil:

Conclusões:

  • Nós _podíamos_ adicionar install_requires=['wxPython'] a setup() , mas isso falharia a menos que os pré-requisitos ( mencionados no README ) já estivessem instalados. Podemos detectar o - erro muito técnico - e imprimir uma dica útil caso a instalação falhe.
  • Como alternativa, podemos confiar que os usuários realizarão as etapas de instalação no README e deixar o PythonTurtle imprimir um _reminder_ amigável quando o módulo wx não puder ser importado ( ModuleNotFoundError no módulo do aplicativo ).

Fazê-lo de uma forma amigável de "autodetecção de pré-requisitos" usando platform.release() e / ou os.name seria possível, mas também bastante complicado. Sugiro que simplesmente imprimamos uma mensagem de texto e consultemos a seção de instalação do README com um URL.

Eu me pergunto se uma VM com ReactOS funcionaria para gerar um instalador do Windows.

Não tenho certeza de como usaríamos uma VM em um serviço na nuvem que criaria o pacote PythonTurtle de maneira automatizada. Você pode elaborar? (Você pretende usar localmente apenas em uma máquina de desenvolvedor?)

Você está certo, eu não pensei sobre isso.

Acho que há 2 perguntas:

  1. O ReactOS poderia funcionar para gerar um instalador do Windows usando o PyInstaller?

  2. Podemos configurá-lo para funcionar automaticamente na nuvem?

Digamos que a resposta à primeira pergunta seja sim e não haja um provedor de SaaS que ofereça esse serviço. Então, digamos que possamos configurar uma imagem Docker que execute o VirtualBox com um convidado ReactOS. Talvez possamos encontrar um provedor SaaS que execute essa imagem Docker para nós?

https://github.com/pypa/python-packaging-user-guide/issues/267 contém alguns links interessantes para empacotar aplicativos Python.

Assim que o upload do pacote Linux para o GitHub for resolvido (via PR # 123), entraremos no trem CI para o macOS , sim! : yum:

A próxima grande coisa depois de obter EXE para Windows e pacotes para macOS funcionando pode ser construir um AppImage para Linux. Isso é algo semelhante a um arquivo .dmg em um Mac. Seria uma solução única para todas as distros GNU / Linux! : tada:: smiley:

AppImage também tem (de certa forma) uma AppStore, apelidada de AppImageHub . E a comparação faz você entender que é realmente uma coisa legal. : +1:

Parece bom para mim!

A partir de agora, construir um pacote de aplicativos no macOS (usando PyInstaller) não está funcionando totalmente. Como alternativa, pensei, podemos criar uma fórmula Homebrew. No momento, estou olhando a documentação relacionada:

Hmmm, parece que precisa de alguém com um Mac para desenvolver a fórmula com eficácia. Embora não pareça difícil, realmente. :pensamento:

Aqui estão as fórmulas relacionadas ao Python (3):

  • Python (parece instalar o 3.7; Python @ 3 é um link simbólico, um chamado "Alias")
  • wxPython (depende do Python @ 2 , consulte também https://github.com/Homebrew/homebrew-core/issues/32744)

Pode ser suficiente depender de Python@3 (= 3.7) e instalar wxPython via pip ( como em nossos testes ).

Apenas para referência, se os lançamentos automáticos não funcionarem (provavelmente não funcionarão, já que api_key: está definido como apenas um valor de amostra ), é assim que o projeto VSCodium faz lançamentos automáticos no GitHub. : +1:

Ram, você mencionou que o "instalador do Windows" é a principal prioridade do presente. Eu concordo.

Vamos anotar o estado atual da união.

Windows Installer (visão geral do progresso)

  • As compilações do Windows estão funcionando no AppVeyor desde outubro de 2018.
  • Essas compilações criam um binário .EXE do Windows e um instalador .MSI (ver trabalho de exemplo ).
  • O tamanho do arquivo do instalador .MSI é tão pequeno que sugere que ele está realmente vazio.
  • Lembro-me de que você experimentou o .EXE (baixando e executando-o) e confirmou que o .MSI não funcionaria. (Ou foi outra pessoa que testou para mim? Não tenho certeza.)
  • Eu me lembro, mencionei em algum outro problema (ou foi um bate-papo particular nosso?) O que é necessário para construir um instalador MSI funcional (na verdade é apenas um arquivo de projeto do MS Visual Studio, ou algo assim).

Acho que preparei tudo. Agora, como não tenho um computador Windows nem pretendo comprar um (o mesmo para o macOS, por falar nisso), só falta alguém que assumir e colocar a peça do quebra-cabeça que faltava no lugar. Do meu pressentimento, estamos muito, muito perto de "tarefa concluída".

Próximas etapas (é necessário voluntário)

Parece que tudo o que você precisa fazer é criar a configuração necessária com a extensão Microsoft Visual Studio Installer Projects , de acordo com uma resposta no StackOverflow .

Portanto, você pode assumir? O que precisa ser feito, IIUC, é:

  1. Crie um projeto do Visual Studio com uma configuração do instalador
  2. Certifique-se de que o instalador seja compilado com sucesso em sua máquina local
  3. Adicione o arquivo .vdproj a este projeto

O AppVeyor irá então detectar esse arquivo, construir o instalador e fornecê-lo para download na página de artefatos de construção.

Referências

Do meu pressentimento, estamos muito, muito perto de "tarefa concluída".

Não acho que, se começar a trabalhar nisso, estará quase concluído. Eu nem sei como usar o Visual Studio Project, ou qual é o nosso plano atual. Se eu aceitasse essa tarefa, acho que demoraria alguns dias de trabalho em tempo integral.

Você se esforçou muito para fazer isso, então não me sinto bem em dizer isso, mas definitivamente não vou me voluntariar para trabalhar nessa questão. PythonTurtle não está perto de ser uma prioridade na minha vida agora que eu gastaria mais de uma hora, no máximo, para melhorá-la.

Estou sendo chato por apontar para esse problema a partir de outros problemas, dizendo que nada vale nada sem esse problema? Não vou impedi-lo de trabalhar em nenhum outro problema, provavelmente não entraria porque esse esforço parece um desperdício para mim, mas não vou bloqueá-lo, e se você precisar de mim para revisões de código ou pequenas coisas, Ficarei feliz em fazer isso.

Tendo outro pensamento sobre isso. Você diz "Não tenho um computador Windows nem pretendo comprar um". Se sua objeção em fazer os itens listados é porque você fez o suficiente com este tíquete ou prefere não gastar seu tempo fazendo coisas relacionadas ao Windows, então sim, essa é uma objeção justa.

Se o problema é que você não quer gastar dinheiro com uma licença do Windows, talvez isso tenha solução. Uma ideia seria usar o ReactOS e ver se ele executa o Visual Studio Project. Se o ReactOS não for uma opção, talvez eu possa obter uma licença / máquina do Windows para você. Deixe-me saber se isso for útil.

Deixe-me saber se isso for útil.

Você conhece uma pessoa que está _animada_ em programar no Windows? O Windows é um ambiente confuso para Python. Não quero contribuir para uma falsa imagem de "Python + Windows" que se encaixam bem, só isso.

Consulte https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022 para soluções alternativas para construir um instalador MSI (WiX, WiX.Py ). Podemos ter sucesso dessa forma em combinação com o GitHub Actions. Alguém quer dar uma chance a isso?

Alguém quer dar uma chance a isso?

Não sei, então acho que vamos esperar até que um possível voluntário chegue.

Uma lista de tarefas ...

  • [] __Linux__: compilação do pyinstaller com sucesso

    • [] Automatizado nas ações do GitHub

  • [] __macOS__: compilação do pyinstaller com sucesso

    • [] Automatizado nas ações do GitHub

  • [] __Windows__: compilação do pyinstaller com sucesso

    • [] Automatizado nas ações do GitHub

Algumas dicas para ajudá-lo a progredir:

  • [x] Com python3 setup.py clean bundle você pode construir todos os pacotes binários (PyInstaller é usado).
  • [x] Os binários construídos com sucesso para todas as plataformas (incluindo .exe para Windows), pelo que me lembro.
  • [] Os usuários do Windows parecem esperar um instalador do Windows ; pode ser um instalador MSI ou WiX.Py (ambos ainda não foram preparados).
  • [] As ações do GitHub devem enviar automaticamente os binários para nossas versões do GitHub sempre que enviarmos uma tag Git para master ; podemos querer usar algo como ações / criar-liberação para tornar isso menos trabalhoso para nós.

Recebemos uma ótima resposta de @judej sobre a solicitação de ajuda da Comunidade de Desenvolvedores da Microsoft que postei! :alegria:

Resumindo: nenhum MSI é voluntário para nós, mas existem dois projetos mais interessantes, um que cria um instalador e outro que cria um aplicativo ZIP em Python :

  1. pynsist -
  2. shiv - _para construir zipapps Python totalmente independentes, conforme descrito no PEP 441, mas com todas as suas dependências incluídas! _

Essas podem ser duas boas alternativas que valem a pena avaliar. Obrigado Jude! : 100:: medal_military:

Legal. Também ouvi recentemente sobre o PyOxidizer . Ainda não estou 100% certo de ter entendido o projeto ( discussão ), mas é possível que ele faça o que queremos.

Vou tentar fazer isso com shiv no fim de semana. Por favor, tente PyOxidizer e então poderemos comparar as notas.

Desculpe, comecei um novo trabalho há alguns dias e não terei tempo para fazer nada :(

PyOxidizer soa como um experimento para mim: um aplicativo Python em execução em "uma VM Rust", uma camada nativa do sistema operacional criada usando Rust. Não tenho certeza de qual benefício isso oferece. A configuração de PyInstaller que executamos não funciona bem? : 3rd_place_medal:

shiv é uma abordagem totalmente nova (nova em nosso "portfólio" de artefatos de lançamento), que pode ser interessante de fornecer ao nosso público. Acho a ideia emocionante (embora eu esteja pronto para apostar que poucas pessoas vão usá-la). : 2nd_place_medal:

pynsist soa como o instalador do Microsoft Windows que estamos procurando. Isso pode fornecer a experiência do usuário que as pessoas do Windows parecem esperar:: um: Baixe o instalador,: dois: execute-o para instalar e adicionar uma entrada no menu iniciar,: três: iniciar o aplicativo no menu iniciar. : 1st_place_medal:

A desvantagem do pynsist é apenas o Windows. Vou tentar avançar Shiv (do LinkedIn) no Mac e Linux.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

cool-RR picture cool-RR  ·  8Comentários

zmsmith picture zmsmith  ·  5Comentários

ipython picture ipython  ·  3Comentários

hansent picture hansent  ·  3Comentários

ipython picture ipython  ·  39Comentários