Scikit-learn: Ошибка `pip install` (ошибка компиляции) с Python 3.7rc1

Созданный на 19 июн. 2018  ·  29Комментарии  ·  Источник: scikit-learn/scikit-learn

Описание

Невозможно pip install (ошибка компиляции: PyThreadState не имеет члена ...) с Python 3.7rc1.

Приношу свои извинения, если об этом было сообщено, но я не смог найти его ни в проблемах (закрытых / открытых), ни в каких-либо запросах на перенос.

Аналогичные проблемы были с 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.

Незначительный выпуск 0.19.2, который будет поддерживать Python 3.7, находится в стадии разработки.

Все 29 Комментарий

Спасибо, что сообщили об этом!

Работает ли установка последней версии dev?

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.

Минимальная версия Cython в doc/developers/advanced_installation.rst вероятно, должна быть обновлена ​​соответственно для 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, нам не следует беспокоиться о поддержке Python 3.7 в v0.20.0, но мы должны решить эту проблему в выпуске с исправлением ошибок (0.20.1 или 0.20.2), учитывая ограниченную поддержку в SciPy и Six (https://github.com / Бенджаминп / шесть / тянуть / 241).

ИМО, нам не следует беспокоиться о поддержке Python 3.7 в v0.20.0, мы должны решить эту проблему в выпуске с исправлением ошибок (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.

Мы могли бы подумать о выпуске 0.19.2 в спешке только для поддержки Py3.7 ??

Учитывая количество вопросов, которые были открыты по этому поводу в последнее время, это действительно может быть предпочтительнее. Это также упростит сравнение / отслеживание регрессии между 0.19.x и 0.20.x для людей, использующих Python 3.7 в будущем.

Если мы в конечном итоге выпустим выпуск 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. Поскольку homebrew не позволяет устанавливать определенные версии, понижение до 3.6 - непростая перспектива. Просто к вашему сведению

@bgyarfas должно быть возможно откатиться с python 3.7 до 3.6.5 в brew

brew info python3
brew switch python 3.6.5

Это работает, только если предыдущая версия все еще кэшируется на локальном компьютере.

@bgyarfas Если у вас нет

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.

Незначительный выпуск 0.19.2, который будет поддерживать Python 3.7, находится в стадии разработки.

каковы сроки выхода версии 19.2?
Благодарность!

@ sam-s Если вам это нужно сейчас, вы можете попробовать установить главную ветку, используя последнюю версию cython:

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, которая в основном готова для
релиз, но людей, которые могут его выпустить, не было.

Релиз 0.19.2 теперь доступен на PyPI: https://pypi.org/project/scikit-learn/0.19.2/

Закрытие как исправлено. Пожалуйста, используйте 0.19.2 с Python 3.7.

Какой план на 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;

Вы пробовали обновить Cython, как указано в https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398631435?

Только что обновился до 0.20.2, и все работает.

Я убедился, что все версии ниже 0.20 (например, 0.16 , 0.17 , 0.18 , 0.19 ) сломаются.

Мои тесты: https://travis-ci.org/nok/sklearn-porter/builds/561765760

Есть ли какие-нибудь планы по освещению этих версий?

Я убедился, что все версии ниже 0,20 (например, 0,16, 0,17, 0,18, 0,19) не работают.
Есть ли какие-нибудь планы по освещению этих версий?

Я так не думаю. Пользователи с Python 3.7 должны будут обновить как минимум до scikit-learn 0.20.X.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги