为什么pylint无法找到此软件包的模块?

时间:2017-03-28 13:00:36

标签: python pylint

我目前正在使用pylint,当我抓住单个文件时,我收到了一个错误(下面的repro)。我使用的是azure sdk,但这只是我引用的软件包,在这里不应该是重要的。

摄制

$ mkdir pylinttesting && cd pylinttesting
$ python3 -m venv venv
$ . venv/bin/activate
$ pip3 install azure==2.0.0rc6
$ echo 'from azure import mgmt' > app.py

运行此脚本文件不会导致任何问题(python3 app.py

pylint输出

即使这完全有效并且运行/导入没有错误,pylint仍然抱怨它。下面的相关输出(为简洁而减少)......

E:  1, 0: No name 'mgmt' in module 'azure' (no-name-in-module)

External dependencies
---------------------
::

    azure (app)

但是!如果我运行这个小片段(在相同的虚拟环境中)......

import os
import pkgutil
import azure

package_path = os.path.dirname(azure.__file__)
[print(name) for _, name, _ in pkgutil.iter_modules([package_path])]

...我得到以下输出......

batch
common
mgmt
servicebus
servicemanagement
storage

很明显,mgmt模块位于azure包中。但是我想知道为什么pylint没有选择那个?

还值得注意的是,如果我from azure import common(常见的是包中的另一个模块),pylint不会抛出错误。

关于为什么pylint可能对包中的这个mgmt模块不满意的任何想法?

编辑:pylint版本信息......

pylint 1.6.5, 
astroid 1.4.9
Python 3.6.0 (default, Dec 24 2016, 00:01:50) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]

1 个答案:

答案 0 :(得分:2)

您正在使用尚未支持declare_namespace for creating namespaces的Pylint版本。您使用的pylint / astroid的版本是什么?

有关类似问题,请参阅https://github.com/PyCQA/pylint/issues/687,并链接到支持此命名空间创建的代码。

请记住,Pylint实际上并不在分析期间运行Python代码,因此必须通过编写自定义代码来支持大多数非标准(不可推断)构造。