十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FastAPI CLI 实战指南:用 `fastapi dev` 与 `fastapi run` 完成开发到生产部署

FastAPI CLI 实战指南:用 `fastapi dev` 与 `fastapi run` 完成开发到生产部署 FastAPI CLI 实战指南用fastapi dev与fastapi run完成开发到生产部署【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapiFastAPI CLI是随 FastAPI 一起安装的命令行程序用于启动serveFastAPI 应用、管理 FastAPI 项目以及执行更多日常操作。本篇基于 FastAPI 官方 CLI 文档仓库内 Hindi 翻译版本与其 英文原版 内容一致并结合当前仓库源码与测试系统讲解安装后如何使用fastapi dev进入开发模式、如何通过pyproject.toml、文件路径或--entrypoint显式指定应用入口以及如何使用fastapi run运行生产服务、理解FASTAPI_ENV环境变量与监听地址等底层行为。读完你将在本地开发与生产部署两条路径上都能熟练、正确地驾驭 FastAPI CLI。一、FastAPI CLI 是什么随安装而来的一体化命令行当你在项目中添加 FastAPI 时例如执行uv add fastapi[standard]系统会同时为你装好一个可在终端直接运行的命令行程序。从仓库的 pyproject.toml 可以看到这一点——standard可选依赖组中包含standard [ fastapi-cli[standard] 0.0.32, # ... uvicorn[standard] 0.12.0, # ... ]即在 FastAPI 项目的打包配置中CLI 本体fastapi-cli与 ASGI 服务器 Uvicorn含 uvloop 等标准加速组件是作为standard组的一等依赖被引入的。与此同时pyproject.toml 通过入口脚本把fastapi命令注册到了fastapi.cli:main[project.scripts] fastapi fastapi.cli:main从仓库源码看fastapi/cli.py 本身只是一个很薄的入口包装它尝试从独立的fastapi_cli包导入真正的main实现如果用户只装了核心的fastapi而没有装standard可选依赖则会打印并抛出明确提示To use the fastapi command, please install fastapi[standard]: pip install fastapi[standard]这一点在仓库测试 tests/test_fastapi_cli.py 中被直接验证当把fastapi.cli.cli_main置为None时调用fastapi.cli.main()会抛出包含上述提示文案的RuntimeError。提示如果你希望保留手动安装的灵活性可改为uv add fastapi[standard]一步到位这也是官方安装教程的推荐做法项目同时也提供了不含 FastAPI Cloud CLI 的变体standard-no-fastapi-cloud-cli供不需要云端命令的用户使用。二、开发模式起步运行fastapi dev要进入开发模式在终端执行fastapi dev即可。在真实环境仓库目录下运行fastapi dev中你会看到类似下面的启动日志$ 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 CTRLC to quit) INFO Started reloader process [383138] using WatchFiles INFO Started server process [383153] INFO Waiting for application startup. INFO Application startup complete.这段输出非常关键它揭示了三件事CLI 内部驱动的是 Uvicorn日志中的Uvicorn running on ...、reloader/server 进程号等均由 Uvicorn 输出。这正是上文 pyproject.toml 中uvicorn[standard]依赖的作用——FastAPI CLI 是建立在 Uvicorn 这个高性能、生产可用的 ASGI 服务器之上的。默认入口约定fastapi命令会尝试自动探测要运行的应用默认假设它是main.py文件中的app对象也兼容若干其他常见变体并给出Using import string: main:app的提示。开发模式的默认网络行为服务监听在http://127.0.0.1:8000交互式 API 文档位于/docs。三、显式配置应用入口entrypoint自动探测虽方便但当你的应用不在默认位置时就需要显式告诉 CLI 去哪里找。官方文档给出了三种方式推荐优先使用pyproject.toml方式。3.1 方式一在pyproject.toml中声明推荐在项目根目录的pyproject.toml中添加[tool.fastapi]小节[tool.fastapi] entrypoint main:app上面的entrypoint等价于告诉fastapi命令这样导入应用from main import app如果你的代码是分目录组织的例如. ├── backend │ ├── main.py │ ├── __init__.py那么entrypoint就应写为模块化的点分路径[tool.fastapi] entrypoint backend.main:app等价于from backend.main import app3.2 方式二把文件路径传给fastapi dev你可以在调用命令时直接传入文件路径CLI 会据此推断要使用的 FastAPI 应用对象$ uv run fastapi dev main.py3.3 方式三使用--entrypointCLI 选项也可以把入口以模块:对象的形式显式传给fastapi dev$ uv run fastapi dev --entrypoint main:app为什么推荐写到pyproject.toml里每次手动调用fastapi命令时都记得传入正确的路径 / entrypoint 是一种负担而且其他工具不一定能像 CLI 一样“猜”出你的入口。例如 VS Code 的 FastAPI 扩展就依赖[tool.fastapi]中的声明来定位应用参考 editor-support.mdFastAPI Cloud 等平台工具同样如此。因此把entrypoint固化在 pyproject.toml 中既能省去重复输入也能让生态工具与 CLI 行为保持一致。四、fastapi dev面向开发的命令语义运行fastapi dev即启动development mode其语义要点如下特性fastapi dev的默认行为auto-reload默认开启代码变更时自动重启服务器依赖 WatchFiles监听地址127.0.0.1仅本机回环地址即localhostFASTAPI_ENV在导入应用前被设为development若已设置则保留原值适用场景仅限本地开发4.1 auto-reload 的取舍自动重载能让你在修改代码后无需手动重启即可看到效果但它资源占用更高且相比关闭重载时稳定性可能更差——因此官方明确建议只在开发环境中使用而不要把它带到生产环境。4.2FASTAPI_ENV环境变量的注入时机与规则在导入你的应用之前fastapi dev会把FASTAPI_ENV环境变量设置为development。需要注意两条精确规则若FASTAPI_ENV此前已经被设置则保留其现有值不会被覆盖。这允许你的应用启动代码依据环境选择“开发友好”的行为同时仍可自定义诸如staging之类的应用专属环境值。约定的常规取值是development与production而fastapi run目前保持FASTAPI_ENV不变——如果应用需要检测生产模式请在生产环境中显式地设置该变量不要依赖 CLI 替你完成。应用侧可以据此在启动阶段读取该变量决定是否开启调试中间件、更详尽的日志等开发辅助设施。五、fastapi run生产模式的正确姿势执行fastapi run会让 FastAPI 以production mode启动。与fastapi dev正好相反它的默认行为是特性fastapi run的默认行为auto-reload默认关闭生产环境不需要、也不应该热重载监听地址0.0.0.0机器上所有可用 IP 地址FASTAPI_ENV保持现状不变不替你设置5.1 为什么生产要监听0.0.0.0监听0.0.0.0意味着任何能够与该机器通信的主机都可以访问你的服务——这正是生产环境尤其是容器内运行的常态容器需要把端口暴露给宿主机/编排平台/负载均衡器。注意这与开发模式的127.0.0.1仅本机可访问形成鲜明对照二者面向的安全边界完全不同。5.2 HTTPS交给上层的“终止代理”绝大多数生产部署中你应该而且通常会在 FastAPI 之上再架设一层termination proxy终止代理负责 HTTPS。至于由谁来充当这一层取决于你的部署方式云平台/提供商可能已替你内置如托管负载均衡自建环境则可能需要你自己配置 Nginx、Caddy 等反向代理来完成 TLS 终止与流量转发。关于各类部署拓扑、反向代理与 HTTPS 的完整讨论可继续阅读 deployment 部署文档。六、仓库内的实现与验证依据为了让上面的结论可回溯、可验证以下是本文引用结论在仓库中的出处CLI 入口包装与未安装提示fastapi/cli.py——from fastapi_cli.cli import main as cli_main缺失时抛出“请安装 fastapi[standard]”的运行时错误。命令注册pyproject.toml 中的fastapi fastapi.cli:main。依赖构成pyproject.toml 的standard/standard-no-fastapi-cloud-cli可选依赖组同时引入fastapi-cli与uvicorn[standard]。CLI 行为测试tests/test_fastapi_cli.py——覆盖了“不存在的文件路径报错并返回码为 1”Path does not exist non_existent_file.py以及“未安装 CLI 时的提示信息”两条关键行为。开发/生产入口约定的一致性main.py中的app对象这一默认约定同时贯穿于 tutorial/first-steps.md 等入门教程的应用写法。七、小结两条命令的选用心法用一张对照表收束全文核心结论维度fastapi devfastapi run适用阶段本地开发生产/类生产如容器auto-reload开启关闭默认监听127.0.0.1仅本机0.0.0.0所有网卡公网可达FASTAPI_ENV注入development已存在则保留不修改需自行显式设置底层引擎UvicornASGIUvicornASGI入口确定自动探测 /pyproject.toml/ 路径 /--entrypoint与左侧保持一致一个健康的工程习惯是入口写在pyproject.toml的[tool.fastapi]中日常编码用fastapi dev热重载、仅本机监听部署上线用fastapi run并把 HTTPS 交给上层代理、把FASTAPI_ENVproduction交给部署平台或容器环境变量显式注入。这样开发与生产两套语义清晰分离团队内任何工具与成员对“应用从哪来、如何运行”的理解也都完全一致。【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表