Python: moyen indépendant de la plate-forme pour modifier la variable d'environnement PATH


89

Existe-t-il un moyen de modifier la PATHvariable d'environnement de manière indépendante de la plate-forme à l'aide de python?

Quelque chose de similaire à os.path.join()?

Réponses:


170

Vous devriez pouvoir modifier os.environ.

Puisqu'il os.pathseps'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.joinpeut é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.


Qu'en est-il des séparateurs d'environnement PATH? ? linux - / usr / bin: / lib: ":" windows - C: \ asdf \; C: \ Prog ...; ";"
bua

2
@bua: voulez-vous dire le que os.pathsepj'ai mentionné (spécifique à PATH)?
RedGlyph

@RedGlyph Oui, désolé, je pensais que os.pathsep était "/" et "\". Je n'ai pas vérifié cela avant de réclamer;).
bua

11
@bua: C'est presque un "gotcha" ça os.path.sep != os.pathsep.
krawyoti

@krawyoti, bua: Ah, maintenant je vois ... bien repéré! C'est une erreur facile en effet :-)
RedGlyph

17

Veuillez noter qu'il os.environne 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» .)


6

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.


+1: Il est sage de le souligner, des commandes comme os.system, os.popenou subprocess.Popendevraient ensuite être utilisées à partir de l'application Python pour lancer d'autres processus. Sinon, c'est à peu près inutile.
RedGlyph

14
Ce n'est pas vrai.
Glyph du

4
Clarification de la déclaration de Glyph: ce n'est pas vrai car les changements sont injectés dans le processus actuel (qui est le processus python). OP signifiait probablement qu'il n'y avait aucun moyen d'injecter des modifications dans le processus parent (qui est généralement un shell à partir duquel le script python a été exécuté).
PonyEars

4
Si c'est ce que signifie OP, alors le shell n'a pas non plus cette capacité; exportentraîne la copie d'une variable dans l'environnement de tous les processus enfants , mais n'a aucun effet sur le processus parent.
Kyle Strand
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.