2012-05-04 34 views
13

我正在用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抱怨什麼?謝謝

回答

14

Python 2.5引入了相對導入。他們允許你做

from .entity import Entity 
+1

謝謝你-1,恕不另行通知。 – glglgl

+3

你是什麼意思「新足夠」? – PlasmaBinturong

+0

@PlasmaBinturong「new enough」是指在Python 2.5中引入相對導入。 – glglgl

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 
+0

我確實有__init__.py,感謝您指出它,我編輯了我的問題。 – pistacchio

0

您能得到什麼,如果你包括product.py頂部以下行:

import builder 
print builder 

我的猜測是,你是從什麼地方導入不同的模塊/包builder您PYTHONPATH在你使用的之前。

6

__init__.py文件讓pylint認爲你的代碼是一個包(即「builder」)。

因此,當pylint看到「來自實體導入實體」時,它將其正確檢測爲隱含的 相對導入(您可以在Python 2.6之後使用'。'進行顯式相對導入,正如其他海報所公佈的)並報告它。

然後,如果「from builder.entity import Entity」不起作用,那麼這是一個PYTHONPATH pb:確保包含「builder」目錄的目錄位於您的PYTHONPATH中(由gurney alex提出的替代pb)。除非你不打算編寫一個軟件包,否則刪除__init__.py可能是一條可行的路。

相關問題