Pourquoi aucune solution de compilation native propre et simple sur Python

a marqué ce sujet comme résolu.

BOnjour à tous,

Utilisant Python dans mon job de temps en temps j’avais regardé s’il y avait des moyens de faire des executables stand-alone en Python et je me suis rendu compte que c’est globalement plutôt le bordel (les solutions ne marchent pas tout le temps, chiant à utiliser…ect)

D’où ma question : pourquoi aucune solution "propre" et "simple" n’a vu le jour depuis le temps ? Est-ce dû à une complexité technologique énorme ? un manque de volonté sur le sujet de la communauté ?

Bonjour,

Que recherches-tu exactement ? Dans le titre tu parles de compilation, mais ça ne se ressent pas ensuite dans ton message.

Qu’es-ce qui te gêne dans le fait d’avoir ton projet en Python et de le faire dépendre de l’interpréteur ?

Si tu parle uniquement de tout packager pour faciliter la distribution, ça n’emerge pas vraiment car il n’y a pas des tonnes de besoin. En vrai sur macos et linux tu as quasi toujours python d’installé donc la distribution n’est pas compliqué. Il n’y a que sous windows où c’est plus chiant.

La compilation pur et dur c’est plus compliqué…

Non c’etait plus une question théorique : pourquoi c’est toujours autant une galère de générer un exécutable propre pour Windows avec Python.

Sachant que ça représente genre 90% des Ordinateurs individuels sur cette planète pourquoi aucune solution simple et propre existe encore ? Qu’est-ce qui bloque ?

Sachant que ça représente genre 90% des Ordinateurs individuels sur cette planète pourquoi aucune solution simple et propre existe encore ? Qu’est-ce qui bloque ?

L’utilisation. 90% des pc individuels tournent sur Windows mais a mon avis il n’y a pas 90% des codes python qui sont distribués sur Windows. Avec l’avènement du web ça n’a (ne va) pas aider à ce que ça change.

Par exemple, me concernant, jamais aucun des produits que j’ai dev en python durant ma carrière pro n’était distribué sur des windows. Soit c’était des applis web, soit des script ou outils internes, etc.

Peut être que les deux sont liés (et que personne ne fait des applis en Python pour windows parce que c’est chiant à distribuer) mais le besoin ne doit pas être important pour que les différents projets de ce type meurent si vite.

Ce qu’il faut prendre en compte aussi, c’est que ça n’est pas foncièrement plus compliqué que pour des programmes réalisés avec d’autres langages.

Python, c’est majoritairement CPython (la principale implémentation). Tu peux compiler tous tes scripts vers des exécutables, ils seront toujours dépendants de la libpython (une DLL donc, sous Windows).

Comment sont distribués la plupart des programmes sous Windows ? Un programme particulier qui installe le binaire et ses dépendances (DLL) en les plaçant dans les répertoires appropriés.

Ce qu’il faut prendre en compte aussi, c’est que ça n’est pas foncièrement plus compliqué que pour des programmes réalisés avec d’autres langages.

Python, c’est majoritairement CPython (la principale implémentation). Tu peux compiler tous tes scripts vers des exécutables, ils seront toujours dépendants de la libpython (une DLL donc, sous Windows).

Comment sont distribués la plupart des programmes sous Windows ? Un programme particulier qui installe le binaire et ses dépendances (DLL) en les plaçant dans les répertoires appropriés.

entwanne

Oui mais je veux dire, du point de vue d’un débutant : Je fait du C++ par exemple : je compile mon script j’ai un .exe et je peux le balancer à qui je veux.

J’ai un script Python là tout de suite c’est 10 fois plus la merde pour le distribuer. C’est pas impossible mais ya rien de simple et c’est ça qui m’étonne vu la communauté assez grande du langage.

Oui mais je veux dire, du point de vue d’un débutant : Je fait du C++ par exemple : je compile mon script j’ai un .exe et je peux le balancer à qui je veux.

alliocha1805

Il faut le distribuer avec les bibliothèques dynamiques dont il dépend.

Après tu peux choisir de tout lier statiquement, mais ça fait un exécutable énorme. La même chose doit pouvoir se faire en Python.

Oui mais je veux dire, du point de vue d’un débutant : Je fait du C++ par exemple : je compile mon script j’ai un .exe et je peux le balancer à qui je veux.

alliocha1805

A qui tu veux qui a le même OS que toi tournant sur la même architecture processeur que toi, oui. C’est pas tout à fait pareil.

+3 -0

Oui mais je veux dire, du point de vue d’un débutant : Je fait du C++ par exemple : je compile mon script j’ai un .exe et je peux le balancer à qui je veux.

alliocha1805

A qui tu veux qui a le même OS que toi tournant sur la même architecture processeur que toi, oui. C’est pas tout à fait pareil.

victor

Oui mais pour distribuer sur du Windows basique pour Mr/Mme michu le problème ne doit quand même pas souvent se poser non ?

+0 -0

32 ou 64 bits ?

Il y a 5 ans, le problème était rare, windows 32 bits marchait partout, aujourd’hui, bof. Entre les tablettes estampillées Windows sous ARM et les PC sous 32 ou 64 bits, le débutant risque de compiler sous son PC 64 bits et Michou lui dira que « ça marche pas ».

+0 -0

32 ou 64 bits ?

Il y a 5 ans, le problème était rare, windows 32 bits marchait partout, aujourd’hui, bof. Entre les tablettes estampillées Windows sous ARM et les PC sous 32 ou 64 bits, le débutant risque de compiler sous son PC 64 bits et Michou lui dira que « ça marche pas ».

Gabbro

Oui mais bon le problème n’est que "temporaire" vu que le 32 bits va disparaître.

Juste au final c’est surtout : pourquoi personne n’a sorti un meilleur cx_freeze ou autre ? C’est un défi "trop grand" ?

Je n’ai jamais testé cx_freeze mais quels sont ses défauts selon toi ?

tleb

Personnellement, ce que je reproche à cx_freeze (et autres) est résumé dans ce message.

L’intérêt des bibliothèques dynamiques, ce n’est pas que chaque programme soit fourni avec celles dont il dépend : c’est qu’elles soient installées sur le système pour qu’il puisse en bénéficier.

Donc l’installation d’un programme, quel qu’il soit (c’est pas propre à Python) passe par l’installation de ses dépendances. C’est quelque chose qui n’est pas forcément toujours bien réalisé (doux euphémisme) dans le monde Windows.

Sinon, je vois beaucoup de débutants s’essayer à cx_freeze, et ça semble justement assez compliqué pour embarquer des dépendances tierces (autres que la bibliothèque standard).

J’ai un script Python là tout de suite c’est 10 fois plus la merde pour le distribuer. C’est pas impossible mais ya rien de simple et c’est ça qui m’étonne vu la communauté assez grande du langage.

alliocha1805

Ben si, il y a la solution simple de distribuer le script (voire un wheel si tu as du C qui traîne) sur PyPI et de dire aux gens d’installer Python, puis d’utiliser pip pour installer direct ton script et ses dépendances depuis PyPI. J’ai un soft comme ça, j’ai jamais touché à Python sous Windows et je le développe exclusivement sous Linux, mais je sais qu’il y a des gens quelque part qui l’utilisent sous Windows sans problème.

J’ai un script Python là tout de suite c’est 10 fois plus la merde pour le distribuer. C’est pas impossible mais ya rien de simple et c’est ça qui m’étonne vu la communauté assez grande du langage.

alliocha1805

Ben si, il y a la solution simple de distribuer le script (voire un wheel si tu as du C qui traîne) sur PyPI et de dire aux gens d’installer Python, puis d’utiliser pip pour installer direct ton script et ses dépendances depuis PyPI. J’ai un soft comme ça, j’ai jamais touché à Python sous Windows et je le développe exclusivement sous Linux, mais je sais qu’il y a des gens quelque part qui l’utilisent sous Windows sans problème.

adri1

Ça complexifie pour les "michu" de devoir installer en avance Python ou utiliser pip. C’est même impossible dans certains cas : un utilisateur qui n’est pas admin et veux simplement utiliser un script/ petit programme

Mouais, installer Python n’est pas plus dur que n’importe quel autre programme. Si une personne bute sur l’installation de Python, elle butera sur l’installation de ton script quelque soit la façon dont tu le distribues.

Installer Python en tant qu’utilisateur non admin est par ailleurs tout à fait possible.

Prenons un cas pratique : j’ai fait un script qui me permet de faire les stats d’un produit qu’on vend dans ma boite. Ca prend deux csv en entrée et ca sort des chiffres en plus de les ajouter dans une bDD SQL (pour l’historique).

J’ai tenté d’en faire un .exe distribuable facilement et j’ai trop lutté avec cx_freeze ça ma soûlé . Quand j’ai voulu le distribuer personne ne pouvais installer Python dans la boite (pas les droits ou ça comprend pas pour certains)

Alors que leur dire : quand tu reçois les deux fichiers tu les nommes XXXX et YYYY et tu lance le script et ca te sort un excel ca tout le monde comprend.

Effectivement c’est peut être un cas à la marge mais la question venais de là sur l’absence de solution simple et propre. Ok ya d’autres solutions mais je me demande pourquoi personne n’a réussi à faire un cx_freeze simple et propre jusque ici

PS: pour le script au final now c’est un script en PHP qui tourne sur un serv donc le problème n’existe plus.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte