首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pylint和PyModule生成PyO3和maturin

使用Pylint和PyModule生成PyO3和maturin
EN

Stack Overflow用户
提问于 2022-09-27 01:31:42
回答 2查看 67关注 0票数 0

Pylint不会识别我使用PyO3maturin创建的PyModule中的任何函数。所有函数在python代码库中导入和运行都很好,但出于某种原因,Pylint正在抛出E1011: no-member警告。

下面是一个(可能)不完整的虚拟示例,但提供的目的是展示我使用pymodulepyfunction进行装饰的方式。

代码语言:javascript
复制
#[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环境中并导入到脚本中:

代码语言:javascript
复制
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很好地处理了该项目,并认识到这些方法确实存在?

EN

回答 2

Stack Overflow用户

发布于 2022-09-27 08:08:39

Pylint 设置,您可以使用它来检查非python模块。不过,它需要将扩展加载到pylint的解释器中,这就是为什么默认情况下不启用扩展。

还有支持(和lint) pyi的请求,但是还不支持AFAIK,比如#2873#4987

在Pylint2.8之前,设置为extension-pkg-whitelist

票数 1
EN

Stack Overflow用户

发布于 2022-09-29 14:01:01

类似于@Masklinn的回答,只是看起来“extension whitelist”一词在较早的版本中存在,而后来的“extension允许列表”则不存在(尽管它是出于明显的社会原因而引入的)。

将以下内容添加到[MASTER]部分的.pylintrc

代码语言:javascript
复制
[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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73861487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档