20

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

/builder
    __init__.py
    entity.py
    product.py

在产品中,我像这样导入实体:

from entity import Entity

但皮林特感叹:

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

但是from builder.entity import Entity不识别包,from ..builder.entity import Entity也不起作用。皮林特在抱怨什么?谢谢

4

4 回答 4

19

Python 2.5 introduces relative imports. They allow you to do

from .entity import Entity
于 2012-05-04T07:55:26.147 回答
9

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

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

然后,如果“from builder.entity import Entity”不起作用,则它是 PYTHONPATH pb:确保包含“builder”目录的目录位于您的 PYTHONPATH 中(gurney alex 提出的替代 pb)。除非您不打算编写包,否则删除 __init__.py 可能是要走的路。

于 2012-05-09T10:57:15.427 回答
0

如果您在 product.py 的顶部包含以下几行,您会得到什么:

import builder
print builder

我的猜测是您正在builder从 PYTHONPATH 中的某个位置导入不同的模块/包,该位置在您使用之前。

于 2012-05-04T15:40:16.417 回答
-1

如果您有更新的 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
于 2012-05-04T07:57:03.730 回答