Python : PATH 환경 변수를 수정하는 플랫폼 독립적 인 방법


답변:


170

을 수정할 수 있어야합니다 os.environ.

os.pathsep다른 경로를 구분하는 문자 이므로 새 경로를 각각 추가하려면 이것을 사용해야합니다.

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

또는 목록에 추가 할 경로가 여러 개인 경우 :

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

앞서 언급했듯이, os.path.join별도의 부분에서 구성해야하는 경우 추가해야하는 각 개별 경로에 사용할 수도 있습니다.


PATH 환경 구분 기호는 무엇입니까? ? 리눅스-/ usr / bin : / lib : ":"windows-C : \ asdf \; C : \ Prog ...; ";"
bua

2
@bua : os.pathsep내가 언급 한 (PATH 특정) 의미합니까?
RedGlyph 2009

@RedGlyph 예, os.pathsep가 "/"와 "\"라고 생각해서 죄송합니다. 나는 주장하기 전에 그것을 확인하지 않았다.).
bua

11
@bua : 거의 "잡았다"입니다 os.path.sep != os.pathsep.
krawyoti 2009

@krawyoti, bua : 아, 이제 알겠습니다 ... 잘 발견! 정말 쉬운 실수입니다 :-)
RedGlyph 2009

17

주의하시기 바랍니다 os.environ실제로 사전 아니다. setenv를 사용하여 현재 프로세스에서 환경 변수를 실제로 설정 하는 특별한 사전 과 같은 객체입니다 .

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

즉 , 동일한 프로세스에서 실행되는 C 코드에 PATH(및 기타 환경 변수) 표시됩니다.

(댓글은 서식을 포함 할 수 없기 때문에 답을 입력해야하는데 중요한 포인트라고 생각합니다. 이것은 실제로 'export'에 해당하는 댓글이 없다는 댓글에 대한 댓글 입니다.)


6

Python에서 환경 변수를 수정할 때주의해야 할 점은 "export"셸 명령에 해당하는 것이 없다는 것입니다. 현재 프로세스에 변경 사항을 주입하는 방법은 없으며 자식 프로세스 만 있습니다.


+1 : 현명하게 지적하면 os.system, os.popen또는 같은 명령을 subprocess.PopenPython 애플리케이션에서 사용하여 다른 프로세스를 시작해야합니다. 그렇지 않으면 거의 무의미합니다.
RedGlyph 2009

14
이것은 사실이 아닙니다.
Glyph

4
Glyph의 설명에 대한 설명 : 변경 사항 현재 프로세스 (파이썬 프로세스)에 주입 되기 때문에 이것은 사실이 아닙니다 . OP는 부모 프로세스 (일반적으로 파이썬 스크립트가 실행 된 셸)에 변경 사항을 주입 할 방법이 없음을 의미 할 수 있습니다.
PonyEars

4
이것이 OP가 의미하는 바라면 쉘에도이 기능이 없습니다. export변수가 모든 하위 프로세스 의 환경에 복사되도록 하지만 상위 프로세스에는 영향을주지 않습니다.
Kyle Strand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.