Pybind11 模块中的函数签名/接口(IDE 建议)

Function Signatures/Interfaces from Pybind11 Module (IDE Suggestions)

提问人:Phil-ZXX 提问时间:3/14/2022 更新时间:7/13/2022 访问量:705

问:

假设我们有一个简单的模块,称为使用 pybind11 构建:_sample

/* py_bindings.cpp */
#include <pybind11/pybind11.h>

namespace py = pybind11;

PYBIND11_MODULE(_sample, m) {
    m.def("add", [](int a, int b) { return a + b; });
    m.def("add", [](const std::string& lhs, const std::string& rhs) { return lhs + rhs; });
}

这将生成一个动态模块文件 (Windows) 或 (Linux),然后我们可以将其导入到实际模块中:_sample.pyd_sample.sosample

## sample\__init__.py ##
from ._sample import *

这样我们就可以写:

## script.py ##
import sample as s

print(s.add(4, 2))       # 6
print(s.add('AB', 'C'))  # ABC

上面的代码工作正常,但是在代码实际运行之前,IDE 不知道包含哪些函数。因此,根本没有函数建议(也没有函数签名建议)。_sample

enter image description here

由于我想帮助我的库的用户,我的问题是:如何在我的模块中包含函数建议(或“函数提示”)?

我尝试将以下代码包含在其中,因为我认为它们可以用作“提示”。但不幸的是,这覆盖了 中的原始函数。sample\__init__.py...add_sample

def add(arg0: int, arg1: int) -> int:
    ...

有没有办法将函数签名提示给 Python IDE

当然,我也想将其扩展到类、类函数和模块属性。我只是选择了函数作为起点。

python-3.x 类型提示 pybind11 python-3.10 函数签名

评论

0赞 unddoch 3/17/2022
这取决于您的 IDE,但也许可以尝试研究 github.com/sizmailov/pybind11-stubgen

答:

1赞 Erayo 7/13/2022 #1

我认为您要查找的是存根或接口(pyi)文件。IDE 可以从此文件中理解函数和类的签名。 如果您使用的是 pybind11,请查看 pybind11-stubgen 以自动生成存根文件。