# FastAPI CLI { #fastapi-cli } **FastAPI CLI** es un programa de línea de comandos que puedes usar para servir tu aplicación FastAPI, gestionar tu proyecto FastAPI, y más. Cuando instalas FastAPI (por ejemplo, con `pip install "fastapi[standard]"`), viene con un programa de línea de comandos que puedes ejecutar en la terminal. Para ejecutar tu aplicación FastAPI en modo de desarrollo, puedes usar el comando `fastapi dev`:
```console $ fastapi dev FastAPI Starting development server 🚀 Searching for package file structure from directories with __init__.py files Importing from /home/user/code/awesomeapp module 🐍 main.py code Importing the FastAPI app object from the module with the following code: from main import app app Using import string: main:app server Server started at http://127.0.0.1:8000 server Documentation at http://127.0.0.1:8000/docs tip Running in development mode, for production use: fastapi run Logs: INFO Will watch for changes in these directories: ['/home/user/code/awesomeapp'] INFO Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO Started reloader process [383138] using WatchFiles INFO Started server process [383153] INFO Waiting for application startup. INFO Application startup complete. ```
/// tip | Consejo Para producción usarías `fastapi run` en lugar de `fastapi dev`. 🚀 /// Internamente, **FastAPI CLI** usa [Uvicorn](https://www.uvicorn.dev), un servidor ASGI de alto rendimiento y listo para producción. 😎 El CLI `fastapi` intentará detectar automáticamente la app de FastAPI que debe ejecutar, asumiendo que es un objeto llamado `app` en un archivo `main.py` (o un par de variantes más). Pero puedes configurar explícitamente la app a usar. ## Configura el `entrypoint` de la app en `pyproject.toml` { #configure-the-app-entrypoint-in-pyproject-toml } Puedes configurar dónde está tu app en un archivo `pyproject.toml` así: ```toml [tool.fastapi] entrypoint = "main:app" ``` Ese `entrypoint` le dirá al comando `fastapi` que debe importar la app así: ```python from main import app ``` Si tu código estuviera estructurado así: ``` . ├── backend │   ├── main.py │   ├── __init__.py ``` Entonces establecerías el `entrypoint` como: ```toml [tool.fastapi] entrypoint = "backend.main:app" ``` lo cual sería equivalente a: ```python from backend.main import app ``` ### `fastapi dev` con path o con la opción CLI `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option } También puedes pasar el path del archivo al comando `fastapi dev`, y adivinará el objeto app de FastAPI a usar: ```console $ fastapi dev main.py ``` O también puedes pasar la opción `--entrypoint` al comando `fastapi dev`: ```console $ fastapi dev --entrypoint main:app ``` Pero tendrías que recordar pasar el path\entrypoint correcto cada vez que llames al comando `fastapi`. Adicionalmente, otras herramientas podrían no ser capaces de encontrarla, por ejemplo la [Extensión de VS Code](editor-support.md) o [FastAPI Cloud](https://fastapicloud.com), así que se recomienda usar el `entrypoint` en `pyproject.toml`. ## `fastapi dev` { #fastapi-dev } Ejecutar `fastapi dev` inicia el modo de desarrollo. Por defecto, **auto-reload** está habilitado, recargando automáticamente el servidor cuando realizas cambios en tu código. Esto consume muchos recursos y podría ser menos estable que cuando está deshabilitado. Deberías usarlo solo para desarrollo. También escucha en la dirección IP `127.0.0.1`, que es la IP para que tu máquina se comunique solo consigo misma (`localhost`). ## `fastapi run` { #fastapi-run } Ejecutar `fastapi run` inicia FastAPI en modo de producción. Por defecto, **auto-reload** está deshabilitado. También escucha en la dirección IP `0.0.0.0`, lo que significa todas las direcciones IP disponibles, de esta manera será accesible públicamente por cualquiera que pueda comunicarse con la máquina. Esta es la manera en la que normalmente lo ejecutarías en producción, por ejemplo, en un contenedor. En la mayoría de los casos tendrías (y deberías) tener un "proxy de terminación" manejando HTTPS por ti, esto dependerá de cómo despliegues tu aplicación, tu proveedor podría hacer esto por ti, o podrías necesitar configurarlo tú mismo. /// tip | Consejo Puedes aprender más al respecto en la [documentación de despliegue](deployment/index.md). ///