2012-10-08 85 views
6

我在Eclipse/PyDev中遇到了以下問題,我的Python/Celery項目。 我定義我的任務功能myapp.tasks模塊是這樣的:PyDev不識別Celery任務裝飾器

@celery.task(max_retries=None) 
def mytask(parm1): 
    ... 
    myapp.myfunction(parm1) 
    ... 

然後,在另一個模塊我想重試信號發送到調用了功能的任務。所以,我這樣做:

import myapp.tasks 
... 
def myfunction(parm1): 
    ... 
    raise myapp.tasks.mytask.retry(countdown=60) 

由於某種原因的PyDev標誌着一個錯誤說法的最後一行:「從進口未定義的變量:重試」 但代碼實際工作。 這是一個無法識別裝飾器的PyDev問題,還是我在這裏做錯了什麼?

+0

您是否在設置pydev項目(或更精確的說,您的python解釋器)之後安裝了芹菜? – RickyA

+1

與「.delay()」相同的問題。你有沒有修復? –

回答

0

Pydev顯然是使用靜態分析,這對動態語言來說很奇怪。但我現在已經添加了一個黑客應該讓PyDev成功地靜態分析芹菜模塊。您可以通過安裝3.0分支來嘗試:

pip install https://github.com/celery/celery/zipball/3.0 
+5

我正在運行芹菜3.0.12,我仍然在pydev中得到這個錯誤 –

0

PyDev使用靜態分析。您可以添加「強制內置」來解決錯誤標記。

  1. 轉到窗口 - >首選項
  2. 選擇的PyDev - >口譯 - > Python解釋在左窗格中
  3. 選擇您要在右窗格中
  4. 使用芹菜在Python解釋器底部,選擇「強制Bultins」,然後單擊「新建...」
  5. 添加myapp.tasks.mytask或任何其他類型的需要

就我而言,我需要廣告d「celery.decorators」來解決類似的錯誤。我使用Eclipse Neon(4.6.3),但界面變化很小。我已經使用這種技術來解決Protocol Buffers中的錯誤好幾年了。