Scikit-learn: `pip install` 使用 Python 3.7rc1 失败(编译错误)

创建于 2018-06-19  ·  29评论  ·  资料来源: scikit-learn/scikit-learn

描述

无法使用 Python 3.7rc1 执行pip install (编译错误: PyThreadState没有成员...)。

如果已报告此问题,我深表歉意,但我在问题(关闭/打开)中找不到它,也没有任何拉取请求。

pyyaml (yaml/pyyaml#126)、numpy (numpy/numpy#10500)、cython (cython/cython#1978) 和 pygame (pygame/pygame#382) 也存在类似的问题。

重现的步骤/代码

安装 Python 3.7rc1。
pip install scikit-learn

预期成绩

pip成功。

实际结果

编译错误:

...
sklearn/cluster/_dbscan_inner.cpp: In function ‘int
__Pyx__GetException(PyThreadState*, PyObject**, PyObject**, PyObject**)’:

sklearn/cluster/_dbscan_inner.cpp:6029:24: error: ‘PyThreadState’ has no member named ‘exc_type’
     tmp_type = tstate->exc_type;
                        ^
sklearn/cluster/_dbscan_inner.cpp:6030:25: error: ‘PyThreadState’ has no member named ‘exc_value’
     tmp_value = tstate->exc_value;
                         ^
sklearn/cluster/_dbscan_inner.cpp:6031:22: error: ‘PyThreadState’ has no member named ‘exc_traceback’
     tmp_tb = tstate->exc_traceback;
                      ^
sklearn/cluster/_dbscan_inner.cpp:6032:13: error: ‘PyThreadState’ has no member named ‘exc_type’
     tstate->exc_type = local_type;
             ^
sklearn/cluster/_dbscan_inner.cpp:6033:13: error: ‘PyThreadState’ has no member named ‘exc_value’
     tstate->exc_value = local_value;
             ^
sklearn/cluster/_dbscan_inner.cpp:6034:13: error: ‘PyThreadState’ has no member named ‘exc_traceback’
     tstate->exc_traceback = local_tb;
             ^
error: Command "g++ -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g
-fwrapv -O3 -Wall -fPIC
-I/data/install/lib/python3.7/site-packages/numpy/core/include
-I/data/install/lib/python3.7/site-packages/numpy/core/include
-I/data/install/include/python3.7m -c sklearn/cluster/_dbscan_inner.cpp -o
build/temp.linux-x86_64-3.7/sklearn/cluster/_dbscan_inner.o -MMD -MF
build/temp.linux-x86_64-3.7/sklearn/cluster/_dbscan_inner.o.d" failed with exit
status 1

版本

Linux-3.10.0-862.el7.x86_64-x86_64-with-redhat-7.5-Maipo
Python 3.7.0rc1 (default, Jun 19 2018, 10:54:58) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
NumPy 1.14.5
SciPy 1.1.0

最有用的评论

我认为关键是普通 Homebrew 用户默认使用 Python 3.7。

支持 Python 3.7 的 0.19.2 次要版本正在进行中。

所有29条评论

感谢您报告此事!

安装最新的开发版本有效吗?

pip install https://github.com/scikit-learn/scikit-learn/archive/master.zip

请注意,您需要 Cython >=0.27.3 来编译它..

(链接到 https://github.com/scikit-learn/scikit-learn/issues/11224 以供将来参考)

听起来这可能是 Cython 需要修复和发布的东西。 我们
这里依赖于 Cython 对 Py3.7 的支持。

是的,根据https://github.com/cython/cython/issues/1955,Python 3.7 下的最低要求是 Cython 0.27.3,其中修复了此问题。 在#11224 中,我可以确认该构建在 Cython 0.28 上运行良好。

doc/developers/advanced_installation.rst的最小 Cython 版本可能应该针对 Python 3.7 进行相应更新

我们向 Python 3.7 支持迈进的最简单方法是在我们的日常“最新依赖项”工作中使用它。 但是当 NumPy 和 SciPy 支持 Python 3.7 时,这是最简单的。 NumPy 正在为 3.7 生产轮子。 目前,SciPy 并未在 Python 3.7 上构建,但正在致力于它 (https://github.com/scipy/scipy/pull/8988)。 我们将努力效仿。

IMO,我们不应该担心 v0.20.0 中的 Python 3.7 支持,而是在错误修复版本(0.20.1 或 0.20.2)中处理它,因为 SciPy 和 6 中的支持有限(https://github.com /benjaminp/6/pull/241)。

IMO,我们不应该担心 v0.20.0 中的 Python 3.7 支持,而是在错误修复版本(0.20.1 或 0.20.2)中处理它,

总结一下 Python 3.7 的情况,

SciPy 现在有适用于 Python 3.7(所有平台)的二进制轮子。

FWIW,#11409 表明我们可以使用 numpy、scipy 和 cython 的开发版本进行构建,并且所有测试都通过(尽管使用 PendingDeprecationWarning 和 DeprecationWarning)。 但是,它不会尝试运行示例库。 它也不会尝试在 Windows 中构建(也许应该)。

homebrew将我升级到 python 3.7.0,我现在没有 scikit-learn。
你认为我什么时候能做到pip3 install scikit-learn ? 一周? 一个月? 一年?
我需要这些信息来决定是等待还是降级到 3.6.*。
非常感谢你。

你认为我什么时候可以做 pip3 install scikit-learn? 一周? 一个月? 一年?

下一个版本大约一个月。 同时,您可以安装开发版本https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398556438 或降级到 python 3.6。

我们可以考虑为了 Py3.7 的支持而匆忙发布 0.19.2 吗??

考虑到最近关于它的问题的数量,它确实可能更可取。 它还将为将来使用 Python 3.7 的人简化 0.19.x 和 0.20.x 之间的比较/回归跟踪。

如果我们最终发布了 0.19.2 版本,这里有两件事需要考虑添加,因为他们无缘无故地错过了 0.19.1。

在 Ubuntu 18.04 上,推荐的解决方法有效:
pip 安装https://github.com/scikit-learn/scikit-learn/archive/master.zip

@rth

下一个版本大约一个月。 同时您可以安装开发版本#11320(评论)或降级到python 3.6。

Homebrew 已将其默认的 python 安装更新为 3.7。 由于自制软件不允许安装特定版本,因此降级到 3.6 并不是一件容易的事。 仅供参考

@bgyarfas应该可以在 brew 中从 python 3.7 降级回 3.6.5

brew info python3
brew switch python 3.6.5

这仅适用于先前版本仍缓存在本地计算机上的情况。

@bgyarfas如果您没有在自制软件中缓存 3.6,您可以使用 pyenv。 以下对我有用...

brew install pyenv
pyenv install 3.6.5
eval "$(pyenv init -)"
pyenv shell 3.6.5
pip install virtualenv
virtualenv venv-3.6
source venv-3.6/bin/activate

您可以在没有 virtualenv 的情况下执行此操作,但我的典型设置依赖于它。

我认为关键是普通 Homebrew 用户默认使用 Python 3.7。

我认为关键是普通 Homebrew 用户默认使用 Python 3.7。

支持 Python 3.7 的 0.19.2 次要版本正在进行中。

19.2 版本的时间表是什么?
谢谢!

@sam-s 如果你现在需要它,你可以尝试使用最新的 cython 版本安装 master 分支:

pip install -U cython
pip install -e git+https://github.com/scikit-learn/scikit-learn@master#egg=scikit-learn

这在 Python 3.7 上使用 pipenv 对我有用。
当然,当版本可用时,您应该从(可能)不稳定的主分支切换到正确的版本。

你也可以从基本上准备好的 0.19.X 分支安装
发布,但可以发布的人尚未可用。

PyPI 现已发布 0.19.2 版: https ://pypi.org/project/scikit-learn/0.19.2/

按固定方式关闭。 请在 Python 3.7 中使用 0.19.2。

0.20.X 的计划是什么? 看起来我可以用 0.20.0 构建,但不能用 0.20.1。
错误是这样的:

     sklearn/cluster/_hierarchical.cpp:24792:13: error: ‘PyThreadState {aka struct _ts}’ has no member named ‘exc_traceback’; did you mean ‘curexc_traceback’?
           tstate->exc_traceback = *tb;

您是否尝试按照https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398631435 中所述更新 Cython?

刚刚更新到 0.20.2,它正在工作。

我的经验是所有低于0.20 (例如0.160.170.180.19 )都会崩溃。

我的测试: https :

是否有涵盖这些版本的计划?

我的经验是所有低于 0.20 的版本(例如 0.16、0.17、0.18、0.19)都会崩溃。
是否有涵盖这些版本的计划?

我不这么认为。 使用 Python 3.7 的用户至少需要升级到 scikit-learn 0.20.X。

此页面是否有帮助?
0 / 5 - 0 等级