2012-08-31 32 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