模块'py'中没有名称'xml'

时间:2017-11-12 15:14:39

标签: python pylint

不幸的是,我必须在需要使用pipenv包的项目中使用py.xml(不是我的决定)和Python 3(再次,不是我的决定)。它还需要通过pylint验证。

此项目中的一个文件包含:

from py.xml import html

即使py安装在虚拟环境中,pylint找不到它,但它可以找到它。这似乎更像pylint的问题,但可能不是。我不知道如何调试这个烂摊子。以下是pylint分裂人格的证据:

PYTHONPATH=$(pwd) pipenv run pylint --init-hook 'from py.xml import html;print(type(html))' some_module
<class 'py._xmlgen.NamespaceMetaclass'>
************* Module some_module
E:  8, 0: No name 'xml' in module 'py' (no-name-in-module)
E:  8, 0: Unable to import 'py.xml' (import-error)

不确定我是否在上面的行中获得任何奖励业力点,但如果你对虚拟化的概念不熟悉,我可能会在这里做一点说明:

  

在运行应该设置虚拟环境的程序时指定PYTHONPATH是没有意义的,但是,对于它包含的所有无意义代码的负载,它应该做的唯一事情,它没有。实际上甚至没有尝试。

哦,如果您认为py可能已安装在其他地方,pylint无法访问......嗯,它不是:

PYTHONPATH=$(pwd) pipenv run pylint --init-hook 'from py.xml import html;import inspect;print(inspect.getfile(html))' automation
/home/wvxvw/.local/share/virtualenvs/some_module-UoeXL6dQ/lib/python3.5/site-packages/py/_xmlgen.py
************* Module automation.conftest
E:  8, 0: No name 'xml' in module 'py' (no-name-in-module)
E:  8, 0: Unable to import 'py.xml' (import-error)

1 个答案:

答案 0 :(得分:2)

要从source判断,py命名空间中的属性是动态创建的,这就是静态分析工具pylint无法识别它们的原因:

apipkg.initpkg(__name__, attr={'_apipkg': apipkg}, exportdefs={
    ...
    # small and mean xml/html generation
    'xml' : {
        '__doc__'            : '._xmlgen:__doc__',
        'html'               : '._xmlgen:html',
        'Tag'                : '._xmlgen:Tag',
        'raw'                : '._xmlgen:raw',
        'Namespace'          : '._xmlgen:Namespace',
        'escape'             : '._xmlgen:escape',
    },
})

如果您的项目需要使用pylint合规性,那么您需要同意可以忽略对这些导入的警告。