不幸的是,我必须在需要使用py.xml
的项目中使用pipenv
(不是我的决定)和Python 3(同样,不是我的决定)包裹。并且还需要通过pylint
验证。
该项目中的一个文件包含以下内容:
from py.xml import html
即使py
安装在虚拟环境中,pylint
也找不到它,而它...可以找到它。这看起来更像是 pylint
的问题,但也许不是。我不知道如何调试这个困惑。下面是pylint
人格 split 的证明:
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)
不确定我是否会因为上面一行中的讽刺而获得任何额外的业力点,但如果您对虚拟化概念不熟悉,我可能会在这里做一些说明:
<小时/>It makes no sense to specify PYTHONPATH when running a program which is supposed to set up your virtual environment, yet, for all the loads of nonsense code it contains, the only thing it was supposed to do, it doesn't. Doesn't even try, actually.
哦,如果您认为 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)
最佳答案
从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 合规性,那么您需要同意可以忽略这些导入的警告。
关于python - 模块 'xml' 中无名称 'py',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250376/