上下文
我们开发了一个Python库,其中包含一个期望类似num-参数的函数.我们在签名中指定这一点并使用Python类型提示:
def cool(value: float | int | List[float | int])
🏳 Problem & Goal
在运行时期间,我们注意到也可以传递numpy数字类型,例如np.float16(1.2345)
.所以我们想:为什么不将"麻木的数字类型"纳入我们的签名中,因为这对使用我们库的社区有利.
然而,我们不希望numpy
作为我们的项目的依赖项.我们只想在方法签名中表明我们可以采用float
、int
、它们的列表或任何"numpy数字类型".如果用户尚未在其系统上安装numpy
,则他们应该仍然能够使用我们的库,而忽略他们可能也传递"numpy number类型".
我们不想依赖numpy
,因为我们不在我们的库中使用它(除了在我们的方法签名中允许它们的类型).那么为什么将其包含在我们的依赖图中呢?没有理由这样做.少一个依赖越好.
额外要求/背景
- 我们搜索与所有Python
>=3.8
版本兼容的答案. - (答案应该适用于
setuptools>=69.0
.) - 答案应该是这样的:当我们在IDE(例如VSCode)中输入
cool(
时,我们会获得正确的Intelligence Sense(Ctrl + Space
). -
This就是我们的
pyproject.toml
的样子.
努力
- 我们注意到
pyproject.toml
文件的选项[project.optional-dependencies]
,请参阅here.然而,目前尚不清楚这个可选的依赖项声明如何帮助我们在方法签名中提供可选的numpy
个数据队列. -
numpy
提供numpy.typing
类型注释.是否有可能只依赖这个子包? - 我们确实在搜索引擎上搜索并找到了this SO question,但我们的问题更具体地涉及如何只能使用另一个模块中的types.我们还找到了this SO question,但尽管标题中有"可选",但它并不是关于optional种麻木类型的.