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

资讯详情

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

FastAPI 虚拟环境实践指南:用 uv 自动创建 .venv、安装依赖并运行 fastapi dev

FastAPI 虚拟环境实践指南:用 uv 自动创建 .venv、安装依赖并运行 fastapi dev FastAPI 虚拟环境实践指南用 uv 自动创建 .venv、安装依赖并运行 fastapi dev【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi本指南以 FastAPI 官方文档中的 Virtual Environments 章节印地语版见 docs/hi/docs/virtual-environments.md英文原版见 docs/en/docs/virtual-environments.md为骨架讲解 FastAPI 项目应当如何隔离 Python 依赖以及官方推荐的uv一站式工作流从uv init创建项目、uv add自动建立虚拟环境到uv run fastapi dev启动开发服务器。读完本文你将能独立搭建一个依赖完全隔离、可复现安装的 FastAPI 项目环境并理解背后pyproject.toml、uv.lock与fastapi命令的协作原理。为什么每个 FastAPI 项目都需要独立的虚拟环境当你在多个 Python 项目之间切换时很容易出现这样的冲突项目 A 依赖pydantic2.x而项目 B 仍在使用 1.x项目 A 需要新版本starlette升级却可能破坏项目 B 的运行。若所有包都全局安装它们会互相覆盖、彼此污染。因此官方文档给出明确建议在 Python 项目上工作时应当为每一个项目使用独立的虚拟环境virtual environment把该项目安装的第三方包与系统全局 Python 环境隔离。对 FastAPI 项目而言这点尤其重要——FastAPI 自身只声明少量核心运行依赖见 pyproject.toml 中的starlette、pydantic、typing-extensions、typing-inspection、annotated-doc而真实应用往往还会叠加模板引擎、数据库驱动、测试客户端等众多包若不做隔离版本维护很快就会失控。uv把项目、依赖与虚拟环境统一管理FastAPI 官方在虚拟环境文档中明确推荐使用 [uv]uv项目管理工具来同时管理project项目、dependencies依赖与virtual environment虚拟环境。uv与传统工作流的关键差异在于传统做法需要你先python -m venv .venv手工创建环境、再source .venv/bin/activate激活环境、然后才pip install ...而uv把这三步合并进了普通的项目命令里——环境在添加依赖的那一刻被自动创建之后所有命令都经由uv run自动进入该环境执行无需任何手工激活步骤。当前仓库本身就是 uv 工作流的一个实证仓库根目录保存着由uv生成的 uv.lock 锁文件配合 pyproject.toml 中的依赖声明让协作与部署时能精确复现同一套依赖环境。三行命令从零创建一个 FastAPI 项目先通过 uv 官方渠道完成uv工具的安装然后按照文档给出的标准流程创建项目对应英文原版文档 Create a Project 一节$ uv init awesome-project --bare $ cd awesome-project $ uv add fastapi[standard]逐条说明每个命令的作用细节参见 docs/en/docs/tutorial/index.md 的 Install FastAPI 章节命令作用uv init awesome-project在名为awesome-project的新目录中创建一个新的 Python 项目骨架--bare只生成最小化的pyproject.toml项目声明文件不生成样例main.py、README.md等文件应用代码由你自己在后面编写cd awesome-project进入新项目目录后续命令都在该项目内执行uv add fastapi[standard]解析并安装 FastAPI 及其全部依赖同时把它写入项目的依赖声明执行uv add时uv会自动完成以下工作自动创建虚拟环境在项目内生成.venv目录——这正是官方文档强调的你不需要自己创建或激活虚拟环境把fastapi[standard]写入 pyproject.toml 的依赖声明使依赖可被团队与 CI 复现生成/更新 uv.lock 锁文件记录所有包被解析出的精确版本自动选择 Python 版本优先使用系统已安装且兼容的 Python 解释器若没有合适的版本uv会自动下载一个无需你手工管理解释器。所谓locking锁定依赖是指uv.lock中保存了每个包及其传递依赖的精确版本保证换一台电脑或部署到生产环境时uv sync能装回完全一致的版本组合。fastapi[standard] 到底为你预装了哪些东西对新手而言fastapi[standard]中的[standard]是一个很容易被忽略但非常关键的 extra可选依赖集。打开本仓库的 pyproject.toml可以看到[project.optional-dependencies].standard的真实定义它一次性带来了依赖用途fastapi-cli[standard]提供fastapi dev/fastapi run命令行工具uvicorn[standard]带 uvloop 等加速组件的 ASGI 服务器用于真正跑起应用httpx提供 FastAPI 测试客户端TestClient所需的 HTTP 能力jinja2HTML 模板渲染支持python-multipart表单Form与文件上传File解析支持email-validatorPydantic 模型中邮箱字段的格式校验pydantic-settings基于 Pydantic 的应用配置管理pydantic-extra-types额外的 Pydantic 数据类型如PhoneNumber等fastarFastAPI 文档体系中使用的辅助依赖安装时可按需在三个选项间选择uv add fastapi[standard]官方推荐自带开发与常用生产依赖让大部分功能开箱即用uv add fastapi最小安装只装 FastAPI 核心本身不含 CLI、模板、表单等uv add fastapi[standard-no-fastapi-cloud-cli]安装 standard 依赖但不引入与fastapi-cli[standard]一同捆绑的fastapi-cloud-cli。如果你在后续开发中用到模板、文件上传、TestClient等功能却发现报缺少依赖通常就是因为当初选择了最小安装。从源码看为什么 fastapi dev 必须搭配 [standard]uv run fastapi dev里的fastapi命令并非 FastAPI 包自身的核心代码而是由 CLI 前端提供的。仓库 pyproject.toml 声明了命令入口[project.scripts] fastapi fastapi.cli:main再看 fastapi/cli.py 的实现main()会尝试从fastapi_cli即fastapi-cli包导入真正的cli_main一旦找不到说明没安装[standard]它会直接打印提示并报错To use the fastapi command, please install fastapi[standard]: pip install fastapi[standard]这就是为什么官方把安装命令固定为uv add fastapi[standard]——只有在[standard]这个 extra 里才捆绑了fastapi-clifastapi dev/fastapi run命令才能可用。在项目环境内运行命令uv run fastapi dev环境建好后需要在项目虚拟环境中执行的命令一律通过uv run前缀发起。官方文档给出的示例是$ uv run fastapi devuv run会自动把当前项目.venv里的可执行目录置于命令查找路径中因此上一条命令等价于在刚创建的项目环境里启动 FastAPI 开发服务器而不需要先执行任何 activate 操作。开发模式下fastapi dev会启动带自动热重载的服务器默认监听http://127.0.0.1:8000并自动加载模块中的 FastAPI 应用对象以main.py中名为app的实例为例当代码改动时会自动重载控制台会给出INFO: Started reloader process ...之类的日志完整启动输出示例可参考 docs/en/docs/tutorial/index.md。若用于生产环境则改用不带热重载的fastapi run。更进一步uv run适用于项目内的任意命令——例如运行测试uv run pytest、执行脚本uv run python main.py。新开一个终端窗口后同样只需带上uv run前缀uv会自动定位项目及其虚拟环境无需记忆 activate 状态。可选python -m venv pip 的传统工作流在深入了解虚拟环境底层机制之前不妨先了解 uv 帮你省去了哪些手工步骤。传统流程大致是$ python -m venv .venv # 创建虚拟环境 $ source .venv/bin/activate # 激活环境Windows 为 .venv\Scripts\activate $ pip install fastapi[standard] # 安装依赖虚拟环境的底层原理venv为项目建立一份独立的 Python 目录树包含自己的解释器路径与包安装目录site-packages激活本质上是把该环境的可执行目录如.venv/bin放到命令查找路径的最前面使终端中的python、pip与安装到环境内的命令都解析到这个隔离副本。官方文档的 Learn More 一节也推荐进一步了解虚拟环境内部机制、activate 的具体行为以及这套python -m venvpip的备选流程该备选安装命令同样出现在 docs/en/docs/tutorial/index.md 的 Usingpipinstead 说明中。对比之下uv工作流的优势在于无需手工管理 activate 状态环境随依赖一起被声明和锁进 uv.lock新成员或新机器上一条uv sync即可复现整个开发环境。延伸阅读与仓库对照围绕本文主题可以继续在仓库中对照以下内容本文档的英文原版与印地语版docs/en/docs/virtual-environments.md、docs/hi/docs/virtual-environments.mdFastAPI 教程总览中的安装与环境章节docs/en/docs/tutorial/index.md依赖与 optional-dependencies 的实际定义pyproject.tomluv生成的锁文件样例uv.lockfastapi命令入口的真实实现fastapi/cli.py。至此一个项目独立、依赖锁定、无需手工激活的 FastAPI 开发环境已经完整搭建起来你可以放心地为不同项目安装互不干扰的不同版本的 FastAPI 及其生态包了。【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表