【问题标题】:Scikit-Learn failing to install on OS X: undeclared identifier and assignment errorsScikit-Learn 无法在 OS X 上安装:未声明的标识符和分配错误
【发布时间】:2013-08-01 16:08:52
【问题描述】:

在尝试在我的机器上安装 scikit-learn 时,我遇到了问题。我正在使用 Homebrew 的 Python 2.7.5 运行 OS X 10.8.4,并且安装了最新版本的 Scipy 和 Numpy。

我尝试通过 Pip 安装 scikit-learn 以及克隆最新的源代码并从头开始构建 - 这是我每次尝试构建时都会得到的结果。知道这里发生了什么吗?

1 warning and 3 errors generated.
In file included from sklearn/feature_extraction/_hashing.c:258:
In file included from /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:15:
In file included from /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:17:
In file included from /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1728:
/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include/numpy/npy_deprecated_api.h:11:2: warning: "Using deprecated NumPy API, disable it by #defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
#warning "Using deprecated NumPy API, disable it by #defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION"
 ^
sklearn/feature_extraction/_hashing.c:2439:15: error: assigning to 'int' from incompatible type 'void'
    __pyx_t_2 = PyErr_BadArgument(); if (unlikely(__pyx_t_2 == 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
              ^ ~~~~~~~~~~~~~~~~~~~
sklearn/feature_extraction/_hashing.c:4833:96: error: use of undeclared identifier 'PyBoolObject'
  __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), 0); if (unlikely(!__pyx_ptype_7cpython_4bool_bool)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                                                                                               ^
sklearn/feature_extraction/_hashing.c:4834:105: error: use of undeclared identifier 'PyComplexObject'
  __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), 0); if (unlikely(!__pyx_ptype_7cpython_7complex_complex)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                                                                                                        ^
1 warning and 3 errors generated.
error: Command "cc -fno-strict-aliasing -fno-common -dynamic -I/usr/local/include -I/usr/local/opt/sqlite/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include -I/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include -I/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c sklearn/feature_extraction/_hashing.c -o build/temp.macosx-10.8-x86_64-2.7/sklearn/feature_extraction/_hashing.o" failed with exit status 1

【问题讨论】:

  • NumPy 和 SciPy 版本到底是什么?
  • Numpy 为 1.7.1,SciPy 为 0.12.0。
  • 这不是讨论错误的理想格式,但是您是否安装了 Cython?如果没有,请使用pip install cython 安装它吗?
  • 已安装 cython,结果相同。我知道这并不理想,但我想我会确保在提交问题之前我没有做一些愚蠢的事情。我现在就去做,并从这里链接到它。
  • 安装 Cython 并没有改变;我想建议你在 sklearn/feature_extraction/_hashing.pyx 上运行 Cython,然后重新编译并重试。

标签: scikit-learn


【解决方案1】:

升级到 OSX 10.9 Mavericks 后,我遇到了同样的构建问题。我通过运行解决了它:

xcode-select --install

更新 XCode 命令行工具。

我还通过自制库升级了所有内容:

brew update
brew doctor
# fix all reported issues
brew upgrade

我不得不卸载并重新安装以前针对不兼容的 C++ 标准库版本构建的一些依赖项。

【讨论】:

  • 我也在 Mavericks,但是当我运行 xcode-select --install 时,它显示“无法安装该软件,因为它当前无法从软件更新服务器获得。”。我在某处读到这是因为命令行工具现在随 Xcode 一起提供,但我拥有最新版本 5.0.1,但它仍然无法正常工作。重装了也没啥变化,不知道怎么办?
  • 抱歉,不知道。但是,如果您找到了,请将解决方案作为此问题的新答案报告回来。
【解决方案2】:

我在 OSX 10.9 Mavericks 上遇到过类似的问题,也许它会在 OSX 10.8.4 上对您有所帮助,或者以防您将来升级系统。基于this answer,在进一步研究中我了解到您需要安装XCode命令行工具,该工具通常在终端上运行:

xcode-select --install

如果有效,您将直接进入此答案末尾的 Homebrew 步骤。但是,一些用户(如我自己)可能无法运行它,因为命令行工具现在随 Xcode 一起提供,并且不再以这种方式可用。它可能会说:

“无法安装该软件,因为它当前无法从软件更新服务器获得。”

事实证明,升级或重新安装 Xcode 也可能不起作用,显然它不是以这种方式交付给我的。幸运的是,还有另一种获取此命令行工具的方法(我看过 here):

  1. 打开 Xcode
  2. 在应用程序菜单项“Xcode”中选择 Open Developer Tool > More Developer Tools...
  3. 这会将您带到一个包含大量软件的站点。继续下载并安装“命令 适用于 Xcode 的 Line Tools (OS X Mavericks) - 2013 年 10 月下旬"。
  4. 如果您不是 Mavericks 用户,您也可以找到自己的版本。

然后您尝试再次安装 Scikit-Learn。如果它仍然没有帮助,Xcode 可能没有指向正确的位置。你要么试试这个(来源here):

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

或者那个(来源here):

sudo xcode-select -switch /Library/Developer/CommandLineTools

Xcode.app 的第一个是对我有用的。通过这种方式,您当然可以防止 Git 命令行也出现故障的另一个问题,这会在下一步和最后一步中困扰您:Homebrew。这是因为 Homebrew 依赖 Git 才能正常工作。

自制步骤:

brew update
brew doctor
# fix all reported issues
brew upgrade

如果仍然无法正常工作,请重新安装 Homebrew (Homebrew homepage) 并再次安装。我希望这能解决你的问题:)

【讨论】:

    猜你喜欢
    • 2012-05-03
    • 2013-02-04
    • 2013-04-11
    • 2018-09-27
    • 2014-06-27
    • 2022-01-17
    • 2013-03-12
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多