HOWTO · Python

Python에서 Linux 환경 변수 설정 해제

이 문서에서는 Python에서 Linux 환경 변수를 설정 해제하는 방법을 보여줍니다.

이 페이지의 내용

Python 프로그램에서 환경 변수를 제거하려면 os.environ에서 해당 키를 삭제합니다. 변경 사항은 해당 Python 프로세스와 그 이후에 시작하는 프로그램에 적용되며, Python을 실행한 셸의 환경은 바꾸지 못합니다.

Python에서 환경 변수 설정 해제하기

변수가 처음부터 존재한다고 가정하지 않고 제거하려면 os.environ.pop(name, None)을 사용하세요. 키가 없으면 두 번째 인수인 None이 반환되므로, 변수가 있을 수도 없을 수도 있는 경우에 편리합니다.

다음 예제는 테스트용 변수를 만든 뒤 제거하고, 이후 매핑을 확인합니다.

import os

name = "DEMO_MODE"
os.environ[name] = "preview"
previous_value = os.environ.pop(name, None)
print(previous_value)
print(name in os.environ)

첫 번째 출력값은 변수를 제거하기 전에 저장되어 있던 값입니다. 키를 제거한 뒤에는 멤버십 확인 결과가 거짓이 됩니다. 예제를 응용할 때는 원하는 변수 이름을 사용하세요. 시연에 PATH 같은 시스템 변수를 사용하지 마세요. 값을 바꾸면 같은 Python 프로세스가 나중에 시작하는 프로그램에 영향을 줄 수 있습니다.

os.environ을 통해 변경한 내용은 이후에 시작하는 자식 프로세스에 전달되는 프로세스 환경에도 반영됩니다. 자식 프로세스는 시작 시점의 환경을 받습니다. Python에서 변수를 제거해도 부모 셸이나 이미 실행 중인 다른 프로세스의 환경까지 소급해 바뀌지는 않습니다.

변수 제거에 알맞은 Python API 선택하기

os.environ은 프로세스 환경을 나타내는 Python 매핑입니다. 매핑의 pop() 메서드는 키를 제거하고 이전 값을 반환합니다. 키가 없을 수 있고 그 상황을 조용히 처리해야 한다면 None 같은 기본값을 지정해 os.environ.pop()을 사용하세요.

키가 존재한다고 확신할 때는 del os.environ[name]을 사용할 수도 있습니다. 이 방법은 키를 제거하지만 키가 없으면 KeyError를 발생시킵니다. 오류를 피하려면 삭제 전에 if name in os.environ으로 확인하거나 pop(name, None)을 사용하세요.

os.unsetenv()는 os 모듈의 함수이며 os.environ의 메서드가 아닙니다. Python 문서에서는 이를 하위 수준 작업으로 설명하며, 직접 호출해도 os.environ 매핑은 갱신되지 않습니다. 일반적인 Python 코드에서는 매핑과 프로세스 환경이 동기화되도록 매핑 연산을 사용하세요. os.environ.unsetenv()를 호출하지 마세요. 그런 메서드는 없습니다.

키를 제거하는 것과 빈 문자열을 할당하는 것은 다릅니다. 예를 들어 os.environ["DEMO_MODE"] = ""로 설정해도 키는 빈 값과 함께 남아 있습니다. 변수가 존재하지 않아야 한다면 pop()이나 del을 사용하세요.

누락된 변수와 빈 값 처리하기

여기서 환경 변수는 두 가지 상태일 수 있습니다. 변수 자체가 없거나 값과 함께 존재하는 상태입니다. 빈 문자열도 값이므로 name in os.environ을 확인하면 빈 값으로 존재하는 키와 누락된 키를 구별할 수 있습니다. os.environ.get(name)은 기본적으로 키가 없으면 None을 반환하고, 키가 빈 값으로 존재하면 ""을 반환합니다.

선택적으로 정리할 때 os.environ.pop(name, None)을 사용하면 KeyError 없이 두 상태를 모두 처리할 수 있습니다. 키가 있으면 제거하고 이전 값을 반환하며, 키가 없으면 None을 반환합니다. 두 경우를 구분해야 한다면 제거 전에 멤버십을 확인하거나 기본값으로 센티널 객체를 사용하세요. 환경 변수 값은 텍스트이므로 빈 문자열은 get()이나 pop()의 기본값인 None과 다릅니다.

셸에서 환경 변수 설정 해제하기

현재 셸에서 변수를 제거하려면 해당 셸에서 셸의 unset 명령을 실행하세요. 예를 들어 POSIX 셸에서는 unset DEMO_MODE를 실행합니다. 이는 Python 명령이 아니라 셸 명령입니다. 그러면 셸은 이후에 시작하는 프로그램에 전달하는 환경에서 해당 변수를 제외합니다.

자식 프로세스는 부모 프로세스의 환경을 바꿀 수 없으므로 Python 프로세스는 부모 셸을 수정할 수 없습니다. Python이 자체 os.environ에서 변수를 제거하면 Python과 이후에 시작하는 자식 프로세스에는 적용되지만 셸은 그대로입니다. 대화형 셸에 변경 사항을 적용하려면 그 셸에서 직접 unset DEMO_MODE를 실행하세요. export는 셸 변수를 자식 프로세스에 전달하도록 표시하는 명령이며 변수를 제거하지 않습니다.