pip install fastapi[standard] 中的 "[standard] " 是什么东西?
我们在python 中安装第三方包的时候经常使用 pip 安装 常见的命令有
| pip install requests
pip install httpx
|
但是你应该也见过下面这样的命令

这个是fastapi 官方文档首页提示的安装命令,你是否会好奇,这里为什么会有个 [standard]
? 它和直接安装 pip install fastapi
有什么区别?
类似的还有
| pip insall mcp[cli]
pip install crewai_tool[mcp]
|
使用 uv 也可以这样
| uv add mcp[cli]
uv add crewai_tool[mcp]
|
接下来让我们一起看一下这个中括号是什么东西。
python 可选依赖项
在 Python 的 pip
安装命令中,类似 fastapi[standard]
的语法表示安装 主包(fastapi)的同时,额外安装其 可选依赖项(standard
)。这是通过 Python 包的 extras_require
功能实现的。
这个也就是安装 fastapi 定义的依赖,如果你不需要那些依赖,则可以不安装,只安装了fastapi,正常的开发时没有问题的,但是如果你想用 fastapi run
命令启动服务,那么不好意思,你需要安装可选依赖 standard
。
一般而言,我们大多数情况下是只是使用pip 或者 uv 来安装第三方包,当然我们也可以开发并发布我们自己的包。
接下来一起看一下如何开发带有可选依赖的包。
在 uv 中配置可选依赖
目前很多流行的库已经切换到 uv 来管理项目了,这里先看一下如何在uv 中使用可选依赖。
| [project]
name = "your_package"
version = "0.1"
dependencies = [
"numpy>=1.0", # 核心依赖
]
[project.optional-dependencies]
mcp = ["pandas", "scikit-learn"] # 可选依赖组
extra_feature = ["requests"] # 另一个可选组
|
在 pyproject.toml 文件的 dependencies 字段,配置项目的核心依赖。
在 project.optional-dependencies
字段配置可选依赖。
让我们看一下python mcp官方的pyproject.toml
| [project]
name = "mcp"
dynamic = ["version"]
description = "Model Context Protocol SDK"
readme = "README.md"
requires-python = ">=3.10"
...
dependencies = [
"anyio>=4.5",
"httpx>=0.27",
"httpx-sse>=0.4",
"pydantic>=2.7.2,<3.0.0",
"starlette>=0.27",
"python-multipart>=0.0.9",
"sse-starlette>=1.6.1",
"pydantic-settings>=2.5.2",
"uvicorn>=0.23.1; sys_platform != 'emscripten'",
]
[project.optional-dependencies]
rich = ["rich>=13.9.4"]
cli = ["typer>=0.12.4", "python-dotenv>=1.0.0"]
ws = ["websockets>=15.0.1"]
...
|
如果我们使用 uv add mcp[cli]
安装mcp时,会额外安装 typer 和 python-dotenv 包。
传统的 setup.py 方式
传统的第三方库需要在 setup.py 中进行配置, 通过 extras_require 参数传递一个字典。
| from setuptools import setup
setup(
name="your_package",
version="0.1",
install_requires=[
# 核心依赖
"numpy>=1.0",
],
extras_require={
# 可选依赖组
"mcp": ["pandas", "scikit-learn"], # 安装时通过 [mcp] 触发
"extra_feature": ["requests"], # 另一个可选组
},
)
|
总结
本篇内容不多,介绍了什么是python 的可选依赖以及如何开发一个带有可选依赖的第三方库。