Czy istnieje sposób na zmodyfikowanie PATH
zmiennej środowiskowej w sposób niezależny od platformy przy użyciu Pythona?
Coś podobnego do os.path.join()
?
Odpowiedzi:
Powinieneś móc modyfikować os.environ
.
Ponieważ os.pathsep
jest to znak oddzielający różne ścieżki, powinieneś użyć tego, aby dołączyć każdą nową ścieżkę:
os.environ["PATH"] += os.pathsep + path
lub, jeśli istnieje kilka ścieżek do dodania na liście:
os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
Jak wspomniałeś, os.path.join
może być również używany dla każdej indywidualnej ścieżki, którą musisz dołączyć, w przypadku, gdy musisz je zbudować z oddzielnych części.
os.pathsep
wspomniane przeze mnie (specyficzne dla PATH)?
os.path.sep != os.pathsep
.
Należy pamiętać, że w os.environ
rzeczywistości nie jest to słownik. Jest to specjalny obiekt podobny do słownika, który faktycznie ustawia zmienne środowiskowe w bieżącym procesie za pomocą setenv .
>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'
Oznacza to, że PATH
(i inne zmienne środowiskowe) będą widoczne dla kodu C uruchamianego w tym samym procesie.
(Ponieważ komentarze nie mogą zawierać formatowania, muszę umieścić to w odpowiedzi, ale czuję, że jest to ważna kwestia. To jest tak naprawdę komentarz dotyczący komentarza, że nie ma odpowiednika „eksportu” ).
Zastrzeżenie, o którym należy pamiętać podczas modyfikowania zmiennych środowiskowych w Pythonie, polega na tym, że nie ma odpowiednika polecenia powłoki „eksport”. Nie ma możliwości wprowadzania zmian do bieżącego procesu, tylko procesy potomne.
os.system
, os.popen
czy subprocess.Popen
powinny być następnie wykorzystane z aplikacji Pythona do uruchomienia innych procesów. W przeciwnym razie jest to bezcelowe.
export
powoduje skopiowanie zmiennej do środowiska wszystkich procesów potomnych , ale nie ma wpływu na proces nadrzędny.