8

我安装了 EPD 7.3.1(现在称为 Enthought Canopy),它随 scikit-learn v 0.11 一起提供。我正在运行 Ubuntu 12.04。我需要安装 scikit-learn 的 v 0.12。

scikit-learn文档说克隆存储库,将 scikit-learn 目录添加到您的 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 的指示吗?

4

1 回答 1

12

scikit-learn 网站上描述的操作与 EPD 中的 scikit-learn 版本无关。Python 将自动使用PYTHONPATH 环境变量中设置的 scikit-learn 版本,您应该将其设置为 scikit-learn 的 Git 版本的目录路径。

如果您在类 Unix 系统上使用 Bash,您应该执行以下操作:

  • 执行操作以安装 scikit-learn 的最新代码(在此示例中,我将其克隆到/home/yourname/bin/scikit-learn
  • 编辑.bashrc并添加以下行:export PYTHONPATH="/home/yourname/bin/scikit-learn";
  • 打开一个新终端并通过键入以交互模式启动 Pythonpython
    • 类型:import sklearn
    • 类型:sklearn.__verion__这现在应该显示'0.12-git'而不是0.11

为什么这行得通?Python 在内部使用变量sys.pathlist路径的 a)来跟踪它应该在其中查找模块和包的所有目录。一旦请求了模块或包,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 程序中使用 scikit-learn 的 0.12 版本,而在所有其他 Python 程序中默认使用 0.11 版本,那么您可以PYTHONPATH留空并仅手动插入 scikit-learn 0.12 的路径在代码的顶部:

import sys
sys.path.insert(0, '/home/yourname/bin/scikit-learn')
import sklearn
于 2012-08-31T17:28:20.087 回答