2011-06-13 20 views
5

在我的劇本我用:pylint的不喜歡pkg_resources.resource_filename

python from pkg_resources import resource_filename

雙方的PyDev和pylint的0.23抱怨沒有得到解決進口這裏。

E0611 No name 'resource_filename' in module 'pkg_resources'

據我瞭解,出現這種情況是由於兩者的PyDev和pylint的僅執行源代碼分析,實際上並沒有試圖解析/編譯的事實。顯然pkg_resources做了一些特殊的事情來定義pkg_resources。包和符號當然就在那裏,整件事情都很好。兩個問題:

  • 我該如何說服Eclipse和PyDev他們錯了?
  • 首先導致問題的原因是什麼?我還沒有發現其他人有這種問題,我懷疑我的情況有點獨特... :)

Python 2.7.1(在OSX下),分佈0.6.19。

+0

你有沒有找到一種方法來訓練pydev,使代碼完成工作? – Epu 2015-06-18 21:04:31

回答

6

您可以通過修改項目的pydev python解釋器定義加載麻煩的動態模塊。 Configure the default list of 'forced built-ins'包含您使用的動態生成的定義。強制內置插件是通過脫殼和加載/檢查動態生成的類生成的。

在python解釋器定義(preferences => pydev => interpreters => python interpreter)中,爲您的pydev項目選擇當前使用的解釋器。選擇Forced Builtins選項卡。按New...按鈕,並將pkg_resources添加到列表中。

我已經這樣做了,現在我的錯誤消失了,並且方法的自動完成對我的項目工作正常。我使用python 2.7.9,pydev 3.3.3和eclipse kepler r2。

對於pylint,您可以爲disable the warning globally in your project's pylint config,對於整個文件或其使用的一個實例。您可以在文件開始處添加一條# pylint: disable=E1101評論,以便爲該模塊禁用該註釋,或者在您使用該註釋的上方的行中僅針對該實例禁用該評論。 manually hint to pylint that your class has specific methods還有一個可能很耗時的方法。

3

我有同樣的問題。對於Pydev,我在pydev.org上找到了answer:轉到錯誤行,點擊ctrl-1,然後選擇'undefined variable'。然後它會附加一條#@UndefinedVariable評論,並且錯誤消失。

對於pylint,禁用E1101的伎倆,雜注# pylint: disable=E1101。 Pylint編譯指令只需要在同一縮進級別進行,但pydev註釋必須位於同一行。我有點評論雜亂的功能變成:

def get_test_datafile(file_): 
    # pylint: disable=E1101 
    return pkg_resources.resource_string(__name__, #@UndefinedVariable 
             'testdata/'+file_) 
+6

實際上,對於未解析的導入,有更具體的'@ UnresolvedImport'抑制,對於pylint,則有E0611而不是E1101(http://www.logilab.org/card/pylintfeatures)形成: 'from pkg_resources import resource_filename#@ UnresolvedImport #pylint:disable = E0611' – Tim 2011-10-03 11:47:37

+0

抑制消息並不能解決像自動完成這樣的問題,這可以在重構或編碼時幫助解決。看到我的建議,修改pydev解釋器的'Forced Builtins'列表。 – Epu 2015-06-18 21:27:07

+1

Epu的答案在這裏更加正確...... – 2015-06-23 11:14:34