2012-08-31 40 views
8

我已經安裝了EPD 7.3.1(現在稱爲Enthought Canopy),它帶有scikit-learn v 0.11。我正在運行Ubuntu 12.04。我需要安裝v 0.12的scikit-learn。包含在Enthought Canopy分佈中的scikit-learn的升級版本

的scikit學習doc says克隆庫,添加scikit學習目錄到你的PYTHONPATH,並建立在地方的延伸:python setup.py build_ext --inplace

的問題是,EPD是它自己封閉的世界(與多張scikit迪爾斯):
./lib/python2.7/site-packages/scikits/
./lib/python2.7/site-packages/sklearn

然後還有:
./EGG-INFO/scikit_learn/

我真的不想嘗試,因爲花了很長時間才弄明白這一點。在這種情況下,我應該遵循scikit-learn的方向嗎?

回答

12

在scikit-learn網站上描述的操作與EPD中的scikit-learn版本無關。 Python會自動使用設置在PYTHONPATHenvironment variable中的scikit-learn版本,您應該將其設置爲scitit-learn的Git版本的目錄路徑。

如果一個類Unix系統上使用bash中,你應該做到以下幾點:

  • 執行行動install scikit-learn's latest code(在這個例子中我把它克隆到/home/yourname/bin/scikit-learn
  • 編輯.bashrc並添加行:export PYTHONPATH="/home/yourname/bin/scikit-learn";
  • 打開一個新的終端,並通過鍵入以交互模式啓動的Python python
    • 類型:import sklearn
    • 類型:sklearn.__verion__現在應該顯示'0.12-git'代替0.11

爲什麼這項工作? Python在內部使用變量sys.path(路徑的list)來跟蹤所有應該查找模塊和程序包的目錄。一旦請求了一個模塊或者包,Python將依次遍歷這個列表直到它找到一個匹配。因此,例如,模塊可以在sys.path中多次列出,但是僅使用列表中第一個出現的版本。

每個Python安裝都會在sys.path中列出自己的默認路徑集。延伸sys.path的一種方法是在PYTHONPATH中列出路徑。一旦Python啓動,它將讀取此環境變量並將其添加到sys.path列表的開頭。因此,如果您將另一個版本的scikit-learn的路徑添加到您的PYTHONPATH,那麼(EPD)Python將首先找到該版本的scikit-learn,並使用它來代替sys.path中進一步列出的版本。

要查看sys.path,只需import sys然後print sys.path。另外,例如,如果您只想在一個Python程序中使用0.12版的scikit-learn並使用0。11版默認在所有其他的Python程序,那麼你可以離開PYTHONPATH空,只能插入的路徑,在你的代碼的頂部手動scikit學習0.12:

import sys 
sys.path.insert(0, '/home/yourname/bin/scikit-learn') 
import sklearn 
+1

在堆棧溢出社區給downvotes壞的問題並提出很好的問題。我現在不會提出這個問題,但是如果人們開始冷靜下來,那麼你就有一個很好的跡象表明你可能想刪除它。 – Sicco

+0

我遇到了同樣的問題,但我有一臺Mac。我設法只通過macports安裝scikit(不使用scikits setup.py,總是以錯誤爲中心結束)。但是,我找不到bashrc。我想要做的就是將EPD(學術)中的Scikit更新爲.13,這非常困難,任何幫助都將不勝感激! – Shinjitsu

+0

@Shinjitsu嘗試使用.profile而不是.bashrc。讓我知道它是否有效。 – Sicco