Pythonturtle: Créer des packages d'installation automatiquement

Créé le 23 sept. 2018  ·  31Commentaires  ·  Source: PythonTurtle/PythonTurtle

Suite aux problèmes https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, #106 et #90, j'aimerais commencer à collecter des informations sur la meilleure façon de faire des emballages pour tous plates-formes sur lesquelles PythonTurtle s'exécute. Lorsque nous saurons comment effectuer l'emballage manuellement, il sera facile de tout automatiser.

En d'autres termes, nous avons besoin

  1. une liste des types de packages cibles (par exemple, MSI pour Windows, macOS AppImage, Debian DEB, RPM, Snap) et
  2. une liste complète d'étapes concrètes et détaillées ( lire: commandes shell) de la façon dont chaque type de package est construit, à partir du code source vivant dans le contrôle de source uniquement.

REMARQUE : si écrire ceci dans ce numéro s'avère inconfortable, nous pouvons utiliser le Wiki du

automation

Commentaire le plus utile

La prochaine bonne chose après avoir obtenu EXE pour Windows et des bundles pour macOS pourrait être de créer une AppImage pour Linux. C'est quelque chose de similaire à un fichier .dmg sur un Mac. Ce serait une solution unique pour toutes les distributions GNU/Linux ! :tada: :smiley:

AppImage possède également (un peu) un AppStore, baptisé AppImageHub . Et la comparaison vous fait comprendre que c'est vraiment un truc cool. :+1:

Tous les 31 commentaires

Nous semblons actuellement utiliser py2exe et py2app pour Windows et macOS.

Selon une récente conférence à PyCon Otto, nous devrions passer à PyInstaller , qui permet de créer des exécutables autonomes pour Windows, macOS et GNU/Linux.

Je suis d'accord que nous devrions absolument utiliser PyInstaller au lieu de py2exe et py2app.

Et je suis d'accord que nous avons besoin d'un processus de construction fiable et automatique.

Nous ne devons pas non plus oublier de créer le package PythonTurtle Python et de le transmettre à PyPI lors de la publication.

Je suggérerais également de déclencher des versions en poussant une balise Git (avec le numéro de version) vers le référentiel GitHub. Les programmes d'installation peuvent alors être téléchargés via la page de publication . J'espère que tout cela est possible de manière transparente.

Je suis d'accord, bien que ce type d'automatisation soit un objectif un peu élevé, si nous arrivons même au point où nous pourrions faire une version, je serais ravi.

si nous arrivions même au point où nous pourrions faire une sortie, je serais ravi.

Alors préparez votre combinaison spatiale ! :le sourire:

Comme on le soupçonne, PyInstaller devra s'exécuter sur l'infrastructure pour laquelle il doit construire le programme d'installation (par exemple sur Windows pour un programme d'installation Windows, sur un Mac pour un programme d'installation macOS).

Je n'ai ni Windows ni Mac. Par conséquent, je dois faire la lourde tâche de découvrir comment la construction est effectuée sur AppVeyor. De plus, nous avons besoin d'un macOS avec Python 3 installé (et croisez les doigts pour que la documentation n'est qu'obsolète et que nous pouvons également construire avec Python 3).

Je vais probablement commencer par automatiser la construction d'un package Python (et le télécharger automatiquement sur PyPI). IIUC, un setup.py est nécessaire pour construire avec (certaines fonctionnalités de) PyInstaller, de toute façon.
Nous aurons déjà une façon possible d'installer PythonTurtle de cette façon.

Voulez-vous m'ajouter en tant que mainteneur au projet PyPI ? Cela me permettrait d'automatiser plus facilement les choses lorsque je peux utiliser mes propres informations d'identification. Mon nom d'utilisateur est "bittner", sans surprise.

Je vous ai ajouté en tant que mainteneur sur PyPI.

Concernant PyInstaller, je me demande si une VM avec ReactOS fonctionnerait pour générer un programme d'installation Windows.

Pour faire en sorte que pip install PythonTurtle installe le programme et toutes les dépendances nécessaires s'avère difficile :

Conclusion :

  • Nous _pourrions_ ajouter install_requires=['wxPython'] à setup() , mais cela échouerait à moins que les prérequis ( mentionnés dans le README ) soient déjà installés. Nous pourrons peut-être détecter l'erreur très technique et imprimer un indice utile en cas d'échec de l'installation.
  • Comme alternative, nous pouvons faire confiance aux utilisateurs pour effectuer les étapes d'installation dans le README et laisser PythonTurtle imprimer un _rappel_ convivial lorsque le module wx ne peut pas être importé ( ModuleNotFoundError dans le module d' application ).

Faire soit de manière conviviale « détection automatique des prérequis » en utilisant platform.release() et/ou os.name serait possible mais aussi assez lourd. Je suggère, nous imprimons simplement un message texte et renvoyons à la section d'installation du README avec une URL.

Je me demande si une machine virtuelle avec ReactOS fonctionnerait pour générer un programme d'installation Windows.

Je ne sais pas comment nous utiliserions une machine virtuelle sur un service dans le cloud qui construirait le package PythonTurtle de manière automatisée. Peux-tu élaborer? (Voulez-vous une utilisation locale sur une machine de développeur uniquement ?)

Tu as raison, je n'y ai pas réfléchi.

Je suppose qu'il y a 2 questions :

  1. ReactOS pourrait-il fonctionner pour générer un programme d'installation Windows à l'aide de PyInstaller ?

  2. Pourrions-nous le configurer pour qu'il fonctionne automatiquement, sur le cloud ?

Disons que la réponse à la première question est oui, et qu'il n'y a pas de fournisseur SaaS qui offre ce service. Ensuite, disons que nous pouvons configurer une image Docker qui exécute VirtualBox avec un invité ReactOS. Peut-être pouvons-nous trouver un fournisseur SaaS qui exécutera cette image Docker pour nous ?

https://github.com/pypa/python-packaging-user-guide/issues/267 contient quelques liens intéressants vers l'empaquetage d'applications Python.

Dès que le téléchargement du bundle Linux sur GitHub sera réglé (via PR #123), nous sauterons dans le train CI pour macOS , ouais ! :Miam:

La prochaine bonne chose après avoir obtenu EXE pour Windows et des bundles pour macOS pourrait être de créer une AppImage pour Linux. C'est quelque chose de similaire à un fichier .dmg sur un Mac. Ce serait une solution unique pour toutes les distributions GNU/Linux ! :tada: :smiley:

AppImage possède également (un peu) un AppStore, baptisé AppImageHub . Et la comparaison vous fait comprendre que c'est vraiment un truc cool. :+1:

Cela me semble bon !

Pour l'instant, la création d'un ensemble d'applications sur macOS (à l'aide de PyInstaller) ne fonctionne pas pleinement. Comme alternative, ai-je pensé, nous pourrions créer une formule Homebrew. Je regarde actuellement la documentation associée :

Hmmm, on dirait qu'il a besoin de quelqu'un avec un Mac pour développer efficacement la formule. Bien que cela ne semble pas difficile, vraiment. :pensée:

Voici les formules liées à Python (3) :

  • Python (semble installer 3.7 ; Python@3 est un lien symbolique, un soi-disant "Alias")
  • wxPython (dépend de Python@2 , voir aussi https://github.com/Homebrew/homebrew-core/issues/32744)

Il peut suffire de dépendre de Python@3 (=3.7) et d'installer wxPython via pip ( comme dans nos tests ).

Juste pour référence, si les versions automatiques ne fonctionnent pas (elles ne fonctionneront probablement pas actuellement puisque le api_key: est défini sur un exemple de valeur ), voici comment le projet VSCodium effectue les versions automatiques sur GitHub. :+1:

Ram, vous avez mentionné que "Windows Installer" était la priorité absolue du présent. Je suis d'accord.

Notons l'état actuel du syndicat.

Windows Installer (aperçu de la progression)

  • Les builds Windows fonctionnent sur AppVeyor depuis octobre 2018.
  • Ces versions créent un binaire Windows .EXE et un programme d'installation .MSI (voir l' exemple de travail ).
  • La taille du fichier du programme d'installation .MSI est si petite qu'elle suggère qu'il est en fait vide.
  • Je me souviens que vous avez essayé le .EXE (en le téléchargeant et en l'exécutant) et vous avez confirmé que le .MSI ne fonctionnerait pas. (Ou était-ce quelqu'un d'autre qui l'a testé pour moi ? Pas sûr.)
  • Je me souviens, j'ai mentionné dans un autre numéro (ou était-ce une discussion privée de nous ?)

Je pense que j'ai tout préparé. Maintenant, comme je n'ai pas d'ordinateur Windows et que je prévois d'en acheter un (idem pour macOS d'ailleurs), il ne manque plus que quelqu'un qui prend le relais et remet en place la pièce manquante du puzzle. D'après mon intuition, nous sommes vraiment très proches de la « tâche terminée ».

Prochaines étapes (bénévolat recherché)

Il semble que tout ce que vous avez à faire est de créer la configuration nécessaire avec l'extension Microsoft Visual Studio Installer Projects , selon une réponse sur StackOverflow .

Alors, pouvez-vous prendre le relais ? Ce qu'il faut faire, IIUC, c'est :

  1. Créer un projet Visual Studio avec une configuration d'installation
  2. Assurez-vous que le programme d'installation se construit avec succès sur votre ordinateur local
  3. Ajouter le fichier .vdproj à ce projet

AppVeyor détectera ensuite ce fichier, créera le programme d'installation et le fournira en téléchargement sur la page de création d' artefacts .

Les références

D'après mon intuition, nous sommes vraiment très proches de la « tâche terminée ».

Je ne pense pas que si je commence à travailler dessus, ce sera presque terminé. Je ne sais même pas comment utiliser Visual Studio Project, ni quel est notre plan actuel. Si je devais assumer cette tâche, je suppose que cela prendrait quelques jours de travail à temps plein.

Vous avez consacré beaucoup d'efforts à cela, donc je ne me sens pas bien de vous le dire, mais je ne me porterai certainement pas volontaire pour travailler sur ce problème. PythonTurtle n'est pas près d'être une priorité dans ma vie en ce moment, je passerais plus d'une heure, au maximum, à l'améliorer.

Suis-je ennuyeux en désignant ce problème à partir d'autres problèmes, en disant que rien ne vaut rien sans ce problème ? Je ne vous empêcherai pas de travailler sur d'autres problèmes, je ne rejoindrais probablement pas parce que cet effort me semble vain, mais je ne vous bloquerai pas, et si vous avez besoin de moi pour des revues de code ou de petites choses, Je serai heureux de le faire.

Avoir une autre pensée à ce sujet. Vous dites "Je n'ai pas d'ordinateur Windows et je prévois d'en acheter un". Si votre objection à faire les éléments que vous avez énumérés est parce que vous en avez fait assez sur ce ticket, ou que vous préférez ne pas passer votre temps à faire des choses liées à Windows, alors oui, c'est une objection juste.

Si le problème est que vous ne voulez pas dépenser d'argent pour une licence Windows, alors c'est peut-être soluble. Une idée serait d'utiliser ReactOS et de voir si cela exécute Visual Studio Project. Si ReactOS n'est pas une option, alors je pourrais peut-être vous obtenir une licence/une machine Windows. Faites-moi savoir si cela est utile.

Faites-moi savoir si cela est utile.

Connaissez-vous une personne _enthousiaste_ à propos de la programmation sous Windows ? Windows est un environnement désordonné pour Python. Je ne veux pas contribuer à une fausse image de "Python + Windows" qui vont bien ensemble, c'est tout.

Voir https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022 pour des solutions alternatives pour créer un programme d'installation MSI (WiX, WiX.Py ). Nous pouvons réussir de cette façon en combinaison avec les actions GitHub. Est-ce que quelqu'un veut tenter le coup ?

Est-ce que quelqu'un veut tenter le coup ?

Je ne le fais pas, donc je suppose que nous attendrons qu'un éventuel volontaire arrive.

Une liste de tâches...

  • [ ] __Linux__ : compilation réussie de pyinstaller

    • [ ] Automatisé sur les actions GitHub

  • [ ] __macOS__ : build pyinstaller réussie

    • [ ] Automatisé sur les actions GitHub

  • [ ] __Windows__ : pyinstaller build réussi

    • [ ] Automatisé sur les actions GitHub

Quelques conseils pour progresser :

  • [x] Avec python3 setup.py clean bundle vous pouvez construire tous les bundles binaires (PyInstaller est utilisé).
  • [x] Les binaires sont construits avec succès pour toutes les plates-formes (y compris .exe pour Windows), pour ce que je me souviens.
  • [ ] Les utilisateurs de Windows semblent s'attendre à un programme d' installation de Windows ; il peut s'agir d'un programme d'installation MSI ou WiX.Py (les deux ne sont pas encore préparés).
  • [ ] Les actions GitHub devraient automatiquement envoyer des binaires à nos versions GitHub chaque fois que nous envoyons une balise Git à master ; nous pouvons vouloir utiliser quelque chose comme actions/create-release pour rendre cela moins laborieux pour nous.

Nous avons reçu une réponse super sympa de @judej sur la demande d'aide de la communauté des développeurs Microsoft que j'avais publiée ! :joie:

Conclusion : aucun volontaire MSI pour nous, mais il existe deux autres projets intéressants, l'un qui construit un programme d'installation et l'autre qui crée une application Python ZIP :

  1. pynsist -
  2. shiv - _pour créer des zipapps Python entièrement autonomes, comme indiqué dans PEP 441, mais avec toutes leurs dépendances incluses !_

Cela pourrait être deux bonnes alternatives à évaluer. Merci Jude ! :100: :medal_military:

Frais. J'ai aussi récemment entendu parler de PyOxidizer . Je ne suis toujours pas sûr à 100% d'avoir compris le projet ( discussion ) mais il est possible qu'il fasse ce qu'on veut.

Je vais essayer de le faire avec shiv cours du week-end. Veuillez essayer PyOxidizer et nous pourrons ensuite comparer les notes.

Désolé, j'ai commencé un nouveau travail il y a quelques jours et je n'aurai pas le temps de faire quoi que ce soit :(

PyOxidizer ressemble à une expérience pour moi : une application Python s'exécutant sur "une VM Rust", une couche native du système d'exploitation créée à l'aide de Rust. Je ne sais pas quel avantage cela procure. La configuration de PyInstaller nous exécutons ne fait-elle pas tout bien? :3rd_place_medal :

shiv est une approche totalement nouvelle (nouvelle dans notre "portefeuille" d'artefacts de version), qui pourrait être intéressante à fournir à notre public. Je trouve l'idée passionnante (même si je serais prêt à parier que peu de gens pourraient l'utiliser). :2nd_place_medal :

pynsist ressemble au programme d'installation de Microsoft Windows que nous recherchons. Cela peut fournir l'expérience utilisateur à laquelle les utilisateurs de Windows semblent s'attendre : :one : Téléchargez le programme d'installation, :two : exécutez-le pour l'installer et ajoutez une entrée dans le menu Démarrer, :three : démarrez l'application à partir du menu Démarrer. :1st_place_medal :

L'inconvénient de pynsist est Windows uniquement. Je vais essayer de faire avancer Shiv (de LinkedIn) sur Mac et Linux.

Cette page vous a été utile?
0 / 5 - 0 notes