Existe-t-il un moyen de modifier la PATH
variable d'environnement de manière indépendante de la plate-forme à l'aide de python?
Quelque chose de similaire à os.path.join()
?
Réponses:
Vous devriez pouvoir modifier os.environ
.
Puisqu'il os.pathsep
s'agit du caractère pour séparer différents chemins, vous devez l'utiliser pour ajouter chaque nouveau chemin:
os.environ["PATH"] += os.pathsep + path
ou, s'il y a plusieurs chemins à ajouter dans une liste:
os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
Comme vous l'avez mentionné, os.path.join
peut également être utilisé pour chaque chemin individuel que vous devez ajouter dans le cas où vous devez les construire à partir de pièces séparées.
os.pathsep
j'ai mentionné (spécifique à PATH)?
os.path.sep != os.pathsep
.
Veuillez noter qu'il os.environ
ne s'agit pas en fait d'un dictionnaire. C'est un objet spécial semblable à un dictionnaire qui définit en fait les variables d'environnement dans le processus actuel en utilisant setenv .
>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'
Cela signifie que PATH
(et d'autres variables d'environnement) seront visibles pour le code C exécuté dans le même processus.
(Étant donné que les commentaires ne peuvent pas contenir de formatage, je dois le mettre dans une réponse, mais je pense que c'est un point important à souligner. C'est vraiment un commentaire sur le commentaire sur le fait qu'il n'y a pas d'équivalent à «exporter» .)
La mise en garde à prendre en compte lors de la modification des variables d'environnement en Python, est qu'il n'y a pas d'équivalent de la commande shell "export". Il n'y a aucun moyen d'injecter des modifications dans le processus actuel, uniquement des processus enfants.
os.system
, os.popen
ou subprocess.Popen
devraient ensuite être utilisées à partir de l'application Python pour lancer d'autres processus. Sinon, c'est à peu près inutile.
export
entraîne la copie d'une variable dans l'environnement de tous les processus enfants , mais n'a aucun effet sur le processus parent.