Scikit-learn: `pip install` falla (error de compilación) con Python 3.7rc1

Creado en 19 jun. 2018  ·  29Comentarios  ·  Fuente: scikit-learn/scikit-learn

Descripción

No se puede pip install (error de compilación: PyThreadState no tiene miembro ...) con Python 3.7rc1.

Mis disculpas si se ha informado de esto, pero no pude encontrarlo en los problemas (cerrado / abierto) ni en ninguna solicitud de extracción.

Ha habido problemas similares con pyyaml ​​(yaml / pyyaml ​​# 126), numpy (numpy / numpy # 10500), cython (cython / cython # 1978) y pygame (pygame / pygame # 382).

Pasos / Código para reproducir

Instale Python 3.7rc1.
pip install scikit-learn

Resultados previstos

pip tiene éxito.

Resultados actuales

Errores de compilación:

...
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

Versiones

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

Comentario más útil

Creo que el punto es que el usuario promedio de Homebrew tendrá Python 3.7 por defecto.

Está en curso una versión secundaria 0.19.2 que admitirá Python 3.7.

Todos 29 comentarios

¡Gracias por informar de esto!

¿Funciona la instalación de la última versión de desarrollo?

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

Tenga en cuenta que necesitaría Cython> = 0.27.3 para compilarlo.

(Enlace a https://github.com/scikit-learn/scikit-learn/issues/11224 para referencia futura)

Parece que esto podría ser algo que Cython necesita arreglar y lanzar. Nosotros
dependen del soporte de Cython para Py3.7 aquí.

Sí, de acuerdo con https://github.com/cython/cython/issues/1955, los requisitos mínimos de Python 3.7 son Cython 0.27.3, donde se solucionó este problema. En # 11224 puedo confirmar que la compilación funciona bien con Cython 0.28.

La versión mínima de Cython en doc/developers/advanced_installation.rst probablemente debería actualizarse en consecuencia para Python 3.7

La forma más fácil de avanzar hacia el soporte de Python 3.7 es usarlo en nuestro trabajo diario de "últimas dependencias". Pero esto es más fácil cuando NumPy y SciPy son compatibles con Python 3.7. NumPy está produciendo ruedas para 3.7. Por el momento, SciPy no está haciendo compilaciones en Python 3.7, pero está trabajando en eso (https://github.com/scipy/scipy/pull/8988). Intentaremos hacer lo mismo.

En mi opinión, no deberíamos preocuparnos por el soporte de Python 3.7 en v0.20.0, sino solucionarlo en una versión de corrección de errores (0.20.1 o 0.20.2), dado el soporte limitado en SciPy y Six (https://github.com / benjaminp / six / pull / 241).

En mi opinión, no deberíamos preocuparnos por el soporte de Python 3.7 en la v0.20.0, sino solucionarlo en una versión de corrección de errores (0.20.1 o 0.20.2),

Para resumir la situación de Python 3.7,

SciPy ahora tiene ruedas binarias para Python 3.7 (todas las plataformas).

FWIW, # 11409 identifica que podemos construir con las versiones de desarrollo de numpy, scipy y cython, y todas las pruebas pasan (aunque con PendingDeprecationWarning y DeprecationWarning). Sin embargo, no intenta ejecutar la galería de ejemplo. Tampoco intenta compilar en Windows (quizás debería hacerlo).

homebrew me actualizó a Python 3.7.0 y ahora me quedo sin scikit-learn.
¿Cuándo crees que podré hacer pip3 install scikit-learn ? ¿una semana? ¿un mes? ¿un año?
Necesito esta información para decidir si esperar o cambiar a 3.6. *.
Muchísimas gracias.

¿Cuándo crees que podré hacer pip3 install scikit-learn? ¿una semana? ¿un mes? ¿un año?

Un mes muy aproximado para el próximo lanzamiento. Mientras tanto, puede instalar la versión de desarrollo https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398556438 o cambiar a Python 3.6.

¿Podríamos considerar lanzar 0.19.2 a toda prisa solo para el soporte de Py3.7?

Dada la cantidad de cuestiones que se abrieron últimamente al respecto, podría ser preferible de hecho. También simplificará las comparaciones / seguimiento de regresión entre 0.19.xy 0.20.x para las personas que usen Python 3.7 en el futuro.

Si terminamos haciendo una versión 0.19.2, aquí hay dos cosas para considerar agregar porque fallaron 0.19.1 sin una buena razón en particular.

En Ubuntu 18.04, la solución alternativa recomendada funciona:
instalación de pip https://github.com/scikit-learn/scikit-learn/archive/master.zip

@rth

Un mes muy aproximado para el próximo lanzamiento. Mientras tanto, puede instalar la versión de desarrollo # 11320 (comentario) o cambiar a Python 3.6.

Homebrew ha actualizado su instalación de Python predeterminada a 3.7. Dado que homebrew no permite la instalación de versiones específicas, la degradación a 3.6 no es una posibilidad fácil. Solo un FYI

@bgyarfas debería ser posible degradar de python 3.7 a 3.6.5 en brew

brew info python3
brew switch python 3.6.5

Esto solo funciona si la versión anterior todavía está almacenada en caché en la máquina local.

@bgyarfas Si no tiene 3.6 en caché en homebrew, puede usar pyenv. Lo siguiente funcionó para mí ...

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

Puede hacer esto sin virtualenv, pero mi configuración típica se basa en él.

Creo que el punto es que el usuario promedio de Homebrew tendrá Python 3.7 por defecto.

Creo que el punto es que el usuario promedio de Homebrew tendrá Python 3.7 por defecto.

Está en curso una versión secundaria 0.19.2 que admitirá Python 3.7.

¿Cuál es el cronograma para la versión 19.2?
¡Gracias!

@ sam-s Si lo necesita ahora, puede intentar instalar la rama maestra con la última versión de cython:

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

Esto funcionó para mí en Python 3.7 usando pipenv.
Por supuesto, cuando la versión esté disponible, debe cambiar de la rama maestra (posiblemente) inestable a la versión correcta.

también puede instalar desde la rama 0.19.X que está básicamente lista para
lanzamiento, pero las personas que pueden hacer el lanzamiento no han estado disponibles.

La versión 0.19.2 ahora está disponible en PyPI: https://pypi.org/project/scikit-learn/0.19.2/

Cerrando como fijo. Utilice 0.19.2 con Python 3.7.

¿Cuál es el plan para 0.20.X? Parece que puedo construir con 0.20.0, pero no con 0.20.1.
Los errores son como:

     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;

¿Ha intentado actualizar Cython como se menciona en https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398631435?

Recién actualizado a 0.20.2 y está funcionando.

Experimenté la experiencia de que todas las versiones inferiores a 0.20 (por ejemplo, 0.16 , 0.17 , 0.18 , 0.19 ) se romperán.

Mis pruebas: https://travis-ci.org/nok/sklearn-porter/builds/561765760

¿Hay planes para cubrir estas versiones?

Experimenté la experiencia de que todas las versiones inferiores a 0,20 (por ejemplo, 0,16, 0,17, 0,18, 0,19) se romperán.
¿Hay planes para cubrir estas versiones?

No lo creo. Los usuarios con Python 3.7 necesitarían actualizar a scikit-learn 0.20.X al menos.

¿Fue útil esta página
0 / 5 - 0 calificaciones