Scikit-learn: `pip install` échoue (erreur de compilation) avec Python 3.7rc1

Créé le 19 juin 2018  ·  29Commentaires  ·  Source: scikit-learn/scikit-learn

La description

Impossible de pip install (erreur de compilation : PyThreadState n'a pas de membre ...) avec Python 3.7rc1.

Mes excuses si cela a été signalé, mais je ne l'ai pas trouvé dans les problèmes (fermés/ouverts) ni dans aucune demande d'extraction pour cela.

Il y a eu des problèmes similaires avec pyyaml ​​(yaml/pyyaml#126), numpy (numpy/numpy#10500), cython (cython/cython#1978) et pygame (pygame/pygame#382).

Étapes/Code à reproduire

Installez Python 3.7rc1.
pip install scikit-learn

Résultats attendus

pip réussit.

Résultats actuels

Erreurs de compilation :

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

Versions

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

Commentaire le plus utile

Je pense que le fait est que l'utilisateur moyen d'Homebrew aura Python 3.7 par défaut.

Une version mineure 0.19.2 qui prendra en charge Python 3.7 est en cours.

Tous les 29 commentaires

Merci d'avoir signalé cela !

L'installation de la dernière version de développement fonctionne-t-elle ?

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

Notez que vous auriez besoin de Cython >=0.27.3 pour le compiler.

(Lien vers https://github.com/scikit-learn/scikit-learn/issues/11224 pour référence future)

Il semble que cela puisse être quelque chose que Cython doit corriger et publier. Nous
dépendent du support de Cython pour Py3.7 ici.​

Oui, selon https://github.com/cython/cython/issues/1955, la configuration minimale requise sous Python 3.7 est Cython 0.27.3 où ce problème a été résolu. Dans #11224, je peux confirmer que la construction fonctionne bien avec Cython 0.28.

La version minimale de Cython dans doc/developers/advanced_installation.rst devrait probablement être mise à jour en conséquence pour Python 3.7

Le moyen le plus simple pour nous de passer à la prise en charge de Python 3.7 est de l'utiliser dans notre travail quotidien sur les "dernières dépendances". Mais c'est plus facile lorsque NumPy et SciPy prennent en charge Python 3.7. NumPy produit des roues pour 3.7. Pour le moment, SciPy ne fait pas de builds sur Python 3.7, mais y travaille (https://github.com/scipy/scipy/pull/8988). Nous essaierons d'emboîter le pas.

OMI, nous ne devrions pas nous inquiéter de la prise en charge de Python 3.7 dans la v0.20.0, mais le traiter dans une version de correction de bogue (0.20.1 ou 0.20.2), étant donné la prise en charge limitée de SciPy et Six (https://github.com /benjaminp/six/pull/241).

OMI, nous ne devrions pas nous inquiéter de la prise en charge de Python 3.7 dans la v0.20.0, mais le traiter dans une version de correction de bogue (0.20.1 ou 0.20.2),

Pour résumer la situation pour Python 3.7,

SciPy a maintenant des roues binaires pour Python 3.7 (toutes les plateformes).

FWIW, #11409 identifie que nous pouvons construire avec les versions de développement de numpy, scipy et cython, et que tous les tests réussissent (bien qu'avec PendingDeprecationWarning et DeprecationWarning). Cependant, il n'essaie pas d'exécuter la galerie d'exemples. Il n'essaie pas non plus de construire dans Windows (peut-être devrait-il le faire).

homebrew m'a mis
quand pensez-vous que je pourrai faire pip3 install scikit-learn ? une semaine? un mois? une année?
J'ai besoin de ces informations pour décider d'attendre ou de passer à la version 3.6.*.
Merci beaucoup.

quand pensez-vous que je pourrai faire pip3 install scikit-learn? une semaine? un mois? une année?

Un mois très grossièrement pour la prochaine sortie. En attendant, vous pouvez soit installer la version de développement https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398556438, soit passer à python 3.6.

Nous pourrions envisager de publier rapidement 0.19.2 juste pour le support Py3.7 ??​

Compte tenu du nombre de problèmes qui ont été ouverts récemment à ce sujet, cela pourrait être préférable en effet. Cela simplifiera également les comparaisons / suivi de régression entre 0.19.x et 0.20.x pour les personnes utilisant Python 3.7 à l'avenir.

Si nous finissons par faire une version 0.19.2, voici deux choses à envisager d'ajouter car elles ont raté la 0.19.1 sans raison particulière.

Sur Ubuntu 18.04, la solution de contournement recommandée fonctionne :
pip install https://github.com/scikit-learn/scikit-learn/archive/master.zip

@rth

Un mois très grossièrement pour la prochaine sortie. En attendant, vous pouvez soit installer la version de développement #11320 (commentaire) soit revenir à python 3.6.

Homebrew a mis à jour son installation python par défaut vers 3.7. Étant donné que homebrew ne permet pas d'installer des versions spécifiques, la mise à niveau vers la 3.6 n'est pas une perspective facile. Juste pour info

@bgyarfas, il devrait être possible de rétrograder de python 3.7 à 3.6.5 en brassage

brew info python3
brew switch python 3.6.5

Cela ne fonctionne que si la version précédente est toujours mise en cache sur la machine locale.

@bgyarfas Si vous n'avez pas 3.6 mis en cache dans l'homebrew, vous pouvez utiliser pyenv. Ce qui suit a fonctionné pour moi...

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

Vous pouvez le faire sans virtualenv, mais ma configuration typique en dépend.

Je pense que le fait est que l'utilisateur moyen d'Homebrew aura Python 3.7 par défaut.

Je pense que le fait est que l'utilisateur moyen d'Homebrew aura Python 3.7 par défaut.

Une version mineure 0.19.2 qui prendra en charge Python 3.7 est en cours.

quel est le calendrier pour la version 19.2 ?
Merci!

@sam-s Si vous en avez besoin maintenant, vous pouvez essayer d'installer la branche master en utilisant la dernière version de cython :

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

Cela a fonctionné pour moi sur Python 3.7 en utilisant pipenv.
Bien sûr, lorsque la version est disponible, vous devez passer de la branche master (éventuellement) instable à la version correcte.

vous pouvez également installer à partir de la branche 0.19.X qui est essentiellement prête pour
version, mais les personnes qui peuvent faire la version n'ont pas été disponibles.

La version 0.19.2 est désormais disponible sur PyPI : https://pypi.org/project/scikit-learn/0.19.2/

Fermeture comme fixe. Veuillez utiliser 0.19.2 avec Python 3.7.

Quel est le plan pour 0.20.X ? Il semble que je puisse construire avec 0.20.0, mais pas avec 0.20.1.
Les erreurs sont comme :

     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;

Avez-vous essayé de mettre à jour Cython comme mentionné dans https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398631435 ?

Je viens de mettre à jour la version 0.20.2 et ça marche.

J'ai fait l'expérience que toutes les versions inférieures à 0.20 (par exemple 0.16 , 0.17 , 0.18 , 0.19 ) se briseront.

Mes tests : https://travis-ci.org/nok/sklearn-porter/builds/561765760

Existe-t-il des plans pour couvrir ces versions ?

J'ai fait l'expérience que toutes les versions inférieures à 0,20 (par exemple 0,16, 0,17, 0,18, 0,19) se briseront.
Existe-t-il des plans pour couvrir ces versions ?

Je ne pense pas. Les utilisateurs de Python 3.7 devront au moins passer à scikit-learn 0.20.X.

Cette page vous a été utile?
0 / 5 - 0 notes