mirror of https://github.com/tiangolo/fastapi.git
299 lines
8.3 KiB
Markdown
299 lines
8.3 KiB
Markdown
# Variables de Entorno
|
|
|
|
/// tip | Consejo
|
|
|
|
Si ya sabes qué son las "variables de entorno" y cómo usarlas, siéntete libre de saltarte esto.
|
|
|
|
///
|
|
|
|
Una variable de entorno (también conocida como "**env var**") es una variable que vive **fuera** del código de Python, en el **sistema operativo**, y podría ser leída por tu código de Python (o por otros programas también).
|
|
|
|
Las variables de entorno pueden ser útiles para manejar **configuraciones** de aplicaciones, como parte de la **instalación** de Python, etc.
|
|
|
|
## Crear y Usar Variables de Entorno
|
|
|
|
Puedes **crear** y usar variables de entorno en la **shell (terminal)**, sin necesidad de Python:
|
|
|
|
//// tab | Linux, macOS, Windows Bash
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
// Podrías crear una env var MY_NAME con
|
|
$ export MY_NAME="Wade Wilson"
|
|
|
|
// Luego podrías usarla con otros programas, como
|
|
$ echo "Hello $MY_NAME"
|
|
|
|
Hello Wade Wilson
|
|
```
|
|
|
|
</div>
|
|
|
|
////
|
|
|
|
//// tab | Windows PowerShell
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
// Crea una env var MY_NAME
|
|
$ $Env:MY_NAME = "Wade Wilson"
|
|
|
|
// Úsala con otros programas, como
|
|
$ echo "Hello $Env:MY_NAME"
|
|
|
|
Hello Wade Wilson
|
|
```
|
|
|
|
</div>
|
|
|
|
////
|
|
|
|
## Leer Variables de Entorno en Python
|
|
|
|
También podrías crear variables de entorno **fuera** de Python, en la terminal (o con cualquier otro método), y luego **leerlas en Python**.
|
|
|
|
Por ejemplo, podrías tener un archivo `main.py` con:
|
|
|
|
```Python hl_lines="3"
|
|
import os
|
|
|
|
name = os.getenv("MY_NAME", "World")
|
|
print(f"Hello {name} from Python")
|
|
```
|
|
|
|
/// tip | Consejo
|
|
|
|
El segundo argumento de <a href="https://docs.python.org/3.8/library/os.html#os.getenv" class="external-link" target="_blank">`os.getenv()`</a> es el valor por defecto a retornar.
|
|
|
|
Si no se proporciona, es `None` por defecto; aquí proporcionamos `"World"` como el valor por defecto para usar.
|
|
|
|
///
|
|
|
|
Luego podrías llamar a ese programa Python:
|
|
|
|
//// tab | Linux, macOS, Windows Bash
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
// Aquí todavía no configuramos la env var
|
|
$ python main.py
|
|
|
|
// Como no configuramos la env var, obtenemos el valor por defecto
|
|
|
|
Hello World from Python
|
|
|
|
// Pero si creamos una variable de entorno primero
|
|
$ export MY_NAME="Wade Wilson"
|
|
|
|
// Y luego llamamos al programa nuevamente
|
|
$ python main.py
|
|
|
|
// Ahora puede leer la variable de entorno
|
|
|
|
Hello Wade Wilson from Python
|
|
```
|
|
|
|
</div>
|
|
|
|
////
|
|
|
|
//// tab | Windows PowerShell
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
// Aquí todavía no configuramos la env var
|
|
$ python main.py
|
|
|
|
// Como no configuramos la env var, obtenemos el valor por defecto
|
|
|
|
Hello World from Python
|
|
|
|
// Pero si creamos una variable de entorno primero
|
|
$ $Env:MY_NAME = "Wade Wilson"
|
|
|
|
// Y luego llamamos al programa nuevamente
|
|
$ python main.py
|
|
|
|
// Ahora puede leer la variable de entorno
|
|
|
|
Hello Wade Wilson from Python
|
|
```
|
|
|
|
</div>
|
|
|
|
////
|
|
|
|
Dado que las variables de entorno pueden configurarse fuera del código, pero pueden ser leídas por el código, y no tienen que ser almacenadas (committed en `git`) con el resto de los archivos, es común usarlas para configuraciones o **ajustes**.
|
|
|
|
También puedes crear una variable de entorno solo para una **invocación específica de un programa**, que está disponible solo para ese programa, y solo durante su duración.
|
|
|
|
Para hacer eso, créala justo antes del programa en sí, en la misma línea:
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
// Crea una env var MY_NAME en línea para esta llamada del programa
|
|
$ MY_NAME="Wade Wilson" python main.py
|
|
|
|
// Ahora puede leer la variable de entorno
|
|
|
|
Hello Wade Wilson from Python
|
|
|
|
// La env var ya no existe después
|
|
$ python main.py
|
|
|
|
Hello World from Python
|
|
```
|
|
|
|
</div>
|
|
|
|
/// tip | Consejo
|
|
|
|
Puedes leer más al respecto en <a href="https://12factor.net/config" class="external-link" target="_blank">The Twelve-Factor App: Config</a>.
|
|
|
|
///
|
|
|
|
## Tipos y Validación
|
|
|
|
Estas variables de entorno solo pueden manejar **strings de texto**, ya que son externas a Python y deben ser compatibles con otros programas y el resto del sistema (e incluso con diferentes sistemas operativos, como Linux, Windows, macOS).
|
|
|
|
Esto significa que **cualquier valor** leído en Python desde una variable de entorno **será un `str`**, y cualquier conversión a un tipo diferente o cualquier validación tiene que hacerse en el código.
|
|
|
|
Aprenderás más sobre cómo usar variables de entorno para manejar **configuraciones de aplicación** en la [Guía del Usuario Avanzado - Ajustes y Variables de Entorno](./advanced/settings.md){.internal-link target=_blank}.
|
|
|
|
## Variable de Entorno `PATH`
|
|
|
|
Hay una variable de entorno **especial** llamada **`PATH`** que es utilizada por los sistemas operativos (Linux, macOS, Windows) para encontrar programas a ejecutar.
|
|
|
|
El valor de la variable `PATH` es un string largo que consiste en directorios separados por dos puntos `:` en Linux y macOS, y por punto y coma `;` en Windows.
|
|
|
|
Por ejemplo, la variable de entorno `PATH` podría verse así:
|
|
|
|
//// tab | Linux, macOS
|
|
|
|
```plaintext
|
|
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
|
|
```
|
|
|
|
Esto significa que el sistema debería buscar programas en los directorios:
|
|
|
|
* `/usr/local/bin`
|
|
* `/usr/bin`
|
|
* `/bin`
|
|
* `/usr/sbin`
|
|
* `/sbin`
|
|
|
|
////
|
|
|
|
//// tab | Windows
|
|
|
|
```plaintext
|
|
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32
|
|
```
|
|
|
|
Esto significa que el sistema debería buscar programas en los directorios:
|
|
|
|
* `C:\Program Files\Python312\Scripts`
|
|
* `C:\Program Files\Python312`
|
|
* `C:\Windows\System32`
|
|
|
|
////
|
|
|
|
Cuando escribes un **comando** en la terminal, el sistema operativo **busca** el programa en **cada uno de esos directorios** listados en la variable de entorno `PATH`.
|
|
|
|
Por ejemplo, cuando escribes `python` en la terminal, el sistema operativo busca un programa llamado `python` en el **primer directorio** de esa lista.
|
|
|
|
Si lo encuentra, entonces lo **utilizará**. De lo contrario, continúa buscando en los **otros directorios**.
|
|
|
|
### Instalando Python y Actualizando el `PATH`
|
|
|
|
Cuando instalas Python, se te podría preguntar si deseas actualizar la variable de entorno `PATH`.
|
|
|
|
//// tab | Linux, macOS
|
|
|
|
Digamos que instalas Python y termina en un directorio `/opt/custompython/bin`.
|
|
|
|
Si dices que sí para actualizar la variable de entorno `PATH`, entonces el instalador añadirá `/opt/custompython/bin` a la variable de entorno `PATH`.
|
|
|
|
Podría verse así:
|
|
|
|
```plaintext
|
|
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin
|
|
```
|
|
|
|
De esta manera, cuando escribes `python` en la terminal, el sistema encontrará el programa Python en `/opt/custompython/bin` (el último directorio) y usará ese.
|
|
|
|
////
|
|
|
|
//// tab | Windows
|
|
|
|
Digamos que instalas Python y termina en un directorio `C:\opt\custompython\bin`.
|
|
|
|
Si dices que sí para actualizar la variable de entorno `PATH`, entonces el instalador añadirá `C:\opt\custompython\bin` a la variable de entorno `PATH`.
|
|
|
|
```plaintext
|
|
C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin
|
|
```
|
|
|
|
De esta manera, cuando escribes `python` en la terminal, el sistema encontrará el programa Python en `C:\opt\custompython\bin` (el último directorio) y usará ese.
|
|
|
|
////
|
|
|
|
Entonces, si escribes:
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
$ python
|
|
```
|
|
|
|
</div>
|
|
|
|
//// tab | Linux, macOS
|
|
|
|
El sistema **encontrará** el programa `python` en `/opt/custompython/bin` y lo ejecutará.
|
|
|
|
Esto sería más o menos equivalente a escribir:
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
$ /opt/custompython/bin/python
|
|
```
|
|
|
|
</div>
|
|
|
|
////
|
|
|
|
//// tab | Windows
|
|
|
|
El sistema **encontrará** el programa `python` en `C:\opt\custompython\bin\python` y lo ejecutará.
|
|
|
|
Esto sería más o menos equivalente a escribir:
|
|
|
|
<div class="termy">
|
|
|
|
```console
|
|
$ C:\opt\custompython\bin\python
|
|
```
|
|
|
|
</div>
|
|
|
|
////
|
|
|
|
Esta información será útil al aprender sobre [Entornos Virtuales](virtual-environments.md){.internal-link target=_blank}.
|
|
|
|
## Conclusión
|
|
|
|
Con esto deberías tener una comprensión básica de qué son las **variables de entorno** y cómo usarlas en Python.
|
|
|
|
También puedes leer más sobre ellas en la <a href="https://en.wikipedia.org/wiki/Environment_variable" class="external-link" target="_blank">Wikipedia para Variable de Entorno</a>.
|
|
|
|
En muchos casos no es muy obvio cómo las variables de entorno serían útiles y aplicables de inmediato. Pero siguen apareciendo en muchos escenarios diferentes cuando estás desarrollando, así que es bueno conocerlas.
|
|
|
|
Por ejemplo, necesitarás esta información en la siguiente sección, sobre [Entornos Virtuales](virtual-environments.md).
|