Salut,
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".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.
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.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.
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.
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.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.
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
Partager