为什么 pylint 找不到这个包的模块?
Why is pylint unable to find this package's module(s)?
我目前正在使用 pylint,当我对单个文件进行 lint 时出现错误(下面的重现)。我正在使用 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 输出
即使这完全有效并且 runs/imports 没有错误,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
(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)]
您使用的 Pylint 版本(尚)不支持 declare_namespace
for creating namespaces。你用的pylint/astroid是什么版本?
有关类似问题,请参阅 https://github.com/PyCQA/pylint/issues/687,有关支持此命名空间创建的代码,请参阅 link。
请记住,Pylint 在分析过程中实际上不会 运行 Python 代码,因此大多数非标准(不可推断的)构造必须通过编写自定义代码来支持。
我目前正在使用 pylint,当我对单个文件进行 lint 时出现错误(下面的重现)。我正在使用 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 输出
即使这完全有效并且 runs/imports 没有错误,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
(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)]
您使用的 Pylint 版本(尚)不支持 declare_namespace
for creating namespaces。你用的pylint/astroid是什么版本?
有关类似问题,请参阅 https://github.com/PyCQA/pylint/issues/687,有关支持此命名空间创建的代码,请参阅 link。
请记住,Pylint 在分析过程中实际上不会 运行 Python 代码,因此大多数非标准(不可推断的)构造必须通过编写自定义代码来支持。