我正在用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在抱怨什么?感谢
答案 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
。