Python: PATH ortam değişkenini değiştirmenin platformdan bağımsız yolu


Yanıtlar:


174

Değiştirebilmelisiniz os.environ.

Yana os.pathsepayrı farklı yollara karakteridir, her yeni bir yol eklemek için bu kullanmalısınız:

os.environ["PATH"] += os.pathsep + path

veya bir listeye eklenecek birkaç yol varsa:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)

Bahsettiğiniz gibi, os.path.joinayrı parçalardan inşa etmeniz gerektiğinde eklemeniz gereken her bir yol için de kullanılabilir.


PATH ortam ayırıcıları ne olacak? ? linux - / usr / bin: / lib: ":" windows - C: \ asdf \; C: \ Prog ...; ";"
bua

2
@bua: Bahsettiğim şeyi mi kastediyorsunuz os.pathsep( PATH'a özgü)?
RedGlyph

@RedGlyph Evet, üzgünüm os.pathsep'in "/" ve "\" olduğunu düşündüm. Bunu talep etmeden önce kontrol etmedim;).
bua

11
@bua: Neredeyse bir "yakaladım" bu os.path.sep != os.pathsep.
krawyoti

@krawyoti, bua: Ah, şimdi görüyorum ... iyi tespit! Bu gerçekten kolay bir hata :-)
RedGlyph

18

Lütfen os.environbunun aslında bir sözlük olmadığını unutmayın . Setenv kullanarak mevcut süreçte ortam değişkenlerini gerçekten ayarlayan özel bir sözlük benzeri nesnedir .

>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'

Bu, PATH(ve diğer ortam değişkenlerinin) aynı işlemde çalıştırılan C koduna görünür olacağı anlamına gelir .

(Yorumlar biçimlendirme içeremeyeceğinden, bunu bir cevaba koymam gerekiyor, ancak bunun önemli bir nokta olduğunu düşünüyorum. Bu gerçekten de 'dışa aktar' ile eşdeğer olmadığına dair yorum hakkında bir yorum .)


6

Python'da ortam değişkenlerini değiştirirken dikkat edilmesi gereken uyarı, kabuk "dışa aktar" komutunun bir eşdeğeri olmamasıdır. Mevcut sürece değişiklik enjekte etmenin bir yolu yoktur, sadece alt süreçler.


+1: Bunu belirtmek akıllıca olacaktır os.system, os.popenveya gibi komutlar subprocess.Popendaha sonra diğer işlemleri başlatmak için Python uygulamasından kullanılmalıdır. Aksi takdirde oldukça anlamsızdır.
RedGlyph

4
Glyph en tablosuna açıklık: değişiklikler nedeniyle bu doğru değildir edilmektedir (piton süreci olan) geçerli sürece enjekte. OP büyük olasılıkla ana sürece değişiklik enjekte etmenin bir yolu olmadığı anlamına geliyordu (bu tipik olarak python betiğinin çalıştırıldığı bir kabuktur).
PonyEars

4
OP'nin anlamı buysa, kabuk da bu yeteneğe sahip değildir; exportbir değişkenin tüm alt süreçlerin ortamına kopyalanmasına neden olur , ancak üst süreç üzerinde hiçbir etkisi yoktur.
Kyle Strand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.