¿Cuál es la forma correcta de desarmar una variable de entorno de Linux en Python?

85

De la documentación:

Si la plataforma admite la unsetenv()función, puede eliminar elementos en esta asignación para desarmar las variables de entorno. unsetenv()se llamará automáticamente cuando se elimine un elemento de os.environ y cuando se llame a uno de los métodos pop()o clear().

Sin embargo, quiero algo que funcione independientemente de la disponibilidad de unsetenv(). ¿Cómo elimino elementos del mapeo si no está disponible? os.environ['MYVAR'] = None?

Fredley
fuente
1
unsetenvfunciona en "la mayoría de versiones de Unix, Windows" de acuerdo con los documentos.
Katriel
hmmm, no estaba seguro. Estoy en una plataforma donde $ unset MYVARfuncionan los comandos
fredley

Respuestas:

139

Sólo

del os.environ['MYVAR']

Deberia trabajar.

Vinay Sajip
fuente
1
La cuestión era eliminar elementos del mapeo, después de todo. Si unsetenv no es compatible, entonces la clave y el valor se eliminan del mapeo pero permanecen configurados en el entorno, ¿neh?
Vinay Sajip
1
Si la clave no existe, creo que obtienes un KeyError.
rickfoosusa
5
para el registro del os.environfuncionó cuando os.unsetenvno lo hizo en OSX.
jeremyjjbrown
1
Los documentos en del: docs.python.org/2/tutorial/…
Marty Chang
Para su información, esta solución no es idempotente. es decir, si MYVARno existe en el entorno, obtendrá una excepción. Puedes envolverlo en un try:pero es desafortunado.
medley56
9

Aún puede eliminar elementos del mapeo , pero realmente no eliminará la variable del entorno si unsetenv()no está disponible.

del os.environ['MYVAR']
Sjoerd
fuente