我安装了EPD 7.3.1(现称为Enthought Canopy),附带scikit-learn v 0.11。我正在运行Ubuntu 12.04。我需要安装v 0.12的scikit-learn。
scikit-learn doc says克隆存储库,将scikit-learn目录添加到PYTHONPATH,并构建扩展:python setup.py build_ext --inplace
问题在于EPD是它自己封闭的世界(有多个scikit dirs):
./lib/python2.7/site-packages/scikits/
./lib/python2.7/site-packages/sklearn
然后是:
./EGG-INFO/scikit_learn/
我真的不想尝试,因为花了很长时间才把事情调到这一点。在这种情况下,我应该遵循scikit-learn的指示吗?
答案 0 :(得分:12)
scikit-learn网站上描述的行动与EPD中的scikit-learn版本无关。 Python将自动使用PYTHONPATH
environment variable中设置的scikit-learn版本,您应该将其设置为scit-learn的Git版本的目录路径。
如果在类Unix系统上使用Bash,则应执行以下操作:
/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并在所有其他Python程序中使用0.11版本作为默认值,那么您可以将PYTHONPATH
留空并仅插入路径到scikit-learn在代码顶部手动学习0.12:
import sys
sys.path.insert(0, '/home/yourname/bin/scikit-learn')
import sklearn