2013-05-14 34 views
1

背景信息Python的循環導入 - 在本地而不是工作在服務器

  • 的Python 2.7.1(R271:86832)在服務器和本地
  • 使用的virtualenv具有所有依賴性相同
  • 地方Python是64位
  • 服務器Python是32位
  • 使用Django

實際的問題

我們打我們的服務器,任何測試過程中沒有抓住在一個圓形的進口問題。

做一個微不足道的循環導入示例顯示循環導入確實在本地出錯。

我們在每個文件的頂部插入一些打印件,因爲它們被導入。

本地行爲:

priority.__init__.py 
sync.tasks.keywords.py 
priority.reasons.py 
priority.__init__.py (<- circular import but it works??) 
priority.reasons.py 

Server行爲:

priority.__init__.py 
sync.tasks.keywords.py 
priority.__init__.py (<- circular import but it works??) 
Traceback (most recent call last): 
    ... 
    from sync.tasks.keywords import check_keywords 
    ImportError: cannot import name check_keywords 

我完全莫名其妙。代碼是完全一樣的。錯誤之前,進口鏈略有不同,我對此倍感困惑。

所以...從哪裏開始尋找的任何提示?

+1

嘗試使用'python -v'運行。請仔細檢查模塊是否從您認爲應該在的位置加載 – 2013-05-14 11:15:49

+1

沒有編譯過的* .pyc文件掛在導致不同導入順序的地方? – Evert 2013-05-14 11:43:26

+0

As @evert提到:刪除dev和服務器上的所有.pyc和.pyo。比較我有一段時間... – RickyA 2013-05-14 11:59:18

回答

0

我會建議通過移動您的類/函數(而不是文件的頂部)中的導入之一來打破循環導入。在我看來,這種方法沒有任何嚴重的缺點,並且節省了很多時間,對循環導入的調試非常麻煩。

相關問題