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 :

Empêcher la modification des scripts d'un projet python


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut Empêcher la modification des scripts d'un projet python
    Bonjour.
    J'ai envoyé à des amis, un (très gros) dossier contenant tous les fichiers d'un projet Python. Et je leur ai conseillé l'utilisation de l' EDI Pycharm community. Mais vous savez ce que c'est ! Parfois on lit un script, on ne fait pas attention, On clique, çà et là ... et c'est la cata : l'éditeur était actif, on a inséré un point d'édition et à son insu, on modifie le script ... on le relance et boum ... syntax error ou ... autre.
    Quelqu'un qui connait un minimum de Python, s'en sort très bien, car Pycharm est très bavard. D'autres ... non.
    Protéger tous les fichiers par un mot de passe (même commun) serait lassant : il y en a trop. Bien entendu aux plus ignorants d'entre-eux j'ai conseillé une sauvegarde quelque part sur leur disque, Les autres savent très bien comment corriger les erreurs qu'ils auraient pu commettre.
    Quelle solution simple, me conseillerez-vous ?
    Entendons nous bien : il ne s'agit pas d'interdire les modifications .... bien au contraire, Mais juste de freiner les ardeurs.
    Merci, à tous.
    PS : Rien trouvé dans PyCharm.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par azad2b Voir le message
    Quelle solution simple, me conseillerez-vous ?
    Si vous bossez en communauté: Un dépot de sources (style git). Ensuite chacun extrait du dépot un clone du projet, modifie sa propre partie (je pars du principe que chacun est concentré sur une lib du projet) et dépose juste la lib modifiée dans le dépot. Bref la base du développement collaboratif.

    Si c'est juste "hey les bouseux, voici mon programme, vous pouvez le tester" alors rien. Si tes potes modifient leur version déjà tant pis mais ils peuvent toujours récupérer la version que tu leur as envoyée et qu'ils ont encore dans leur boite mail.
    Tu peux aussi compiler ton projet via la lib compileall et leur filer la version compilée (byte-codée) => ça tourne mais ce n'est plus un source donc pour le modifier...
    Ou alors créer un exécutable "portable" de ton projet via pyinstaller => ça encapsule ton propet dans un "runtime" indépendant et verrouillé qui englobe tout ce dont il a besoin => ça peut même tourner sur un ordi qui n'a pas Python.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Si vous bossez en communauté: Un dépot de sources (style git). Ensuite chacun extrait du dépot un clone du projet, modifie sa propre partie (je pars du principe que chacun est concentré sur une lib du projet) et dépose juste la lib modifiée dans le dépot. Bref la base du développement collaboratif.

    Si c'est juste "hey les bouseux, voici mon programme, vous pouvez le tester" alors rien. Si tes potes modifient leur version déjà tant pis mais ils peuvent toujours récupérer la version que tu leur as envoyée et qu'ils ont encore dans leur boite mail.
    Tu peux aussi compiler ton projet via la lib compileall et leur filer la version compilée (byte-codée) => ça tourne mais ce n'est plus un source donc pour le modifier...
    Ou alors créer un exécutable "portable" de ton projet via pyinstaller => ça encapsule ton propet dans un "runtime" indépendant et verrouillé qui englobe tout ce dont il a besoin => ça peut même tourner sur un ordi qui n'a pas Python.
    La lib compillall ?
    Le nom est prometteur ! Et Pycharm me propose compillall2. Je vais jeter un oeil la dessus, Merci de ta réponse.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par azad2b Voir le message
    PS : Rien trouvé dans PyCharm.
    La plupart des IDE "moderne" ont un historique qui permet de revenir en arrière sur les modifications effectuées sur un ou plusieurs fichiers.
    Pour PyCharm, c'est la local history.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    bonjour
    Citation Envoyé par azad2b Voir le message
    je leur ai conseillé l'utilisation de l' EDI Pycharm community
    Il faudrait nous dire pourquoi tu conseilles cet editeur (un éditeur)???

    Pour moi, cela n'est pas clair, c'est un outil pour uniquement les développeurs ! Si, ils le sont alors ok et ils peuvent utiliser git en local. Sinon, c'est donner un outil pour casser l'application à presque tous les coups.

    Peut-être que tu crois qu'il faut ton éditeur pour exécuter un programme python ???
    $moi= ( !== ) ? : ;

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par azad2b Voir le message
    La lib compillall ?
    Le nom est prometteur !
    C'est la librairie utilisée en interne par Python lui-même pour transformer les ".py" en ".pyc". Et cette lib est accessible aussi donc depuis un prog Python pour transformer manuellement d'autres progs ".py" en un ".pyc".
    Exemple: tu crées un script "prog.py" contenant un code Python quelconque (et fonctionnel), puis tu ouvres un idle Python et tu tapes ces commandes
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import compileall
    >>> compileall.compile_file("prog.py")
    True
    Ca te génère un dossier "__pycache__" contenant un fichier "prog.cpython-310.pyc" (310 parce que je suis sous Python v3.10) que tu peux parfaitement exécuter. Mais pour le modifier...

    Après compileall2 doit être une évolution de cette lib...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Autre solution: un petit programme de lancement qui fait le hash du programme à lancer pour le comparer avec une référence, et pour alerter d'une modification du source.

    Module à utiliser: hashlib

    Exemple de fonction qui calcule le hashcode d'un fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    try:
        from hashlib import sha3_256 as sha256
    except Exception:
        from hashlib import sha256 # pour Python3 < 3.6
     
    def hashfichier(fichier):
        """Calcule le hashcode SHA256 du contenu du fichier
           - fichier: adresse disque du fichier avec son chemin
           Retourne le résultat en hexa (type str)
        """
        h = sha256()
        with open(fichier, 'rb') as fs:
            while True:
                bloc = fs.read(32768)
                if not bloc:
                    break # lecture fichier terminée
                h.update(bloc)
        return h.hexdigest()
    Le hashcode de référence est à placer dans un fichier texte pour faire la comparaison à chaque lancement.

    A noter que s'il y a plusieurs fichiers à traiter de cette façon, on peut le faire en parallèle en utilisant ProcessPoolExecutor du module concurrent.futures pour gagner du temps.

    On pourrait d'ailleurs utiliser ce même fichier de lancement pour voir s'il y a une mise à jour de version à faire, et la faire si accord.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par azad2b Voir le message
    Quelle solution simple, me conseillerez-vous ?
    Si vos collaborateurs ne sont destinés qu'à simplement utiliser le programme sans le faire évoluer, leur préconiser de faire une archive zip du gros dossier serait déjà un bon début.

    En cas de plantage, hop ! On reprend les fichiers source.

    A priori, il ne s'agit pas de travail collaboratif sinon vous n'auriez pas abordé la solution de protéger les fichiers par mots de passe.

    Ou sinon, comme déjà préconisé par Sve@r, utiliser une solution de dépôt type Github. Chaque utilisateur clone le repository mis à disposition par vos soins et en cas de mauvaise manipulation, il suffit de cloner à nouveau le repo. Mais si le programme n'est pas voué à être modifié par quiconque autre que vous, mieux vaut se méfier de cette solution. Un git push est si vite arrivé

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    Il faudrait nous dire pourquoi tu conseilles cet éditeur (un éditeur)???

    Pour moi, cela n'est pas clair, c'est un outil pour uniquement les développeurs ! Si, ils le sont alors ok et ils peuvent utiliser git en local. Sinon, c'est donner un outil pour casser l'application à presque tous les coups.

    Peut-être que tu crois qu'il faut ton éditeur pour exécuter un programme python ???
    Non, bien entendu, mais avec un simple éditeur de texte, ils ne seraient pas plus à l' abri de la gaffe. Et un profane qui saurait user des options de l' historique, ne serait plus tout à fait un profane. Et puis aussi, j'ai usé de beaucoup de "bookmark" pour commenter le code.

    Et je suis sans doute sadique, mais pas au point de leur conseiller un produit Windaube !

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par azad2b Voir le message
    Non, bien entendu, mais avec un simple éditeur de texte, ils ne seraient pas plus à l' abri de la gaffe.
    A un moment donné, il faut savoir dire "stop". Imaginons que tu files un excel à un pote et que ton pote pête toutes les formules et feuilles, bon ben tu peux pas tout protéger.
    Remontons la métaphore d'un cran : tu files ta voiture à un pote et ton pote fonce volontairement dans un arbre... Bref tout ça pour dire que les gens sont libres de leurs choix et que tu ne peux pas tout checker. Tu leurs files un prog ben la règle de base c'est "pas toucher".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Si on a besoin d'un éditeur pour seulement consulter le code, il faudrait prendre un éditeur "read only".

    Et ma solution du hashcode (mon message précédent) permet d'alerter d'une modification non prévue, voire même recharger automatiquement la version d'origine.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 121
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 121
    Points : 1 628
    Points
    1 628
    Par défaut
    Sinon je pensais à "bêtement" mettre les fichiers en lecture seule via leurs attributs (sous windows, clic droit > propriétés, cocher la case lecture seule)

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    il faudrait prendre un éditeur "read only".
    cat sous Linux, type sous Windows. Avec le pipe more si besoin

    Citation Envoyé par umfred Voir le message
    Sinon je pensais à "bêtement" mettre les fichiers en lecture seule via leurs attributs (sous windows, clic droit > propriétés, cocher la case lecture seule)
    C'est pas bête et on peut toujours trouver toute une gamme d'autres solutions analogues mais si un user veut modifier ses fichiers (parce que quand il les a récupérés/téléchargés/etc ça devient les siens), il le pourra toujours...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Dans quel but ces personnes reçoivent ce projet Python ?
    - Simplement pour l'exécuter ? Si oui, il peut être intéressant de passer par PyInstaller (ou un équivalent) https://pyinstaller.org/en/stable/ pour leur donner un .exe.
    - Modifier une partie du projet mais pas l'autre ? Si oui, peut-être qu'il faut packager la partie à ne pas modifier comme si c'était une bibliothèque partagée. Je crois que les wheels sont faits pour ça https://realpython.com/python-wheels/

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/04/2014, 19h10
  2. Empêcher la modification des formules après ajout de feuilles.
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 17/10/2009, 19h58
  3. Réponses: 2
    Dernier message: 17/08/2009, 16h48
  4. Réponses: 4
    Dernier message: 19/09/2007, 10h05

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