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

Contribuez Python Discussion :

Connaitre son environnement virtuel python


Sujet :

Contribuez Python

  1. #1
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    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 105
    Points : 4 455
    Points
    4 455
    Par défaut Connaitre son environnement virtuel python
    Bonjour

    j'ai pu constater que certains ne savaient pas quel environnement python ils utilisaient.
    Une commande qui devrait nous être utile :
    En fonction de l'endroit où nous la lançons (terminal, ide, dossier particulier), nous pouvons avoir un environnement python différent (python différent ou modules différents)

    Par exemple, avec ce retour ...from /home/patrick/.pyenv/versions/3.11.2/lib/python3.11/site-packages/pip (python 3.11), je peux voir que j'utilise un python personnel et non celui du système.

    Note: dans tout script python, nous avons sys.base_exec_prefix-----------

    En complément, hier, j'ai visité quelques pages de la documentation que je ne connaissais pas, et j'en ai tiré un petit script.
    Script à installer dans son PATH, qui va donner des infos sur son environnement (virtuel ou non). Il est possible de l'étendre pour donner plus de détails.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #!/usr/bin/env python
    """
    https://docs.python.org/fr/3/library/importlib.metadata.html
    """
    import platform
    import sys
    from importlib import metadata as meta
     
     
    def _hi(string: str, use: bool = True) -> str:
        if not use:
            return string
        return f"\33[32m{string}\33[0m"
     
    eps = meta.entry_points()
    pips = sorted(set(p for l in meta.packages_distributions().values() for p in l))
     
    for pkg in pips:
        pkg = meta.distribution(pkg)
        if not pkg:
            continue
     
        # voir pour les champs : https://packaging.python.org/en/latest/specifications/core-metadata/#core-metadata
        name = f"{pkg.name:20}"
        print(f"{_hi(name)}{pkg.version:<11} {pkg.metadata.get('Summary', '')}  ")
        if home := pkg.metadata['Home-page']:
            print(" "*31, f"{home}")
     
        if ep := eps.select(name=pkg.name):
            #Uniquement les paquets avec un fichier __main__.py
            print(" "*31, "# est une application")
     
        if files := [True for p in meta.files(pkg.name) if p.suffix == ".py"]:
            print(" "*31, len(files), "fichiers python")
     
        if requests := meta.requires(pkg.name):
            sani = lambda x: ''.join([c if c not in ('[', '>', '=', '~', ';') else ' ' for c in x]).split()[0]
            requests = sorted(set(sani(r) for r in requests))
            # info intéressante mais casse cette mise en page
            # print(" "*31, f"Peut utiliser: {tuple(requests) if len(requests)>1 else requests[0]}")
     
        print()
     
    print()
    print("# ", len(pips), "paquets")
    pip = meta.distribution("pip")
    print("#  Environnement Python utilisé:", pip._path.parent.parent)
    print("#  Environnement Python utilisé:", sys.base_exec_prefix)
    print("#  Interpréteur Python :", sys.executable)
    Un exemple de sortie :
    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
    19
    20
    21
    22
    23
    24
    pyflakes            3.0.1       passive checker of Python programs  
                                    https://github.com/PyCQA/pyflakes
                                    # est une application
                                    21 fichiers python
    ...
     
    urllib3             1.26.15     HTTP library with thread-safe connection pooling, file post, and more.  
                                    https://urllib3.readthedocs.io/
                                    38 fichiers python
     
    wrapt               1.15.0      Module for decorators, wrappers and monkey patching.  
                                    https://github.com/GrahamDumpleton/wrapt
                                    5 fichiers python
     
    wsproto             1.2.0       WebSockets state-machine based protocol implementation  
                                    https://github.com/python-hyper/wsproto/
                                    8 fichiers python
     
     
    #  40 paquets
    #  Python: 3.11.2
    #  Environnement Python utilisé: /home/patrick/.pyenv/versions/3.11.2/lib/python3.11
    #  Environnement Python utilisé: /home/patrick/.pyenv/versions/3.11.2
    #  Interpréteur Python : /home/patrick/.pyenv/versions/3.11.2/bin/python
    Toujours sur le même machine, mais dans un autre environnement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #  257 paquets
    #  Python: 3.10.10
    #  Environnement Python utilisé: /usr/lib/python3.10
    #  Environnement Python utilisé: /usr
    #  Interpréteur Python : /usr/bin/python
    $moi= ( !== ) ? : ;

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 876
    Points
    1 876
    Par défaut
    Merci, je ne connais pas la méthode meta, je vais donc regarder.
    Je pense que ce code peut être intéressant aussi pour réaliser un BOM (bill of materials), en vue d'avoir une meilleure vue des composants utilisés dans une optique de sécurité: je pense notamment aux problèmes de supply chain attacks rapportés: il est utile de savoir si on a des trucs à patcher rapidement, ou si on a peut-être embarqué une saleté dans sa solution.

Discussions similaires

  1. Connaitre son ip public
    Par xlurp dans le forum Réseau
    Réponses: 5
    Dernier message: 03/10/2008, 10h55
  2. connaitre son adresse IP
    Par Tex-Twil dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 14/01/2006, 16h04
  3. Réponses: 3
    Dernier message: 25/11/2005, 13h22
  4. Connaître son addresse IP
    Par LE NEINDRE dans le forum Modules
    Réponses: 3
    Dernier message: 27/09/2005, 10h35
  5. Connaitre son IP
    Par kaiser2003 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 04/08/2004, 23h38

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