Pylint不会识别我使用PyO3和maturin创建的PyModule中的任何函数。所有函数在python代码库中导入和运行都很好,但出于某种原因,Pylint正在抛出E1011: no-member警告。
下面是一个(可能)不完整的虚拟示例,但提供的目的是展示我使用pymodule和pyfunction进行装饰的方式。
#[pyfunction]
fn add_nums(
_py: Python<'_>,
a: f32,
b: f32,
) -> PyResult<f32> {
let res:f32 = a+b;
Ok(res)
}
#[pymodule]
fn my_module(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(add_nums, m)?)?;
Ok(())
}然后,如果我使用maturin build --release构建该程序并从生成的module文件中安装模块,则将其导入到我的python环境中并导入到脚本中:
import my_module
my_module.add_nums(5, 6) # ignore that these are not f32 - irrelevant this is a dummy example如果我然后在该文件上运行pylint (从终端到VS代码pylint扩展名),我最终得到的结果是:E1101: Module 'my_module' has no 'add-nums' member (no-member),尽管代码(不是这段代码--但这里不能包含的真正代码)运行得很好。
是否有人成功地使用maturin构建了轮对文件,并在另一个项目中使用了它们,然后让Pylint很好地处理了该项目,并认识到这些方法确实存在?
发布于 2022-09-27 08:08:39
发布于 2022-09-29 14:01:01
类似于@Masklinn的回答,只是看起来“extension whitelist”一词在较早的版本中存在,而后来的“extension允许列表”则不存在(尽管它是出于明显的社会原因而引入的)。
将以下内容添加到[MASTER]部分的.pylintrc中
[MASTER]
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-allow-list=
my_module对于不支持此功能的版本(请更新此处更改的版本),请使用extension-pkg-whitelist。
https://stackoverflow.com/questions/73861487
复制相似问题