2016-10-27 3 views
1

In Python wie kann ich programmgesteuert an meinen Systempfad anhängen? Ich bin mir bewusst, sys.path.append und nur die Dokumente durchsucht, bin ich ein wenig verwirrt obwohl. Es sagt mir, dass sys.path.append nur an die PYTHONPATH anfügt und nicht den tatsächlichen Systempfad. Gibt es eine Möglichkeit, die ich programmatisch vorübergehend an den Systempfad anhängen kann?Wie an den Systempfad programmgesteuert anhängen?

Antwort

2

aktualisieren nur die Umwelt PATH Variable:

old_path = os.environ['PATH'] 
try: 
    os.environ['PATH'] = "{}{}{}".format('/my/new/path', os.pathsep, old_path) 
finally: 
    os.environ['PATH'] = old_path 

Alternativ ihre gemeinsame Programme eine separate Umgebung zu halten, die sie verwenden, wenn andere Tools aufrufen.

env = os.environ.copy() 
env['PATH'] = "{}{}{}".format('/my/new/path', os.pathsep, env['PATH']) 
# change other env here... 
subprocess.check_call(['my', 'tool'], env=env) 
+0

Das funktioniert perfekt, also bin ich richtig, dass 'sys.append.path' nur den' PYTHONPATH' selbst tut? – Pyth0nicPenguin

+0

@ PythonicPenguin Zuerst ist es ['sys.path'] (https://docs.python.org/3/library/sys.html#sys.path) (' .append') und ja nur 'PYTHONPATH' . – xZise

+0

@ PythonicPenguin - Nicht ganz. 'sys.path.append' hängt nur für das laufende Programm an den Modul-Suchpfad an. Wenn es andere Programme ausführt, sehen sie nur den 'PYTHONPATH' von der ursprünglichen Umgebung. - Und ich meine, als Kind Prozess ausführen, nicht importieren. Wenn du andere Python-Skripte ausführst und ihnen einen anderen Pfad anzeigen möchtest, musst du das gleiche 'os.environ'-Spiel mit' PYTHONPATH' spielen. – tdelaney