Как правильно отключить переменную среды Linux в Python?

85

Из документации:

Если платформа поддерживает эту unsetenv()функцию, вы можете удалить элементы в этом сопоставлении, чтобы сбросить переменные среды. unsetenv()будет вызываться автоматически при удалении элемента из os.environ и при вызове одного из методов pop()или clear().

Однако я хочу что-то, что будет работать независимо от наличия unsetenv(). Как удалить элементы из сопоставления, если оно недоступно? os.environ['MYVAR'] = None?

Фредли
источник
1
unsetenvсогласно документации, работает на "большинстве разновидностей Unix, Windows".
Katriel
хммм, я не был уверен. Я на платформе, где $ unset MYVARработают команды
Фредли

Ответы:

139

Просто

del os.environ['MYVAR']

должно сработать.

Винай Саджип
источник
1
В конце концов, вопрос заключался в удалении элементов из сопоставления. Если unsetenv не поддерживается, то ключ и значение удаляются из сопоставления, но остаются установленными в среде, не так ли?
Винай Саджип,
1
Если ключ не существует, я думаю, вы получите KeyError.
rickfoosusa
5
для записи del os.environработал, когда os.unsetenvне работал на OSX.
jeremyjjbrown
1
Документация на del: docs.python.org/2/tutorial/…
Марти Чанг,
К вашему сведению, это решение не идемпотентно. т.е. если MYVARне существует в среде, вы получите исключение. Вы можете обернуть его в, try:но это неудачно.
medley56
9

Вы по-прежнему можете удалять элементы из сопоставления , но это не приведет к удалению переменной из среды, если unsetenv()она недоступна.

del os.environ['MYVAR']
Sjoerd
источник