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 :

Comment importer un module personnel d'un autre dossier ?


Sujet :

Python

  1. #21
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    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 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Salut,

    Citation Envoyé par sjlouis Voir le message
    Alors il est où, que contient-t-il exactement? Ou bien faut-il le créer ? C'est la question que j'avais posée et vous me retournez vers la doc que j'avais déjà lue et qui ne permet pas, ni de le trouver ni de voir ce qu'il contient. OK, j'avais bien compris qu'on y gérait des paths mais est-ce qu'il existe et quels sont les paths déjà présents ?
    Ouvrez la documentation et vous y trouverez:

    PYTHONPATH

    Augmente le chemin de recherche par défaut des fichiers de modules. Le format est le même que pour PATH du shell : un ou plusieurs chemins de répertoires séparés par os.pathsep (par exemple, le caractère deux-points sous Unix et point-virgule sous Windows). Les répertoires qui n'existent pas sont ignorés silencieusement.

    En plus des répertoires normaux, des entrées individuelles de PYTHONPATH peuvent faire référence à des fichiers zip contenant des modules en pur Python (soit sous forme de code source, soit sous forme compilée). Les modules d'extensions ne peuvent pas être importés à partir de fichiers zip.

    Le chemin de recherche par défaut dépend de l'installation mais commence généralement par préfixe/lib/pythonversion (voir PYTHONHOME ci-dessus). Il est toujours ajouté à PYTHONPATH.

    Comme indiqué ci-dessus dans Options de l'interface, un répertoire supplémentaire est inséré dans le chemin de recherche devant PYTHONPATH. Le chemin de recherche peut être manipulé depuis un programme Python avec la variable sys.path.
    Çà commence par "Augmente le chemin de recherche par défaut" puis çà vous explique quoi çà ressemble et ce qu'est "le chemin de recherche par défaut".
    Et si ce n'est pas encore assez clair, vous pouvez toujours chercher des exemples sur Internet.

    Citation Envoyé par sjlouis Voir le message
    Au moins il y a une vraie littérature sur sys.path.
    La première littérature étant la documentation

    sys.path

    Une liste de chaînes de caractères spécifiant les chemins de recherche des modules, initialisée à partir de la variable d'environnement PYTHONPATH et d'une valeur par défaut dépendante de l'installation.

    Puisqu'il est initialisé au démarrage du programme, le premier élément de cette liste, path[0], est le dossier contenant le script qui a été utilisé pour invoquer l'interpréteur Python. Si le dossier du script n'est pas disponible (typiquement, si l'interpréteur est invoqué interactivement ou si le script est lu à partir d'une entrée standard), path[0] sera une chaîne vide, qui indiquera à Python de chercher des modules dans le dossier actuel. Notez que le dossier du script est inséré avant les dossiers de PYTHONPATH.

    Un programme est libre de modifier cette liste pour ses propres besoins. Seuls des str ou des bytes ne devraient être ajoutés à sys.path, tous les autres types de données étant ignorés durant l'importation.
    Pas facile de passer à coté de PYTHONPATH lorsqu'on lit la vraie littérature sur sys.path.


    Citation Envoyé par sjlouis Voir le message
    Et quand vous me dites, ça c'est bien et ça c'est pas bien, pourquoi ? Moi j'aime bien comprendre la logique des choses.
    Je ne vous ai pas dit bien ou pas bien juste qu'on utilise import pour les modules, subprocess pour lancer les programmes et exec lorsqu'on a besoin d'une autre interface. Il n'y pas de notion de "bien", "pas bien" à choisir l'outil le plus adapté à ce qu'on veut faire.

    Citation Envoyé par sjlouis Voir le message
    Je fais des tests, je compare les différentes solutions et je prends celle qui me parait la meilleure, que ce soit en terme de lisibilité ou en terme de performance.
    Pour pouvoir comparer des solutions, il faut arriver à les faire fonctionner (ou essayer de comprendre pourquoi vous n'y arrivez pas). Et si vous choisissez
    exec(...) parce que vous n'avez pas réussi à faire fonctionner subprocess et que vous n'avez pas penser à utiliser import... vous n'avez rien comparé du tout.

    Il a fallu que je pose 5 ou 6 fois la question au sujet des imports relatifs pour que vous me disiez que pour Python le répertoire où était lancé le programme était considéré comme la racine.
    Vous n'êtes pas en train de demander de l'aide pour comprendre comment coder l'exercice d'un tuto mais poser des questions sur une utilisation un peu avancée de python telles que exec et la modification de sys.path.

    On peut donc supposer que vous avez de bonnes raisons pour ne pas utiliser des solutions plus standards que sont import et subprocess et que vous avez un peu cherché sur Internet (ou la documentation) ce qui se raconte sur ce message d'erreur: "ValueError: attempted relative import beyond top-level package."

    Car pour revenir à nos histoires de bagnoles, un voyant (le message d'erreur) se met à clignoter, vous savez pas s'il faut faire le niveau d'huile, s'inquiéter de la pression des pneus, faire le plein d'essence,... (comprendre le message).

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

  2. #22
    Membre à l'essai Avatar de sjlouis
    Homme Profil pro
    Chef de projet
    Inscrit en
    Septembre 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Alors j'ai passé un peu de temps à faire des recherches supplémentaires et des tests.

    Citation Envoyé par wiztricks Voir le message
    Ouvrez la documentation et vous y trouverez:

    Çà commence par "Augmente le chemin de recherche par défaut" puis çà vous explique quoi çà ressemble et ce qu'est "le chemin de recherche par défaut".
    Et si ce n'est pas encore assez clair, vous pouvez toujours chercher des exemples sur Internet.

    La première littérature étant la documentation

    Pas facile de passer à coté de PYTHONPATH lorsqu'on lit la vraie littérature sur sys.path.
    Sur Stackoverflow, j'ai pu voir que je n'étais pas le seul en difficulté avec Pythonpath pour Windows, il y a des échanges fournis et si la doc dit que sys.path récupère les infos de Pythonpath, la variable ne semble pas exister, tout au moins sous ce nom. Et si pour ajouter un lien permanent à Pythonpath, on trouve l'instruction avec "export", a priori elle ne fonctionne que sur Linux. Donc les solutions les mieux notées indiquent :
    - qu'il suffit de la créer dans le registre de Windows et d'y ajouter le path souhaité,
    - ou bien d'ajouter le chemin souhaité dans le path Windows,
    - ou bien de mettre le chemin dans un fichier .pth dans C:\Users\nom_user\AppData\Local\Programs\Python\Python37-32\Lib\site-packages

    De toute façon, je voulais avoir un chemin relatif, ce que ne permet pas cette solution, je vais donc utiliser sys.path et tester que le chemin n'existe pas déjà.

    Citation Envoyé par wiztricks Voir le message
    Je ne vous ai pas dit bien ou pas bien juste qu'on utilise import pour les modules, subprocess pour lancer les programmes et exec lorsqu'on a besoin d'une autre interface. Il n'y pas de notion de "bien", "pas bien" à choisir l'outil le plus adapté à ce qu'on veut faire.

    Pour pouvoir comparer des solutions, il faut arriver à les faire fonctionner (ou essayer de comprendre pourquoi vous n'y arrivez pas). Et si vous choisissez
    exec(...) parce que vous n'avez pas réussi à faire fonctionner subprocess et que vous n'avez pas penser à utiliser import... vous n'avez rien comparé du tout.
    J'avais regardé ces instructions il y a 3 ans et comme j'avais peu de temps, j'ai pris celle qui me donnait le résultat escompté. Là j'ai un peu plus de temps, mon application étant bien avancée.

    Alors je suis allé voir à nouveau ces instructions et après avoir noté il y a quelques temps une instruction pour "import", à savoir "import variables from module", cela fait ce que je voulais faire la première fois, sauf que pour importer ces variables, elles ne doivent pas être dans une fonction du module appelé, ou alors si c'est possible, je n'ai pas trouvé comment faire. Je souhaite mettre le traitement de ces variables dans une fonction pour qu'elles soient dans un "paragraphe propre à ces instructions" de mon module bibliothèque de fonctions. Alors je peux malgré tout les mettre au début du module ou dans un module spécifique même si cela me convient moins.

    Pour subprocess, je n'ai toujours pas compris comment m'en servir et les exemples fournis utilisent des instructions Linux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import subprocess
    subprocess.Popen(["dir"])
    retourne un message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import subprocess, sys
    subprocess.Popen([sys.executable, "dir"])
    fonctionne mais n'affiche rien à la console.

    Même chose pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import subprocess, sys
    subprocess.Popen([sys.executable, "print('toto')"])
    ou pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import subprocess, sys
    subprocess.Popen([sys.executable, "C:\\Users\\nom_user\\Documents\\DIP\\Progs\\ddd.py"])
    où ddd.py comporte l'instruction "print".

    Quand je dis que je compare 2 solutions, ce sont des lignes de code. Ainsi pour faire des contrôles sur des milliers de ligne, je peux penser à 2 traitements différents et je vais retenir celui qui dure le moins longtemps.

    Citation Envoyé par wiztricks Voir le message
    On peut donc supposer que vous avez de bonnes raisons pour ne pas utiliser des solutions plus standards que sont import et subprocess et que vous avez un peu cherché sur Internet (ou la documentation) ce qui se raconte sur ce message d'erreur: "ValueError: attempted relative import beyond top-level package."
    Et bien non, je n'ai pas pensé à rechercher juste sur ce message, j'ai juste pu voir que je n'étais pas le seul à avoir ce message et que ceux qui répondaient n'expliquaient pas ce qu'il signifiait, je ne l'ai compris que lorsque vous m'avez répondu.

    Citation Envoyé par wiztricks Voir le message
    Car pour revenir à nos histoires de bagnoles, un voyant (le message d'erreur) se met à clignoter, vous savez pas s'il faut faire le niveau d'huile, s'inquiéter de la pression des pneus, faire le plein d'essence,... (comprendre le message).
    Et bien si, on sait ce qui ne va pas car il y a un voyant par type d'anomalie, huile, ABS, freinage...

  3. #23
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    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 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Salut,

    Citation Envoyé par sjlouis Voir le message
    De toute façon, je voulais avoir un chemin relatif, ce que ne permet pas cette solution, je vais donc utiliser sys.path et tester que le chemin n'existe pas déjà.
    Définir une variable d'environnement sous Windows se fait, à la base, via la commande SET et c'est largement documenté..

    C'est une solution alternative à sys.path.

    Dans les deux cas, çà ne permet pas d'avoir des chemins relatifs.

    Citation Envoyé par sjlouis Voir le message
    Alors je suis allé voir à nouveau ces instructions et après avoir noté il y a quelques temps une instruction pour "import", à savoir "import variables from module", cela fait ce que je voulais faire la première fois, sauf que pour importer ces variables, elles ne doivent pas être dans une fonction du module appelé
    Je vous ai déjà répondu sur ce point ici.

    Citation Envoyé par sjlouis Voir le message
    Pour subprocess, je n'ai toujours pas compris comment m'en servir et les exemples fournis utilisent des instructions Linux.
    DIR est une commande Windows qui marche bien pour "tester"... Et c'est aussi une commande Python. Mais subprocess.Popen([sys.executable, "dir"]), c'est lancer python avec dir en argument ce qui ne fonctionne que s'il existe un script Python nommé dir. dans le répertoire par défaut.
    D'ailleurs, vous pouvez essayer la commande à faire executer par subprocess à la console pour tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ py dir
    C:\py37-64\python.exe: can't open file 'dir': [Errno 2] No such file or directory
    Pour demander à Python d'executer l'instruction dir passée depuis la ligne de commande, c'est: py -c dir. Vous pourrez constater que çà ne retourne rien.
    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ py -c print('toto')
    toto
    affiche bien "toto".
    Et si on traduit çà avec subprocess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import subprocess
    >>> subprocess.Popen("py -c print('toto')"
    <subprocess.Popen object at 0x00000000026436D8>
    >>> toto
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #24
    Membre à l'essai Avatar de sjlouis
    Homme Profil pro
    Chef de projet
    Inscrit en
    Septembre 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Définir une variable d'environnement sous Windows se fait, à la base, via la commande SET et c'est largement documenté..

    C'est une solution alternative à sys.path.

    Dans les deux cas, çà ne permet pas d'avoir des chemins relatifs.
    La façon de créer la variable n'était pas la plus importante, ma question c'était de savoir où la trouver et si elle existait. Il semblerait qu'elle n'existe pas sous le nom Pythonpath sous Windows.

    Citation Envoyé par wiztricks Voir le message
    Je vous ai déjà répondu sur ce point ici.
    Ce que je souhaite faire, c'est que dans le module param.py, un traitement affecte des valeurs à plusieurs variables. Des scripts importent ce module pour récupérer ces variables et les utilisent pour effectuer leurs traitements.

    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
     
    import csv, os, sys
     
    t_chemin = os.path.dirname (os.getcwd()) + "\\"
     
    class ExcelFr (csv.excel):
        delimiter = ";"
        lineterminator = "\n"
     
    csv.register_dialect ("excel-fr", ExcelFr())
     
    try :
        fichParam = open (t_chemin + "Data\\Param.csv","r")
    except :
        print ("**** Fichier Param introuvable, traitement annulé.")
        print ("     Fichier recherché : DIP\\Data\\Param.csv")
        sys.exit()
     
    readerParam = csv.reader (fichParam, "excel-fr")
     
    for enregParam in readerParam :
        if enregParam [0] == "annee" :
            t_annee = enregParam [1]
        elif enregParam [0] == "mois" :
            t_mois = enregParam [1]
        elif enregParam [0] == "repertoire reception" :
            t_repertRecept = t_chemin + t_annee + "\\" + t_mois + "\\" + enregParam [1] + "\\"
        elif enregParam [0] == "repertoire travail" :
            t_repertTrav = t_chemin + t_annee + "\\" + t_mois + "\\" + enregParam [1] + "\\"
        elif enregParam [0] == "repertoire fusion" :
            t_repertFus = enregParam [1]
        elif enregParam [0] == "repertoire a traiter" :
            t_repertTrait = enregParam [1]
        elif enregParam [0] == "document visible (1/0/ )" :
            t_paramVisible = enregParam [1]
     
    fichParam.close ()
     
    t_chemin = t_chemin + t_annee + "\\" + t_mois + "\\"
    Et dans mes différents scripts j'utiliserais les différentes variables t_xxx avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from param import t_annee, t_mois, t_repertRecept, t_repertTrav, t_repertFus, t_repertTrait, t_paramVisible, t_chemin
    Citation Envoyé par wiztricks Voir le message
    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ py -c print('toto')
    toto
    affiche bien "toto".
    Et si on traduit çà avec subprocess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import subprocess
    >>> subprocess.Popen("py -c print('toto')"
    <subprocess.Popen object at 0x00000000026436D8>
    >>> toto
    Dans mon shell ça n'affiche rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> import subprocess
    >>> subprocess.Popen("py -c print('toto')")
    <subprocess.Popen object at 0x024156D0>
    Par contre je vois une fenêtre Dos s'afficher brièvement à l'écran. Le "toto" s'y affiche peut-être.

    Merci.

  5. #25
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    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 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Citation Envoyé par sjlouis Voir le message
    La façon de créer la variable n'était pas la plus importante
    Pourtant, si vous ne la créé pas, elle n'existe pas car comme toutes les variables PYTHONmachin, si elle vous permet de changer ce que fait Python par défaut, elle n'a pas besoin d'être là pour rien.

    Citation Envoyé par sjlouis Voir le message
    Ce que je souhaite faire, c'est que dans le module param.py, un traitement affecte des valeurs à plusieurs variables.
    Ce n'est possible que si toutes ces variables sont associées au même objet mutable.

    Dans mon shell ça n'affiche rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> import subprocess
    >>> subprocess.Popen("py -c print('toto')")
    <subprocess.Popen object at 0x024156D0>
    Par défaut, lorsqu'on lance l'interpréteur Python, on le fait depuis un terminal qui permet de lancer des commandes (DOS si vous êtes sous Windows).
    Essayez voir ce qu'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> import subprocess
    >>> subprocess.call("py -c print('toto')")
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #26
    Membre à l'essai Avatar de sjlouis
    Homme Profil pro
    Chef de projet
    Inscrit en
    Septembre 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pourtant, si vous ne la créé pas, elle n'existe pas car comme toutes les variables PYTHONmachin, si elle vous permet de changer ce que fait Python par défaut, elle n'a pas besoin d'être là pour rien.
    Pourtant d'après la documentation dont avez donné le lien :

    https://docs.python.org/fr/3/library/sys.html#sys.path
    la définition de sys.path :

    Une liste de chaînes de caractères spécifiant les chemins de recherche des modules, initialisée à partir de la variable d'environnement PYTHONPATH et d'une valeur par défaut dépendante de l'installation.
    Donc comme sys.path n'est pas vide, il l'a récupéré de Pythonpath à moins que ça ne vienne de la "valeur par défaut dépendante de l'installation".

    Citation Envoyé par wiztricks Voir le message
    Ce n'est possible que si toutes ces variables sont associées au même objet mutable.
    Vous pouvez être un peu plus explicite car telle quelle je ne sais pas quoi faire de cette info.

    Citation Envoyé par wiztricks Voir le message
    Par défaut, lorsqu'on lance l'interpréteur Python, on le fait depuis un terminal qui permet de lancer des commandes (DOS si vous êtes sous Windows).
    Essayez voir ce qu'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> import subprocess
    >>> subprocess.call("py -c print('toto')")
    Ok, je n'avais jamais procédé ainsi. Je lance la console depuis un raccourci Windows.

    Merci.

  7. #27
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    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 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Salut,

    Citation Envoyé par sjlouis Voir le message
    Donc comme sys.path n'est pas vide, il l'a récupéré de Pythonpath à moins que ça ne vienne de la "valeur par défaut dépendante de l'installation".
    Vous pourriez avoir la curiosité de regarder ce que contient sys.path "par défaut", puis recommencer en ayant défini PYTHONPATH.

    Citation Envoyé par sjlouis Voir le message
    Vous pouvez être un peu plus explicite car telle quelle je ne sais pas quoi faire de cette info.
    Soit je vous ai déjà répondu soit je ne comprends pas la question. C'est le défaut d'une discussion qui va et vient dans tous les sens. Ca serait bien de fermer celle-ci et d'en ouvrir une autre en récapitulant ce que vous voulez faire.

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

  8. #28
    Membre à l'essai Avatar de sjlouis
    Homme Profil pro
    Chef de projet
    Inscrit en
    Septembre 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2017
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vous pourriez avoir la curiosité de regarder ce que contient sys.path "par défaut", puis recommencer en ayant défini PYTHONPATH.
    Et bien il va ajouter le nouveau path que j'aurais inscrit dans Pythonpath à ce qu'affichait sys.path avant la création de Pythonpath. Mais cela ne répond pas à ma question. D'après les différentes doc, je comprends que sys.path affiche les valeurs d'une variable Python existante, Pythonpath, alors qu'il semblerait que Pythonpath soit une variable que l'utilisateur peut créer pour y ajouter des liens qu'il veut permanents. Dans les différentes doc, je n'ai pas vu que l'utilisateur avait à créer cette variable.

    Citation Envoyé par wiztricks Voir le message
    Soit je vous ai déjà répondu soit je ne comprends pas la question. C'est le défaut d'une discussion qui va et vient dans tous les sens. Ca serait bien de fermer celle-ci et d'en ouvrir une autre en récapitulant ce que vous voulez faire.
    Si vous voulez mais c'est vous qui m'avez dit d'utiliser des variables associées à un objet mutable quand j'avais écrit que je souhaitais affecter des variables dans un module utilisé par plusieurs scripts (voir le code fourni précédemment) et que je souhaitais que ce code soit dans un paragraphe "propre" comme une fonction. Or je n'arrive pas à faire un import de variables dans une fonction d'un module. Et je ne sais pas comment utiliser votre info pour que ces variables soient importées d'une fonction d'un module.

    Voilà .

  9. #29
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 235
    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 235
    Points : 36 684
    Points
    36 684
    Par défaut
    Citation Envoyé par sjlouis Voir le message
    Dans les différentes doc, je n'ai pas vu que l'utilisateur avait à créer cette variable.
    Vous partez avec l'hypothèse de retrouver dans sys.path ce qui a été défini dans PYTHONPATH sans la vérifier. Et bloqué la dessus, vous êtes imperméable à une autre logique (comment çà pourrait marcher sinon) et à ce que raconte la documentation.

    Intéressant!

    Un variable d'environnement reste une variable d'environnement, impossible de la mettre à jour sans la (ré-)créer... Et si une variable n'est utilisée que pour permettre de changer un comportement par défaut (ce qui est le cas de toutes les variables d'environnement Python), pas besoin qu'elle existe de façon permanente.

    Et si vous voulez trouver où est mentionné qu'il faut la créer dans la documentation Python, c'est juste dans le tuto. qui vient avec:
    Modules standards:
    La variable sys.path est une liste de chaînes qui détermine les chemins de recherche de modules pour l'interpréteur. Elle est initialisée à un chemin par défaut pris de la variable d'environnement PYTHONPATH ou d'une valeur par défaut interne si PYTHONPATH n'est pas définie. sys.path est modifiable en utilisant les opérations habituelles des listes :

    Citation Envoyé par sjlouis Voir le message
    ...que je souhaitais que ce code soit dans un paragraphe "propre" comme une fonction. Or je n'arrive pas à faire un import de variables dans une fonction d'un module. Et je ne sais pas comment utiliser votre info pour que ces variables soient importées d'une fonction d'un module.
    La notion de paragraphe propre n'existe pas en Python.
    Importer des variables dans une fonction se fait simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def f():
         from sys import path
         print (path)
    Et importer les variables d'une fonction d'un module n'est pas possible vu ce que sont les fonctions.
    Désolé mais pour moi, ce que vous racontez est un charabia que je ne comprends pas.

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

Discussions similaires

  1. comment importer un module
    Par remy8957 dans le forum Général Python
    Réponses: 3
    Dernier message: 09/09/2009, 17h29
  2. Oracle 9i : Comment importer ma base de données vers un autre ordinateur
    Par sofiane_bfm007 dans le forum Import/Export
    Réponses: 2
    Dernier message: 13/05/2008, 11h03
  3. Réponses: 4
    Dernier message: 30/11/2007, 09h55
  4. Réponses: 5
    Dernier message: 06/06/2006, 19h15
  5. Réponses: 5
    Dernier message: 04/05/2006, 10h57

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