IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Pyjion, le compilateur de Microsoft pour Python atteint la version 1.0


Sujet :

Python

  1. #1
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mai 2019
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2019
    Messages : 496
    Points : 8 468
    Points
    8 468
    Par défaut Pyjion, le compilateur de Microsoft pour Python atteint la version 1.0
    Pyjion, le compilateur de Microsoft pour Python atteint la version 1.0,
    il peut être installé par pip sous Linux, Mac OS X ou Windows

    Le langage de programmation Python dispose déjà de nombreux moyens de s'exécuter plus rapidement, qu'il s'agisse des runtimes d'exécution alternatifs comme PyPy ou de modules écrits en C/C++. Pour permettre que le code Python s'exécute plus rapidement sans aucune modification du code, Anthony Shaw, membre de la Python Software Foundation et de Microsoft propose Pyjion, un compilateur de Microsoft pour Python 3.10 qui aujourd’hui, est à la version 1.0.

    Rappelons que Python est un langage de programmation interprété, multi-paradigme et multi-plateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.

    Pyjion, une extension JIT (Just-In-Time) pour CPython qui compile le code Python en CIL natif et l'exécute à l'aide du CLR .NET. Il peut être installé par pip dans une installation CPython 3.10 sous Linux, Mac OS X ou Windows. En d’autres termes, Pyjion compile le bytecode natif de CPython en code machine. Sans Pyjion, CPython utilise une boucle d'évaluation maître (appelée frame evaluation loop) pour itérer sur les opcodes Le compilateur Pyjion a 3 étapes principales :

    • construire une "table de pile" des types abstraits à chaque position d'opcode ;
    • Compiler les opcodes CPython en instructions IL (ECMA335 CIL) ;
    • Émettre les opcodes CIL dans le compilateur .NET EE pour les convertir en code machine/assemblage natif.

    Nom : pyjion.jpg
Affichages : 127634
Taille : 27,7 Ko

    Pyjion peut faire en sorte que le code Python s'exécute plus rapidement sans aucune modification du code. Lors du Python Language Summit qui s'est tenu au PyCon 2021 au mois de mai, le créateur du langage Python, Guido van Rossum, a dévoilé des plans à court et à long terme pour rendre Python encore plus rapide. Le langage de programmation Python est relativement lent dans son implémentation CPython par défaut, bien qu'il existe de nombreux moyens de le rendre plus rapide, notamment des alternatives axées sur les performances comme PyPy.

    Pyjion fonctionne en compilant les opcodes de la machine virtuelle Python en langage assembleur par le biais du compilateur .NET EE. Les tests de référence effectués par les responsables du projet montrent que Pyjion est environ deux à trois fois plus rapide que Python ordinaire dans le monde réel. Certaines optimisations permettent des gains de vitesse allant jusqu'à 10 fois. L'arithmétique régulière, qui est toujours un bon candidat pour une optimisation JIT, peut être un ordre de grandeur plus rapide.

    Historiquement, van Rossum ne semblait pas se soucier des performances de Python, privilégiant la simplicité d'un compilateur moins bien optimisé. Mais le créateur du populaire langage de programmation Python a fait part de ses ambitions de le rendre 2 à 5 fois plus rapide, en remédiant à certaines de ses principales faiblesses par rapport à des langages plus rapides comme le C++.

    Dans le cadre d'une contribution au US PyCon Language Summit 2021, van Rossum a publié un document sur GitHub, propriété de Microsoft, dans lequel il détaille certaines de ses ambitions pour faire de Python un langage plus rapide, promettant de doubler sa vitesse à partir de Python 3.11, l'une des trois branches de Python qui sortiront l'année prochaine, et actuellement en cours de développement officiel en tant que projet de niveau préalpha.


    Le créateur de Python a été embauché en novembre dernier par Microsoft, une entreprise favorable aux logiciels libres, qui l'a fait sortir de sa retraite après un passage chez Dropbox. « Je m'ennuyais à rester assis à la maison pendant ma retraite », a fait savoir van Rossum dans sa présentation, un document PDF. « J'ai postulé chez Microsoft et j'ai été embauché. On m'a donné la liberté de choisir un projet. J'ai choisi de revenir à mes racines. C'est la façon dont Microsoft rend la pareille à Python ».

    Plus tôt en octobre, Sam Gross a proposé une modification majeure du Global Interpreter Lock (GIL), l'implémentation de référence de Python, afin d'améliorer les performances multithreads de Python. « J'ai travaillé sur des modifications de CPython pour lui permettre de s'exécuter sans le verrouillage global de l'interpréteur. J'aimerais partager une preuve du concept de fonctionnement sans le GIL. Cette preuve de concept implique des changements substantiels internes à CPython, mais relativement peu de changements à l'interface C-API. Elle est compatible avec de nombreuses extensions C », a déclaré Sam Gross.

    Notons que le Python Global Interpreter Lock, en termes simples, est un verrou qui permet à un seul thread de détenir le contrôle de l'interpréteur Python. Cela signifie qu'un seul thread peut être en état d'exécution à un moment donné. L'impact de le GIL n'est pas visible pour les développeurs qui exécutent des programmes monofilaires, mais elle peut constituer un goulot d'étranglement en termes de performances pour les codes multithread et liés au processeur.

    Étant donné que le GIL ne permet l'exécution que d'un seul thread à la fois, même dans une architecture multithread avec plus d'un cœur de CPU, il a acquis la réputation d'être une fonctionnalité « déshonorante » de Python. Il a longtemps été considérée comme un obstacle à l'amélioration des performances multithread de CPython (et donc de Python en général). De nombreux efforts ont été déployés pour le supprimer au fil des ans, mais au prix d'une dégradation des performances monothread (en d'autres termes, en rendant la grande majorité des applications Python existantes plus lentes).

    Pyjion n'est pas un runtime autonome comme PyPy, mais une bibliothèque installable qui fonctionne sous Python 3.10. Une fois installé, Pyjion peut être utilisé dans un programme simplement en important la bibliothèque Pyjion et en l'activant. Tout ce qui est exécuté après cette déclaration est compilé en JIT.

    Installation de Pyjion

    Pyjion est un module python qui peut être importé dans un environnement Python 3.10. Pour utiliser Pyjion, les éléments suivants sont nécessaire :

    • CPython 3.10
    • CMake 3.13 +
    • .NET 6
    • scikit-build

    Après avoir importé pyjion, activez-le en appelant pyjion.enable() qui définit un seuil de compilation à 0 (le code ne doit être exécuté qu'une seule fois pour être compilé par le JIT) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python -m pip install pyjion

    Après avoir importé pyjion, le JIT doit être activé en utilisant la fonction enable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import pyjion; pyjion.enable()

    Tout code Python que defini ou importé après avoir activé pyjion sera compilé en JIT. Nul besoin d'exécuter les fonctions dans une API spéciale, c'est complètement transparent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> def half(x):
    ... return x/2
    >>> half(2) 1.0

    Il est également possible d’exécuter Pyjion contre n'importe quel script ou module :

    Ou, pour un module Python existant :


    Malgré sa popularité sans cesse croissante, en partie à cause de l'essor de la science des données et de son écosystème de bibliothèques logicielles d'apprentissage automatique comme NumPy, Pandas, TensorFlow de Google et PyTorch de Facebook, ces nombreux utilisateurs, programmeurs Python, estiment être insatisfaits par le critère de rapidité sur Python.

    Pour certains, la prise en charge d’une multitude de bibliothèques est une excellente chose, mais les gains de performances ne semblent pas si impressionnants. Certaines fonctionnalités de Python ne sont pas encore implémentées dans Pyjion, comme les blocs et async/await, mais ces deux éléments sont sur la feuille de route. Pyjion comprend une couche middleware permettant aux applications WSGI de fonctionner sous Pyjion.

    « Il semble que le langage soit maintenant 2 fois plus rapide. Mais cela devrait être plus autour de 10 à 100 fois. Par exemple, sur le benchmark spectralnorm, ils obtiennent une accélération de 1,4x alors qu'une conversion rapide de Julia m'a donné 17x », a déclaré un programmeur Python.

    Nom : newplot.png
Affichages : 13799
Taille : 28,7 Ko

    Les données sont sur une machine Linux X86_64. Les scripts des benchmarks sont dans le repo source de Pyjion. Certains benchmarks ont une valeur max/moyenne lente car le temps inclut la compilation JIT de grandes bibliothèques comme Pandas. conversion rapide de Julia m'a donné 17x », a déclaré un programmeur Python.

    Comparaison entre Pyjion et les autres programmes

    PyPy

    PyPy est une implémentation de Python avec son propre JIT. La plus grande différence par rapport à Pyjion est que PyPy ne supporte pas tous les modules d'extension C sans modification, à moins qu'ils n'utilisent CFFI ou qu'ils fonctionnent avec le sous-ensemble sélectionné de l'API C de CPython que PyPy supporte. Pyjion vise également à supporter de nombreux compilateurs JIT alors que PyPy ne supporte que son propre compilateur JIT.

    Pyston

    Pyston est une implémentation de Python utilisant LLVM comme compilateur JIT. Par rapport à Pyjion, Pyston a un support partiel de l'API C de CPython mais pas un support complet. Pyston ne supporte également que LLVM en tant que compilateur JIT.

    Numba

    Numba est un compilateur JIT pour « le code Python orienté tableau et lourd en maths ». Cela signifie que Numba est axé sur le calcul scientifique alors que Pyjion tente d'optimiser tout le code Python. Numba ne supporte également que LLVM.

    IronPython

    IronPython est une implémentation de Python réalisée à l'aide de .NET. Alors qu'IronPython essaie d'être utilisable à partir de .NET, Pyjion n'a pas d'histoire de compatibilité avec .NET. Cela signifie également qu'IronPython ne peut pas utiliser de modules d'extension C alors que Pyjion le peut.

    Psyco

    Psyco était un module qui monkeypatche CPython pour ajouter un compilateur JIT personnalisé. Pyjion veut introduire une API C correcte pour ajouter un compilateur JIT à CPython au lieu de le monkeypatcher. Il est à noter que le créateur de Psyco est devenu l'un des co-fondateurs de PyPy.

    Unladen Swallow

    Unladen Swallow était une tentative de faire de LLVM un compilateur JIT pour CPython. Malheureusement, le projet a perdu son financement avant d'avoir terminé son travail après avoir dû passer beaucoup de temps à corriger des problèmes dans le compilateur JIT de LLVM (qui s'est grandement amélioré au cours des années suivantes).

    Nuitka et Shedskin

    Nuitka et Shedskin sont tous deux des transpilers Python vers C++, ce qui signifie qu'ils traduisent le code Python en code C++ équivalent. Etant un JIT, Pyjion n'est pas un transpilateur.

    Source : Python

    Et vous ?

    Que pensez-vous de Pyjion ?

    Seriez-vous prêt à l'utiliser pour vos projets Python ?

    Voir aussi :

    Python 3.11 améliore l'emplacement des erreurs dans les tracebacks, et apporte de nouvelles fonctionnalités

    Python risque de perdre son Global Interpreter Lock, un composant clé de CPython, pour gagner beaucoup plus en rapidité

    Les créateurs de Python dévoilent leurs plans d'accélération pour Python, qui promettent de le rendre 2 à 5 fois plus rapide sans casser aucun code existant

    JetBrains et la Python Software Foundation annoncent une réduction de 30 % sur PyCharm valable jusqu'au 24 novembre, la totalité des fonds récoltés sera reversée à la fondation Python
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Technicien de maintenance / Developpeur PHP
    Inscrit en
    mai 2015
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien de maintenance / Developpeur PHP
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2015
    Messages : 361
    Points : 1 331
    Points
    1 331
    Par défaut
    Que pensez-vous de Pyjion ?

    Pourquoi pas, mais tant qu'a avoir une dépendance sur la CLR, autant partir sur du F# non ?

    Seriez-vous prêt à l'utiliser pour prêt à l'utiliser pour vos projets Python ?

    Non, car trop de dépendances plutôt lourdes, pour des projets Python qui pèse de plus en plus lourd au fil du temps.
    Alors rajouter, CMake (passe encore, quoique Meson aurait été plus naturel) & .NET 6 & scikit-build, ça devient ridicule.

    A un moment donné, il va bien falloir que les dirigeant de Python, ce rendent compte des limites de leurs bébé et je pense que là on commence déjà à toucher la fin du truc.
    Personnellement, tant qu'a faire du .Net autant partir directement là dessus sans passer par Python qui rajoute une couche pour "le rendre plus rapide" ce qu'un langage de script ne sera jamais vraiment de part sa nature dynamique.

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 609
    Points : 3 420
    Points
    3 420
    Par défaut
    Salut,

    Au delà de la question de rapidité, est-ce que cela signifie qu'on peut faire des exécutables ?

    Citation Envoyé par defZero Voir le message
    Non, car trop de dépendances plutôt lourdes, pour des projets Python qui pèse de plus en plus lourd au fil du temps.
    Les dépendances c'est pour compiler, non ? Une fois le code compilé on n'en a plus besoin, non ? Ou j'ai rien/mal compris...

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Technicien de maintenance / Developpeur PHP
    Inscrit en
    mai 2015
    Messages
    361
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien de maintenance / Developpeur PHP
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2015
    Messages : 361
    Points : 1 331
    Points
    1 331
    Par défaut
    Les dépendances c'est pour compiler, non ? Une fois le code compilé on n'en a plus besoin, non ? Ou j'ai rien/mal compris...
    @Beginner.
    Malheureusement, ce n'est "que" (c'est déjà pas mal hein ) de la compilation de bytecode Python vers du CIL qui va donc tourner sur du .Net au final.
    Ca ne fait "que" du Bytecode Python vers Bytecode .Net à la volé (d’où le JIT).

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 609
    Points : 3 420
    Points
    3 420
    Par défaut
    Ok merci. Le Bytecode .Net il s'exécute directement sous Windows ou pas ? En fait j'aimerais savoir si ce sera plus simple pour les utilisateurs... Si ces derniers auront moins de choses à faire pour exécuter le code...

  6. #6
    Membre éprouvé
    Profil pro
    programmeur du dimanche
    Inscrit en
    novembre 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : programmeur du dimanche
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2003
    Messages : 281
    Points : 1 000
    Points
    1 000
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Ok merci. Le Bytecode .Net il s'exécute directement sous Windows ou pas ? En fait j'aimerais savoir si ce sera plus simple pour les utilisateurs... Si ces derniers auront moins de choses à faire pour exécuter le code...
    Salut,
    D'après le tuto de PyPI, ça n'a pas l'air. ça semble plus une façon d'accélérer un projet existant assez simplement, dans le futur ! En effet, les mots clés with ; async ; await ne sont pas encore implémentés (https://pyjion.readthedocs.io/en/lat...mitations.html).

    D'autant plus qu'il faut une dépendance à .net 6 . Je ne sais pas sur quelles machines c'est installé par défaut, mais pas sur mon poste ni à mon boulot. (Sachant que jadis je n'ai jamais réussi à lancer certains programmes .net de versions récentes sur ces machines hors ligne car l'installateur hors ligne plantait sur certains postes).

    À choisir, je te conseille d'utiliser un installeur pour les gens sous windows qui n'ont pas python sur leur poste. Personnellement après avoir bien galéré avec les différents scripts de génération de binaire windows, qui soit étaient complexes (tendent à inclure des dépendances inutiles à blacklister), soit ralentissaient le lancement, je trouve que winpython est assez simple : c'est portable, il suffit d'y installer son projet et de le distribuer (il faut quand même se faire un script pour créer le lien sur le bureau, etc.)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juillet 2012
    Messages : 4
    Points : 17
    Points
    17
    Par défaut
    (passe encore, quoique Meson aurait été plus naturel)
    J'aime bien meson, mais il a été écrit en python (bon ils ont quand même utilisé les annotations de type en interne).

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 609
    Points : 3 420
    Points
    3 420
    Par défaut
    @Fagus,
    Merci.
    Je ne connaissais pas winpython, je vais regarder ça...

  9. #9
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 2 344
    Points : 5 920
    Points
    5 920
    Par défaut
    hello,
    Citation Envoyé par Fagus Voir le message
    À choisir, je te conseille d'utiliser un installeur pour les gens sous windows qui n'ont pas python sur leur poste. Personnellement après avoir bien galéré avec les différents scripts de génération de binaire windows, qui soient étaient complexes (tendent à inclure des dépendances inutiles à blacklister), soient ralentissaient le lancement, je trouve que winpython est assez simple : c'est portable, il suffit d'y installer son projet et de le distribuer (il faut quand même se faire un script pour créer le lien sur le bureau, etc.)
    Pourtant pyinstaller me semble fiable et en plus ne produit pas un fichier .exe démesuré.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre éprouvé
    Profil pro
    programmeur du dimanche
    Inscrit en
    novembre 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : programmeur du dimanche
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2003
    Messages : 281
    Points : 1 000
    Points
    1 000
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,


    Pourtant pyinstaller me semble fiable et en plus ne produit pas un fichier .exe démesuré.

    Ami calmant, J.P
    Bonjour,
    Honnêtement je l’avais essayé il y a 2 ans, et en effet, c'est celui qui m'avait donné les meilleurs résultats, mais le lancement de mon programme était perceptiblement plus lent (en mode single file certainement ; en mode single directory je ne sais plus si j'avais testé).

  11. #11
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 609
    Points : 3 420
    Points
    3 420
    Par défaut
    Salut,

    Ces outils que vous mentionnez c'est pour faire un exécutable si j'ai bien compris mais quelles sont les raisons pour lesquelles vous faites des exécutables ?

    -Est-ce parce que l’exécution serait plus rapide ?

    -Est-ce parce que cela permet de "cacher" le code , en fait je ne sais pas si le code source est accessible depuis un exécutable mais je pose la question...

    -Est-ce pour faciliter la distribution / le déploiement de l'application et faciliter le plus possible son usage pour les utilisateurs ?

    Perso, c'est surtout ce troisième point qui m'intéresse et je me demande si c'est plus simple de satisfaire ce troisième point lorsque cela ne pose aucun problème de fournir le code source, bien au contraire, on souhaite même que le code soit réutilisé, amélioré... par d'autres...

    Merci.

    PS : Une des choses qui m’agace énormément c'est de devoir me prendre la tête pour juste pouvoir exécuter une application à partir du code source... Il faut parfois faire des tas trucs qu'on ne connait pas forcément et qui peuvent décourager (parfois jusqu’à abandonner) juste pour exécuter l'application.

    Je dis "et qui peuvent décourager (parfois jusqu’à abandonner)" car parfois même en suivant toutes les instructions (lorsqu’elles sont fournies ce qui n'est pas toujours le cas) eh bien cela ne fonctionne pas...

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2002
    Messages : 43
    Points : 38
    Points
    38
    Par défaut Peut-être qu'il faut accepter la vitesse de Python
    Python n'est pas si lent. La plupart des projets que j'ai développé avec Python sont assez rapides.pour ne pas gêner l'utilisation. Personne ne remarque vraiment sa "lenteur" quand les utilisateurs font tourner mes projets.
    Python est rapide de base. Certe pas autant que des projets codés en C ou en Go mais bon sang ça va.
    Il est adapté à un type de développement, pas à tous. Mais pour un script de traitement, une API REST, en interface au machine learning ou même pour du jeu, il fonctionne très bien.

    Au sein de Belender il ne pose pas de soucis.

    Si vraiment la vitesse compte, il vaut mieux choisir un autre langage au lieu de vouloir à tout prix passer par des trucs qui tentent des pirouettes de ninja pour accélérer Python en y installant des gigas de dépendances.


    Pyinstaller crée un exécutable pratique à distribuer. Ça suffit largement pour sa distribution à des néophytes. Pour ma part je vais rester dans la logique de base. Utiliser Python tel quel, avec ses défauts et tout ses avantages. Et utiliser Go quand j'ai de vrais besoins de vitesse, de parallélisme ou des besoins particuliers sur de la gestion de flux. Non ?

  13. #13
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    janvier 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2014
    Messages : 1
    Points : 4
    Points
    4
    Par défaut Microsoft et EEE
    Bonjour,
    dans votre article une phrase m'a fait bondir :
    "Le créateur de Python a été embauché en novembre dernier par Microsoft, une entreprise favorable aux logiciels libres..."

    Comment est-il possible d'écrire ça ? Microsoft est une des entreprises certes qui contribue à certains projets Open Source (différent de logiciels libres), mais rien qui ne fasse réellement avancer le monde du logiciel, ils préservent leurs vaches à lait !

    N'oubliez pas que Microsoft est un adepte de la stratégie EEE (« Adopte, étend et étouffe ») : https://fr.wikipedia.org/wiki/Embrac...and_extinguish


    Cordialement.

  14. #14
    Membre confirmé Avatar de Hominidé
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    juin 2018
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous

    Informations forums :
    Inscription : juin 2018
    Messages : 353
    Points : 511
    Points
    511
    Par défaut
    Bonjour,
    Citation Envoyé par Metal3d Voir le message

    Pyinstaller crée un exécutable pratique à distribuer. Ça suffit largement pour sa distribution à des néophytes.
    Il me semble que c'est surtout une pratique bien ancrée chez les utilisateurs de windows.
    Utiliser pip pour télécharger une appli, ce n'est pas non plus compliqué.

    Bon, il est vrai que les utilisateurs de debian&co devront la première fois installer pip3 et pour les utilisateurs de windows, il leur faudra fournir un effort supplémentaire pour installer python.

  15. #15
    Membre éprouvé
    Profil pro
    programmeur du dimanche
    Inscrit en
    novembre 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : programmeur du dimanche
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2003
    Messages : 281
    Points : 1 000
    Points
    1 000
    Par défaut
    Citation Envoyé par Metal3d Voir le message
    Python n'est pas si lent. La plupart des projets que j'ai développé avec Python sont assez rapides [...]


    Pyinstaller crée un exécutable pratique à distribuer. Ça suffit largement pour sa distribution à des néophytes. Pour ma part je vais rester dans la logique de base. Utiliser Python tel quel, avec ses défauts et tout ses avantages. Et utiliser Go quand j'ai de vrais besoins de vitesse, de parallélisme ou des besoins particuliers sur de la gestion de flux. Non ?
    Je plussoie complètement. Si on est un peu obsessionnel sur l'optimisation, côté dév., on se retrouve facilement à être content d'avoir un programme qui démarre en 3s. et pas 15, ou une appli qui pèse 2Mo et pas 40.
    Sauf que la plupart du temps, tout le monde s'en moque...

    En effet, python est largement assez rapide pour l'usage courant en pratique sur un poste utilisateur. (et si on a besoin de coller aux performances de la machine, c'est en effet qu'il fallait voir ailleurs dès le début.)

    Donc, oui, Pyinstaller c'est très bien pour l'usage courant.

    Les compilateurs JiT (PyPy, Pyjion), c'est pour les tâches intensives écrites en python (ex, serveur en python...).
    Citation Envoyé par Beginner.
    Ces outils que vous mentionnez c'est pour faire un exécutable si j'ai bien compris mais quelles sont les raisons pour lesquelles vous faites des exécutables ?

    -Est-ce parce que l’exécution serait plus rapide ?

    -Est-ce parce que cela permet de "cacher" le code , en fait je ne sais pas si le code source est accessible depuis un exécutable mais je pose la question...
    - Pyinstaller et consorts n'est pas plus rapide (et a un "warm up time" en mode "single file" vu qu'il décompresse tout dans %temp% je crois)
    - Le code n'est pas caché du tout. D'ailleurs, les langages non-compilés peuvent juste avoir recours à un obfuscateur pour cacher le code (je ne sais pas si ça existe en python). Si j'avais à protéger mollement un bout de code, je suppose que j'écrirais un module python compilé depuis nim lang, ça a l'air très facile.

  16. #16
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 609
    Points : 3 420
    Points
    3 420
    Par défaut
    Salut,

    Citation Envoyé par Hominidé Voir le message
    Utiliser pip pour télécharger une appli, ce n'est pas non plus compliqué.

    Bon, il est vrai que les utilisateurs de debian&co devront la première fois installer pip3 et pour les utilisateurs de windows, il leur faudra fournir un effort supplémentaire pour installer python.
    On peut télécharger des applications (autonomes) avec pip ? Je pensais que cela servait surtout à télécharger des modules, librairies,...

    C'est peut-être plus simple que je ne le pensais dans le monde python, je dois être "traumatisé" par les applis du monde JS, on doit parfois faire nous même un "build" pour exécuter l'appli et pour cela il faut installer toutes les dépendances avec npm ou autres, il y a les dépendances propres à l'appli, il y a les dépendances pour le développement (qui permettent de faire des tests, le build...). Et parfois ça marche pas lol pour une raison x ou y ce qui nous oblige à rentrer dans les différents codes sources comme si on avait que ça à faire...

    Mais parfois l'appli python contient des parties écrites dans d'autres langages et là ça peut compliquer les choses je suppose, non ?

    ---> Au fait si l’utilisateur est capable d'installer python, d'utiliser pip... Alors dans ce cas-là on peut lui donner le code source de l'appli et il pourra l'exécuter, pas besoin de faire un exécutable, non ?

    Citation Envoyé par Fagus Voir le message
    - Pyinstaller et consorts n'est pas plus rapide (et a un "warm up time" en mode "single file" vu qu'il décompresse tout dans %temp% je crois)
    - Le code n'est pas caché du tout. D'ailleurs, les langages non-compilés peuvent juste avoir recours à un obfuscateur pour cacher le code (je ne sais pas si ça existe en python). Si j'avais à protéger mollement un bout de code, je suppose que j'écrirais un module python compilé depuis nim lang, ça a l'air très facile.
    Ok merci. On utilise donc ces outils surtout pour déployer l'application et faciliter son usage aux utilisateurs ?

  17. #17
    Membre confirmé Avatar de Hominidé
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    juin 2018
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous

    Informations forums :
    Inscription : juin 2018
    Messages : 353
    Points : 511
    Points
    511
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Salut,

    On peut télécharger des applications (autonomes) avec pip ? Je pensais que cela servait surtout à télécharger des modules, librairies,...
    Pip est un gestionnaire de paquet, généralement utilisé pour partager une librairie. Ceci dit, une appli, un jeu,une librairie, c'est du code.
    Perso, je n'ai écrit qu'un projet sur pypi et c'est un petit jeu écrit avec tkinter. Les dépendances nécessaires à son fonctionnement sont ajoutées automatiquement lors de son téléchargement. L'usager fait juste pip3 monjeu, et le paquet de monjeu s'installe au bon endroit, sans autre intervention . Pour l'utiliser, on l'importe.
    Il y a peut-être une limitation technique qui en limiterait cet usage. Je n'en sais rien.(? je suis curieux de la réponse...)
    Après si on veut le lancer avec un double clic , ce n'est pas un souci(En tout cas avec linux. Windows je ne connais pas)
    Mais parfois l'appli python contient des parties écrites dans d'autres langages et là ça peut compliquer les choses je suppose, non ?
    Je n'ai aucune connaissance sur le sujet. En tout cas, pour l'utilisateur ça ne change rien.
    ---> Au fait si l’utilisateur est capable d'installer python, d'utiliser pip... Alors dans ce cas-là on peut lui donner le code source de l'appli et il pourra l'exécuter, pas besoin de faire un exécutable, non ?
    Un paquet est composé d'un ensemble de fichier. C'est quand même plus long/compliquer à installer à la main. De plus, dans ce cas, l'utilisateur devra installer à chacune des dépendances lui-même..

  18. #18
    Membre expert
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 609
    Points : 3 420
    Points
    3 420
    Par défaut
    Ok merci.
    Citation Envoyé par Hominidé Voir le message
    Perso, je n'ai écrit qu'un projet sur pypi et c'est un petit jeu écrit avec tkinter. Les dépendances nécessaires à son fonctionnement sont ajoutées automatiquement lors de son téléchargement. L'usager fait juste pip3 monjeu, et le paquet de monjeu s'installe au bon endroit, sans autre intervention . Pour l'utiliser, on l'importe.
    As-tu fait quelque chose de particulier pour cela ?

  19. #19
    Expert confirmé
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    1 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 1 248
    Points : 5 219
    Points
    5 219
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Utiliser pip pour télécharger une appli, ce n'est pas non plus compliqué.
    Citation Envoyé par Hominidé Voir le message
    Perso, je n'ai écrit qu'un projet sur pypi et c'est un petit jeu écrit avec tkinter. Les dépendances nécessaires à son fonctionnement sont ajoutées automatiquement lors de son téléchargement. L'usager fait juste pip3 monjeu, et le paquet de monjeu s'installe au bon endroit, sans autre intervention .
    Ouh là. Attention, en Python, les installations avec pip sont un terrain miné pour les non initiés.

    Pour chaque exécutable Python, pour chaque package installé, il ne peut exister qu'une seule version à la fois de ce package pour cet exécutable Python.
    Du coup, quand deux projets différents dépendent chacun d'une version différente d'un package commun, on est obligé de lier ces deux projets à des exécutables Python différents.
    C'est à cause de ça qu'on se tape des environnements virtuels en Python.

    Installer directement avec pip, ce n'est pas un problème si on utilise le pip d'un exécutable Python qui se trouve déjà dans un environnement virtuel ou un conteneur.
    Par contre, installer directement avec le pip du Python global, c'est ouvrir la porte à de potentielles futures emmerdes.
    Ce qui est très insidieux, c'est que les emmerdes n'apparaissent pas tout de suite. En plus, il y a plein de tutoriels et de documentations qui balancent des pip install aux lecteurs sans les avertir des dangers, donc les non initiés sautent à pieds joints dans le piège.

    De mon côté, quand un exécutable Python peut s'installer avec pip, je l'installe avec pipx : https://pypa.github.io/pipx/
    Cela permet d'installer chaque exécutable dans un environnement virtuel Python différent.
    Par exemple, aujourd'hui, avec pipx, je viens d'installer jello : https://pypi.org/project/jello/

    Sur mon Ubuntu, ~/.local/bin/jello est un lien symbolique vers ~/.local/pipx/venvs/jello/bin/jello.
    Dans mon PATH, j'ai ~/.local/bin qui contient les liens symboliques ajoutés par pipx. Chaque lien symbolique pointe vers un exécutable qui se trouve dans son propre environnement virtuel.
    Dans l'environnement virtuel de jello, il y a une dépendance externe : Pygments.
    Si un jour j'installe un nouvel exé en Python qui dépend aussi de Pygments, ces deux exécutables ne seront pas obligés d'être liés à la même version de Pygments.

    Remarque : pipx existe aussi pour Windows.

  20. #20
    Membre confirmé Avatar de Hominidé
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    juin 2018
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous

    Informations forums :
    Inscription : juin 2018
    Messages : 353
    Points : 511
    Points
    511
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    Ok merci.
    As-tu fait quelque chose de particulier pour cela ?
    Oui, il faut les renseigner dans le setup()

    Citation Envoyé par Pyramidev
    En plus, il y a plein de tutoriels et de documentations qui balancent des pip install aux lecteurs sans les avertir des dangers, donc les non initiés sautent à pieds joints dans le piège.
    Oui je l'ai aussi constaté .
    +1 pour tes mises en garde.

Discussions similaires

  1. Microsoft développe un compilateur JIT open source pour Python
    Par Michael Guilloux dans le forum Actualités
    Réponses: 3
    Dernier message: 01/02/2016, 14h11
  2. compilateurs c/c++ pour mac osx
    Par osykomantis dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 26/09/2007, 17h08
  3. module .so pour python... ?!
    Par totoetlititi dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/03/2004, 15h51
  4. Compilateur - editeur C++ pour Linux
    Par Torpedox dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 15/09/2002, 03h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo