2016-05-21 92 views
7

無法從六個導入任何東西。這兩個行的產生錯誤:無法從Python導入六個庫

from six.moves.urllib.request import urlretrieve 

- >Unresolved reference "urlretrieve"

from six.moves import cPickle as pickle 

- >Unresolved reference "cPickle"

OSX 10.11.5。 IntelliJ 2016.1.2,PyCharm 2016.1.3,Python 2.7.11,Six 1.10.0。

我做什麼來嘗試解決(每PyCharm shows unresolved references error for valid code和其他職位):

  • 交換Python解釋
  • 的IntelliJ:刪除文件的想法
  • IDE - >的Invalidate緩存/重新啓動
  • 用相同的源創建一個全新的項目
  • SWitched IDE(IntelliJ - > PyCharm)
  • 已驗證六等於電流:

_

$ sudo pip install -U six 
Requirement already up-to-date: six in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six-1.10.0-py2.7.egg 

Python的軟件開發工具包我想:

Python 2.7.11 (/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7) 
Python 3.5.1 (/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5) 
Python 2.7.10 (/usr/local/bin/python2.7) 

毫無效果。歡迎來幫忙!謝謝。

---------- Update 23 2016 -------------------------------

從命令行運行「from six.moves ...」導入行不會產生錯誤。命令行調用Python 2.7.11。 PyCharm也使用Python 2.7.11,而PyCharm也顯示有六個可用 - 請參閱第一個屏幕截圖。該項目中沒有.pyc文件,只是main.py。 enter image description here 奇怪的是,main.py在PyCharm中運行時沒有錯誤; 「Hello」行會打印(請參閱第二個屏幕快照)。 File runs OK 此屏幕快照顯示了設置中的項目解釋器: enter image description here 我仍然難倒了。

---------- Update 2016年5月24日-----------------------------

import six在代碼和python shell中以及執行後無錯誤地工作,六次。 檔案 = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six-1.10.0-py2.7.egg/six.pyc。 但是,PyCharm IDE仍顯示six.moves導入行中的錯誤。

+0

您正在嘗試加載和運行的代碼中顯示的行是?你有沒有試過將這些行輸入到python shell中? –

+0

是的,上面的導入行代碼是我想要運行的代碼。我甚至還沒有輸入操作代碼,我只是試圖讓所有的輸入工作都開始。此代碼來自Google Tensorflow教程。當我將這些行輸入到python shell中時,我沒有收到任何錯誤,所以也許這些只是警告,我可以忽略Burhan在下面提出的建議? –

+0

所以,Burhan告訴你的是,你需要運行知道約6個的Python解釋器才能導入它。顯然,這是你從命令行啓動一個shell時得到的那個。你需要弄清楚如何使PyCharm或IntelliJ或任何你想使用的工具運行知道約6的解釋器導入工作。如果他提到的是緩存問題,那麼錯誤應該隨着緩存重建而消失。嘗試刪除名爲* .pyc的文件和名爲__pycache__的目錄,看看是否有幫助。 –

回答

1

這個問題似乎回答this one(我不知道如何將這個標記爲重複)。

因此,不幸的是,沒有容易解決方案,因爲「六」模塊的動態性質,除非你爲這個模塊(這不是什麼straithforward)實現自己的python骨架。

1

six僅安裝在/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7,所以如果你使用這個解釋在PyCharm /的IntelliJ

注意它只會工作,如果你創建一個新的虛擬環境中,你必須在它單獨安裝six。如果PyCharm/IntelliJ給你這些警告,但代碼實際運行 - 那麼這只是PyCharm的一個緩存問題,你可以放心地忽略它 - 下一次緩存重建的機會PyCharm將更新它的緩存。

0

您可以使用導入六而不是從six.moves導入cPickle,然後使用six.moves.cPickle。

它適用於我。