发布问题后不久,我找到了答案。实际上,更改是出于安全措施的目的。Pylint导入模块以有效地识别有效的方法和属性。决定导入不属于python stdlib的c扩展会带来安全风险,并且可能会引入恶意代码。
这是在Astroid 1.3.1版本 https://mail.python.org/pipermail/code- quality/2014-November/000394.html中完成的
只有来自受信任来源(标准库)的C扩展被加载到正在检查的Python流程中,才能根据实时模块??构建AST。
如果要在导入非stdlib c扩展名的项目上使用pylint,则有四种解决方案。
1)使用--unsafe-load-any- extension=y
命令行选项禁用安全性。该功能未记录,被归类为隐藏选项(https://mail.python.org/pipermail/code- quality/2014-November/000439.html)。
2)使用pylint.rc
设置禁用安全性unsafe-load-any- extensions=yes
。建议在选项1上使用它,并在默认的pylint.rc文件(使用创建--generate-rcfile
)中包含完整的文档。
3)pylint.rc
使用extension-pkg-whitelist=
选项在文件中具体列出您相信由pylint加载的程序包或模块名称。
4)创建一个插件来操纵AST(我不知道如何实现此功能-但在pylint邮件列表中定期进行讨论)。
我们选择了选项3。我们在项目pylint.rc
文件中添加了以下行:
extension-pkg-whitelist=lxml