Pylint:相对导入应该是

时间:2012-05-04 07:13:33

标签: python pylint

我正在用Pylint检查模块。该项目具有以下结构:

/builder
    __init__.py
    entity.py
    product.py

在产品中我导入如下实体:

from entity import Entity

但是Pylint感叹道:

************* Module builder.product
W:  5,0: Relative import 'entity', should be 'builder.entity'

但是from builder.entity import Entity无法识别包,from ..builder.entity import Entity也无效。 Pylint在抱怨什么?感谢

4 个答案:

答案 0 :(得分:18)

Python 2.5引入了相对导入。他们允许你做

from .entity import Entity

答案 1 :(得分:8)

__init__.py文件使pylint认为您的代码是一个包(即“构建器”)。

因此,当pylint看到“来自实体导入实体”时,它会将其正确地检测为隐式 相对导入(您可以使用'。'进行显式相对导入,因为python 2.6,正如其他海报所宣传的那样)并报告它。

然后,如果“来自builder.entity导入实体”不起作用,则它是PYTHONPATH pb:确保包含“builder”目录的目录位于PYTHONPATH(另一个pb由gurney alex提出)。除非您不打算编写程序包,否则可能需要删除__init__.py。

答案 2 :(得分:0)

如果您有更新的Python版本,glglgl的答案是正确的。

但是,如果不这样做,则必须确保您要验证的包裹在PYTHONPATH。请参阅以下示例。

[sebastian ~/tmp/testpy]$ pylint -r n a.py 
************* Module a
C:  1: Missing docstring
F:  1: Unable to import 'testpy.b'
[sebastian ~/tmp/testpy]$ PYTHONPATH=".." pylint -r n a.py 
************* Module a
C:  1: Missing docstring

答案 3 :(得分:0)

如果在product.py:

的顶部包含以下行,您会得到什么?
import builder
print builder

我的猜测是你从你正在使用的PYTHONPATH中的某个地方导入了一个不同的模块/包builder