Partage
  • Partager sur Facebook
  • Partager sur Twitter

Distribuer un programme Python

    29 décembre 2022 à 19:09:08

    Bonjour à tous, 

    Je m'interroge sur la possibilité de distribuer un programme python (qui est composé de juste un fichier main.py et de l'icône du programme) sur Windows et MacOS.

    L'idée est la suivante, mais je me demande si elle est possible : il s'agirait de distribuer un .exe sur Windows et MacOS mais sans que ce programme embarque les différentes librairies (Tkinter, pathlib, pandas, par exemple) et d'installer manuellement ces librairies à l'aide de pip sur chaque ordinateur.

    Je me demande si c'est possible ou si le .exe est par définition un programme qui embarque automatiquement l'ensemble des librairies.

    Qu'en pensez-vous ? J'ai un peu fouillé sur Google mais j'avoue que je n'ai rien trouvé de pertinent.

    Merci par avance pour vos éclaircissements :) 

    • Partager sur Facebook
    • Partager sur Twitter
      29 décembre 2022 à 20:27:20

      Bonjour 

      Regarde du côté de pyinstaller 

      Il crée un .exe qui peut-être distribué 

      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2022 à 21:32:08

        Phil_1857 a écrit:

        Bonjour 

        Regarde du côté de pyinstaller 

        Il crée un .exe qui peut-être distribué 


        Bonjour, 

        Merci pour ta réponse, mais justement le .exe de PyInstaller contient les librairies ? Or, ce que je souhaite savoir c'est s'il possible d'avoir un .exe qui ne contient pas les librairies (car les librairies seront installées manuellement avec pip).

        • Partager sur Facebook
        • Partager sur Twitter
          29 décembre 2022 à 22:50:46

          Bonjour,

          Si il faut utiliser pip et installer les dépendances manuellement, pourquoi ne pas empaqueter le programme directement pour qu'il soit installable avec pip?

          https://packaging.python.org/en/latest/

          De toute manière, ce sera compliqué d'exécuter un .exe sur MacOS :-°

          • Partager sur Facebook
          • Partager sur Twitter
            29 décembre 2022 à 23:26:28

            KoaTao a écrit:

            Bonjour,

            Si il faut utiliser pip et installer les dépendances manuellement, pourquoi ne pas empaqueter le programme directement pour qu'il soit installable avec pip?

            https://packaging.python.org/en/latest/

            De toute manière, ce sera compliqué d'exécuter un .exe sur MacOS :-°


            Bonjour, 

            Effectivement c'est compliqué d'exécuter un .exe sur MacOS, j'ai pris un raccourci :D

            J'admets ne pas être très au clair sur toutes les méthodes possibles pour distribuer un programme python. Ce que je souhaiterais c'est gérer l'installation du programme de sorte que l'utilisateur ne puisse pas "copier/coller" le programme d'une machine à une autre. Et dans la mesure où le programme est à destination d'utilisateur qui ne savent pas utiliser python, il faut un programme sous la forme d'un .exe. En résumé, sans l'installation manuelle des dépendances sur chaque ordinateur, le programme n'est pas utilisable. 

            Est-ce possible d'avoir ce résultat ?

            • Partager sur Facebook
            • Partager sur Twitter
              30 décembre 2022 à 5:37:44

              Python n'est pas trop conçu pour distribuer des programmes en sources fermées. Ce qui rend la distribution d'un tel logiciel de ce type ardue.

              Ce que tu peux faire, au mieux, est de «dissimuler/cacher» ton code (code obfuscation): https://wiki.python.org/moin/Asking%20for%20Help/How%20do%20you%20protect%20Python%20source%20code%3F.

              Je pense que le dernier paragraphe est très à propos ici.

              Et je pense que tu essaies de protéger ton programme d'une mauvaise manière en voulant le distribuer comme ça.

              il sera assez aisée. quoiqu'il arrive, de déterminer les dépendances nécessaires au programme pour un utilisateur qui sait décompiler et qui sait lire.

              Avec quelle licence distribues-tu ton programme? Quel est le public cible? Veux-tu protéger contre une utilisation frauduleuse/malicieuse? une utilisation non autorisée (par exemple par un utilisateur qui ne se serait pas affranchie d'une redevance en échange de ton logiciel)? Veux-tu protéger ton code source?

              • Partager sur Facebook
              • Partager sur Twitter
                30 décembre 2022 à 13:32:34

                KoaTao a écrit:

                Python n'est pas trop conçu pour distribuer des programmes en sources fermées. Ce qui rend la distribution d'un tel logiciel de ce type ardue.

                Ce que tu peux faire, au mieux, est de «dissimuler/cacher» ton code (code obfuscation): https://wiki.python.org/moin/Asking%20for%20Help/How%20do%20you%20protect%20Python%20source%20code%3F.

                Je pense que le dernier paragraphe est très à propos ici.

                Et je pense que tu essaies de protéger ton programme d'une mauvaise manière en voulant le distribuer comme ça.

                il sera assez aisée. quoiqu'il arrive, de déterminer les dépendances nécessaires au programme pour un utilisateur qui sait décompiler et qui sait lire.

                Avec quelle licence distribues-tu ton programme? Quel est le public cible? Veux-tu protéger contre une utilisation frauduleuse/malicieuse? une utilisation non autorisée (par exemple par un utilisateur qui ne se serait pas affranchie d'une redevance en échange de ton logiciel)? Veux-tu protéger ton code source?


                Ok, je comprends mieux. En fait, je ne cherche pas spécialement à protéger le code source du programme car j'ai conscience qu'un utilisateur averti pourrait décompiler le code et dans la mesure où ce sont justement des utilisateurs non avertis qui l'utiliseront, ce n'est pas quelque chose que je crains. 

                Ce que je voudrais éviter c'est, comme tu l'as mentionné, une utilisation non autorisée car ce programme aura une vocation commerciale. Donc les utilisateurs paieront une redevance en échange du logiciel et des services attachés. Ce que je souhaite éviter c'est qu'un utilisateur copie/colle le programme sur la machine d'une tierce personne qui ne paie pas redevance et donc utilise le programme gratuitement. Au départ j'avais pensé à utiliser des clefs mais je voulais simplifier la chose en le rendant inutilisable si les dépendances ne sont pas installées sur la machine de la tierce personne. 

                Pour la licence, je ne me suis pas encore plongé sur ce sujet mais effectivement je dois y réfléchir. 

                En résumé, si je comprends bien, la seule façon serait d'utiliser des clefs pour chaque utilisateur ? J'avais aussi pensé à mettre dans le contrat de licence une clause selon laquelle l'utilisateur s'engage à ne pas essayer de copier le programme et de le distribuer à des tiers. 

                • Partager sur Facebook
                • Partager sur Twitter
                  30 décembre 2022 à 15:57:23

                  Bonjour,

                  Il y a 2 aspects à ton problème:

                  1_ cacher le code Python aux autres utilisateurs, en distribuant un exe par exemple

                  2_ faire en sorte que l'utilisateur ne le copie pas sur une autre machine

                  Tu pourrais profiter de ce qu'il est caché pour y mettre un contrôle de licence basé sur

                  un paramètre unique lié à l'ordi de l'utilisateur, l'adresse mac, par exemple...

                  -
                  Edité par Phil_1857 30 décembre 2022 à 15:58:48

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 décembre 2022 à 18:06:16

                    Phil_1857 a écrit:

                    Bonjour,

                    Il y a 2 aspects à ton problème:

                    1_ cacher le code Python aux autres utilisateurs, en distribuant un exe par exemple

                    2_ faire en sorte que l'utilisateur ne le copie pas sur une autre machine

                    Tu pourrais profiter de ce qu'il est caché pour y mettre un contrôle de licence basé sur

                    un paramètre unique lié à l'ordi de l'utilisateur, l'adresse mac, par exemple...

                    -
                    Edité par Phil_1857 il y a environ 1 heure

                    Bonjour, 

                    Effectivement j'avais pensé à utiliser ce schéma. Il faudrait récupérer un paramètre unique et lui associé une clef et vérifier à chaque ouverture du programme que le paramètre unique correspond bien à une clef. Mais comme je souhaite que mon programme puisse fonctionner en dehors de toute connexion à internet cela signifie que le fichier qui comprend le paramètre unique et la clef associée doit être sur l'ordinateur de l'utilisateur et par conséquent qu'il ne peut pas être modifié par l'utilisateur.

                    Ca me parait pas infaisable et ca peut être assez pertinent si on part du principe que l'utilisateur n'a aucune compétence en informatique et qu'il ne parviendra pas à trouver un moyen de modifier le fichier qui contient les paires paramètre unique/clef.

                    Je sais pas ce que tu en penses? 

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 décembre 2022 à 20:58:39

                      Bonjour,

                      On parle de combien d'utilisateurs? Et qui va déployer le logiciel sur l'ordinateur? Et comment?

                      Si tu lies le logiciel à un ordinateur, alors commercialement, tu dois aussi le vendre comme tel.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 décembre 2022 à 0:30:35

                        KoaTao a écrit:

                        Bonjour,

                        On parle de combien d'utilisateurs? Et qui va déployer le logiciel sur l'ordinateur? Et comment?

                        Si tu lies le logiciel à un ordinateur, alors commercialement, tu dois aussi le vendre comme tel.


                        Bonjour, 

                        On parle de quelques dizaines d'utilisateur et je m'occuperai de déployer le logiciel via les .exe. Pourquoi, quelles sont les conséquences ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 décembre 2022 à 11:52:01

                          Bonjour,

                          Concernant le contrôle de licence, on ne peut évidemment pas coder en dur la clef dans le programme Python à distribuer

                          (il faudrait une version par utilisateur !)

                          Par contre, tu peux récupérer, lors de l'install, un paramètre unique de l'ordi de l'utilisateur (tu ne lui dis pas quoi)

                          et tu génères, avec un petit utilitaire que tu aura développé, un fichier de licence contenant cette clef, mais cryptée

                          Tu places ce fichier dans un certain répertoire, l'utilisateur peut y aller, l'ouvrir, mais comme il contient un truc crypté ...

                          Et ton programme Python commence par lire le fameux paramètre directement sur l'ordi, puis lit

                          la clef dans le fichier, la décrypte et compare si c'est identique ou pas

                          -
                          Edité par Phil_1857 31 décembre 2022 à 11:53:50

                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 décembre 2022 à 15:18:46

                            Bonjour, 

                            Effectivement c'est plus simple comme tu l'expliques. 

                            Par contre, quand tu dis que je récupère un paramètre unique de l'ordinateur de l'utilisateur, pourquoi tu précises qu'on ne lui dit pas quoi ? Par exemple, j'avais pensé à utiliser le numéro de série de l'ordinateur et demander à chaque utilisateur de me fournir ce numéro de série, puisque générer une clef cryptée qui sera placé dans un fichier de licence comme tu l'as mentionné. 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              31 décembre 2022 à 16:28:06

                              oui, effectivement, il peut savoir puisque, ensuite ce no est crypté

                              comme il ne sait pas comment crypter, il ne peut pas donner ton programme à une tierce personne 

                              Par contre, il faut ton ton programme Python, non seulement lise le no dans le fichier,

                              mais aussi qu'il le récupère directement sur l'ordi utilisateur pour comparer

                              -
                              Edité par Phil_1857 31 décembre 2022 à 16:59:27

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                31 décembre 2022 à 16:31:24

                                Bonjour,

                                Il faudra aussi gérer le remplacement des ordinateurs, rien ne garantie qu'il n'utilisera plus son "ancien" PC mais tu ne vas pas faire payer 2 licences dans cette hypothèse.

                                PS : Je ne sais pas distribuer un logiciel, peut-être qu'utiliser le réseau internet serait le plus simple ?

                                -
                                Edité par Anonyme 31 décembre 2022 à 16:32:37

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  31 décembre 2022 à 16:37:29

                                  Bonjour Erispoe,

                                  Nous utilisions un système de ce genre dans l'entreprise où je travaillais, et bien évidemment,

                                  si un client changeait de machine, (ça n'arrivait pas tout les 4 matins non plus),

                                  on lui générait un nouveau ficher de licence

                                  -
                                  Edité par Phil_1857 31 décembre 2022 à 16:38:12

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    31 décembre 2022 à 17:49:06

                                    Effectivement Erispoe, utiliser le réseau internet serait plus simple mais je souhaite que le logiciel puisse être utilisée en dehors de toute connexion internet. Donc vérifier les licences via une BDD en ligne est impossible dans mon cas. D'ailleurs, il me semble que des entreprises proposent ce genre de solutions. 

                                    Comme l'a dit Phil, si un utilisateur change d'ordinateur alors un nouveau fichier de licence sera généré.

                                    Phil_1857 a écrit:

                                    oui, effectivement, il peut savoir puisque, ensuite ce no est crypté

                                    comme il ne sait pas comment crypter, il ne peut pas donner ton programme à une tierce personne 

                                    Par contre, il faut ton ton programme Python, non seulement lise le no dans le fichier,

                                    mais aussi qu'il le récupère directement sur l'ordi utilisateur pour comparer

                                    -
                                    Edité par Phil_1857 il y a environ 1 heure

                                    Merci beaucoup pour ta réponse!
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      31 décembre 2022 à 18:30:13

                                      Dit autrement : Qui te dit que l'utilisateur ne prétextera pas un changement d'ordi pour avoir une licence gratuite ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        1 janvier 2023 à 18:27:51

                                        !babou!38 a écrit:

                                        KoaTao a écrit:

                                        Bonjour,

                                        On parle de combien d'utilisateurs? Et qui va déployer le logiciel sur l'ordinateur? Et comment?

                                        Si tu lies le logiciel à un ordinateur, alors commercialement, tu dois aussi le vendre comme tel.


                                        Bonjour, 

                                        On parle de quelques dizaines d'utilisateur et je m'occuperai de déployer le logiciel via les .exe. Pourquoi, quelles sont les conséquences ?


                                        As-tu déjà déployé des logiciels ou fait de la maintenance informatique?

                                        Il semble que tu t'orientes vers un déploiement manuel. Tu as deux possibilité qui vont te demander du temps en prestation:

                                        • soit accéder physiquement au système
                                        • soit accéder au système à distance avec un outil comme TeamViewer ou AnyDesk que l'utilisateur doit préalablement télécharger et lancer sur son poste. Utilisateur qui on le rappelle ne sont pas à l'aise avec l'outil informatique. De plus, l'utilisation de ce type de logiciel d'accès à distance dans un usage commercial comme celui là va te demander d'acheter une licence.

                                        Comme c'est une prestation (payante ou non, à toi de voir), et qu'en plus tu accèdes à un système informatique qui n'est pas le tien, il va falloir établir un contrat légal qui t'autorise à faire les manipulations dont tu as besoin. Ce contrat il faut le produire et à son terme fournir un procès verbal de recette. Tout ça va demander du temps en plus de la prestation en elle-même: relation client (fixer la date de la prestation avec le client, faire de l'avant-vente, du SAV, etc..), un tout petit peu de gestion de projet, de la comptabilité et du juridique. En fait, tu ne seras plus simplement l'éditeur d'une solution logiciel mais aussi le revendeur et l'intégrateur.

                                        Tes utilisateurs, ils sont peut-être nuls en informatique, mais ils connaissent probablement quelqu'un qui s'y connaît, et si ta solution est trop cher, ils vont chercher à la cracker. Tu dois t'assurer que tu vas rentrer dans tes frais (sachant que l'état prend une partie à la fin de tes revenues net) avec un prix qui est attractif pour que tes clients restent.

                                        Plein de question se pose en terme de SAV, surtout si tu installes toi-même la solution... La technique c'est bien, mais il faut savoir parfois prendre du recul pour envisager la solution la plus pertinente.

                                        -
                                        Edité par KoaTao 1 janvier 2023 à 18:30:37

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          6 janvier 2023 à 16:18:32

                                          ErispoeLeNarvalo a écrit:

                                          Dit autrement : Qui te dit que l'utilisateur ne prétextera pas un changement d'ordi pour avoir une licence gratuite ?


                                          Je supprimerai l'ancienne licence!

                                          KoaTao a écrit:

                                          !babou!38 a écrit:

                                          KoaTao a écrit:

                                          Bonjour,

                                          On parle de combien d'utilisateurs? Et qui va déployer le logiciel sur l'ordinateur? Et comment?

                                          Si tu lies le logiciel à un ordinateur, alors commercialement, tu dois aussi le vendre comme tel.


                                          Bonjour, 

                                          On parle de quelques dizaines d'utilisateur et je m'occuperai de déployer le logiciel via les .exe. Pourquoi, quelles sont les conséquences ?


                                          As-tu déjà déployé des logiciels ou fait de la maintenance informatique?

                                          Il semble que tu t'orientes vers un déploiement manuel. Tu as deux possibilité qui vont te demander du temps en prestation:

                                          • soit accéder physiquement au système
                                          • soit accéder au système à distance avec un outil comme TeamViewer ou AnyDesk que l'utilisateur doit préalablement télécharger et lancer sur son poste. Utilisateur qui on le rappelle ne sont pas à l'aise avec l'outil informatique. De plus, l'utilisation de ce type de logiciel d'accès à distance dans un usage commercial comme celui là va te demander d'acheter une licence.

                                          Comme c'est une prestation (payante ou non, à toi de voir), et qu'en plus tu accèdes à un système informatique qui n'est pas le tien, il va falloir établir un contrat légal qui t'autorise à faire les manipulations dont tu as besoin. Ce contrat il faut le produire et à son terme fournir un procès verbal de recette. Tout ça va demander du temps en plus de la prestation en elle-même: relation client (fixer la date de la prestation avec le client, faire de l'avant-vente, du SAV, etc..), un tout petit peu de gestion de projet, de la comptabilité et du juridique. En fait, tu ne seras plus simplement l'éditeur d'une solution logiciel mais aussi le revendeur et l'intégrateur.

                                          Tes utilisateurs, ils sont peut-être nuls en informatique, mais ils connaissent probablement quelqu'un qui s'y connaît, et si ta solution est trop cher, ils vont chercher à la cracker. Tu dois t'assurer que tu vas rentrer dans tes frais (sachant que l'état prend une partie à la fin de tes revenues net) avec un prix qui est attractif pour que tes clients restent.

                                          Plein de question se pose en terme de SAV, surtout si tu installes toi-même la solution... La technique c'est bien, mais il faut savoir parfois prendre du recul pour envisager la solution la plus pertinente.

                                          -
                                          Edité par KoaTao 1 janvier 2023 à 18:30:37

                                          Merci beaucoup pour l'ensemble de ces précisions, c'est très utile. Ce sont des choses auxquelles j'ai effectivement réfléchi, et l'idée serait au début de faire les installations moi-même puis embaucher quelqu'un qui s'en occupera et se chargera du SAV. J'envisage d'autres recrutements en fonction du nombre d'utilisateurs et des rentrées de trésorerie.



                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            6 janvier 2023 à 17:50:03

                                            Bonjour,

                                            Sais-tu comment extraire le no de série d'un PC en Python ?

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              6 janvier 2023 à 19:17:31

                                              !babou!38 a écrit:

                                              ErispoeLeNarvalo a écrit:

                                              Dit autrement : Qui te dit que l'utilisateur ne prétextera pas un changement d'ordi pour avoir une licence gratuite ?


                                              Je supprimerai l'ancienne licence!

                                              Je ne dois pas comprendre un truc du coup, tu la supprimes comment la licence sur l'ordi soi-disant HS mais en faite non ?

                                              -
                                              Edité par Anonyme 6 janvier 2023 à 19:17:40

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                17 janvier 2023 à 17:32:59

                                                Bonjour,

                                                A tout hasard, le code pour lire en direct le no de série d'un PC :

                                                # -*- coding:Utf-8 -*-
                                                
                                                import os
                                                from io import StringIO
                                                
                                                #Execution d'une commande sur Windows
                                                s_nb = os.popen('wmic bios get serialnumber').read()
                                                
                                                #la string obtenue est sur plusieurs lignes (avec des \n)
                                                #seule la 3eme nous interesse, or, en Python, on peut lire
                                                #une string comme un fichier grace à StringIO
                                                
                                                f = StringIO(s_nb)
                                                for k in range(3): line = f.readline()
                                                print('No de série : ',line[:-1].rstrip().lstrip())



                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Distribuer un programme Python

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                • Editeur
                                                • Markdown