HOWTO · Python
Desactivar una variable de entorno de Linux en Python
Este artículo demuestra cómo desactivar una variable de entorno de Linux en Python.
En esta página
Para eliminar una variable de entorno desde un programa Python, borra su clave de os.environ. El cambio se aplica a ese proceso de Python y a los programas que inicie después; no puede cambiar el entorno del shell que lo inició.
Eliminar una variable de entorno en Python
Usa os.environ.pop(name, None) para eliminar una variable sin exigir que exista de antemano. Si la clave no está presente, se devuelve el segundo argumento. Por eso, esta forma resulta práctica cuando la variable puede existir o no.
Este ejemplo completo crea una variable de prueba, la elimina y después comprueba el contenido del mapeo:
import os
name = "DEMO_MODE"
os.environ[name] = "preview"
previous_value = os.environ.pop(name, None)
print(previous_value)
print(name in os.environ)
El primer valor impreso es el que estaba guardado antes de eliminar la variable; después de borrar la clave, la comprobación de pertenencia da falso. Al adaptar el ejemplo, elige tu propio nombre de variable. Evita usar una variable del sistema como PATH para hacer pruebas, ya que cambiarla puede afectar a los programas que inicie después el mismo proceso de Python.
Los cambios realizados mediante os.environ actualizan el entorno del proceso que heredarán los procesos secundarios que se inicien posteriormente. Cada proceso secundario recibe el entorno tal como está cuando se inicia. Eliminar una variable desde Python no modifica retroactivamente el shell principal ni otros procesos que ya estén en ejecución.
Elegir la API de Python adecuada para eliminar una variable
os.environ es el mapeo de Python para el entorno del proceso. Su método pop() elimina la clave del mapeo y devuelve el valor que tenía. Usa os.environ.pop() con un valor predeterminado, como None, cuando sea posible que la variable no exista y quieras manejar ese caso sin errores.
También puedes usar del os.environ[name] cuando esperes que la clave exista. La elimina, pero genera KeyError si no está presente. Para evitar ese error, comprueba if name in os.environ antes de borrarla o usa pop(name, None).
os.unsetenv() es una función del módulo os, no un método de os.environ. Python la documenta como una operación de bajo nivel; llamarla directamente no actualiza el mapeo os.environ. En el código Python habitual, usa la operación del mapeo para mantener sincronizados el mapeo y el entorno del proceso. No llames a os.environ.unsetenv(): ese método no existe.
Eliminar una clave no es lo mismo que asignarle una cadena vacía. Por ejemplo, os.environ["DEMO_MODE"] = "" mantiene la clave presente con un valor vacío. Usa pop() o del cuando la variable deba quedar ausente.
Manejar variables ausentes y valores vacíos
Una variable de entorno puede estar ausente o presente con un valor. Una cadena vacía sigue siendo un valor, así que comprobar name in os.environ permite distinguir una clave presente pero vacía de una clave ausente. De forma predeterminada, os.environ.get(name) devuelve None si la clave no existe, pero devuelve "" si existe y su valor está vacío.
Para una limpieza opcional, os.environ.pop(name, None) permite manejar ambos casos sin generar KeyError: elimina la clave si existe y devuelve su valor anterior, o devuelve None si estaba ausente. Si necesitas distinguir esos resultados, comprueba si la clave está presente antes de eliminarla o usa un objeto centinela como valor predeterminado. Recuerda que los valores del entorno son texto, por lo que una cadena vacía es distinta del valor predeterminado None que usan get() y pop().
Eliminar una variable de entorno en el shell
Para eliminar una variable del shell actual, ejecuta allí el comando unset; por ejemplo, unset DEMO_MODE en un shell POSIX. Es un comando del shell, no de Python. A partir de entonces, el shell omitirá esa variable del entorno que entrega a los programas que inicie.
Un proceso Python no puede modificar el shell que lo inició, porque un proceso hijo no puede cambiar el entorno de su proceso padre. Si Python elimina una variable de su propio os.environ, el cambio afecta a Python y a los procesos secundarios que inicie después, pero el shell permanece igual. Para que el cambio persista en el shell interactivo, ejecuta unset DEMO_MODE directamente allí; export sirve para marcar variables del shell para que se exporten a los procesos secundarios, no para eliminarlas.