Scikit-learn: `pip install` schlÀgt fehl (Kompilierungsfehler) mit Python 3.7rc1

Erstellt am 19. Juni 2018  Â·  29Kommentare  Â·  Quelle: scikit-learn/scikit-learn

Beschreibung

pip install (Kompilierungsfehler: PyThreadState hat kein Mitglied ...) mit Python 3.7rc1 nicht möglich.

Ich entschuldige mich, wenn dies gemeldet wurde, aber ich konnte es weder in den Ausgaben (geschlossen/offen) noch in einem Pull-Request dafĂŒr finden.

Es gab Ă€hnliche Probleme mit pyyaml ​​(yaml/pyyaml#126), numpy (numpy/numpy#10500), cython (cython/cython#1978) und pygame (pygame/pygame#382).

Schritte/Code zum Reproduzieren

Installieren Sie Python 3.7rc1.
pip install scikit-learn

erwartete Ergebnisse

pip erfolgreich.

TatsÀchliche Ergebnisse

Kompilierungsfehler:

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

Versionen

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

Hilfreichster Kommentar

Ich denke, der Punkt ist, dass der durchschnittliche Homebrew-Benutzer standardmĂ€ĂŸig Python 3.7 verwendet.

Eine kleinere Version 0.19.2, die Python 3.7 unterstĂŒtzt, ist in Arbeit.

Alle 29 Kommentare

Danke, dass du das gemeldet hast!

Funktioniert die Installation der neuesten Entwicklerversion?

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

Beachten Sie, dass Sie Cython >=0.27.3 benötigen, um es zu kompilieren.

(Verlinkung zu https://github.com/scikit-learn/scikit-learn/issues/11224 fĂŒr zukĂŒnftige Referenzen)

Es hört sich so an, als ob dies etwas sein könnte, das Cython reparieren und veröffentlichen muss. Wir
sind hier auf Cythons UnterstĂŒtzung fĂŒr Py3.7 angewiesen.​

Ja, laut https://github.com/cython/cython/issues/1955 sind die Mindestanforderungen unter Python 3.7 Cython 0.27.3, wo dieses Problem behoben wurde. In #11224 kann ich bestÀtigen, dass der Build mit Cython 0.28 gut funktioniert.

Die minimale Cython-Version in doc/developers/advanced_installation.rst sollte wahrscheinlich fĂŒr Python 3.7 entsprechend aktualisiert werden

Der einfachste Weg fĂŒr uns, auf die UnterstĂŒtzung von Python 3.7 umzusteigen, besteht darin, sie in unserem tĂ€glichen Job "Neueste AbhĂ€ngigkeiten" zu verwenden. Dies ist jedoch am einfachsten, wenn NumPy und SciPy Python 3.7 unterstĂŒtzen. NumPy produziert RĂ€der fĂŒr 3.7. Im Moment erstellt SciPy keine Builds auf Python 3.7, sondern arbeitet daran (https://github.com/scipy/scipy/pull/8988). Wir werden versuchen, diesem Beispiel zu folgen.

IMO, wir sollten uns keine Sorgen um die UnterstĂŒtzung von Python 3.7 in v0.20.0 machen, sondern uns in einem Bugfix-Release (0.20.1 oder 0.20.2) darum kĂŒmmern, angesichts der begrenzten UnterstĂŒtzung in SciPy und Six (https://github.com /benjaminp/six/pull/241).

IMO, wir sollten uns keine Sorgen um die UnterstĂŒtzung von Python 3.7 in v0.20.0 machen, sondern uns in einem Bugfix-Release (0.20.1 oder 0.20.2) darum kĂŒmmern.

Um die Situation fĂŒr Python 3.7 zusammenzufassen,

SciPy hat jetzt BinĂ€rrĂ€der fĂŒr Python 3.7 (alle Plattformen).

FWIW, #11409 gibt an, dass wir mit den Entwicklungsversionen von numpy, scipy und cython bauen können und alle Tests bestehen (allerdings mit PendingDeprecationWarning und DeprecationWarning). Es wird jedoch nicht versucht, die Beispielgalerie auszufĂŒhren. Es versucht auch nicht, in Windows zu bauen (vielleicht sollte es).

homebrew hat mich auf Python 3.7.0 aktualisiert und ich bin jetzt ohne Scikit-Learn.
Wann glaubst du, kann ich pip3 install scikit-learn tun? eine Woche? ein Monat? ein Jahr?
Ich benötige diese Informationen, um zu entscheiden, ob ich warten oder auf 3.6.* downgraden möchte.
Vielen Dank.

Wann denkst du, kann ich pip3 install scikit-learn installieren? eine Woche? ein Monat? ein Jahr?

Ein Monat sehr grob fĂŒr die nĂ€chste Veröffentlichung. In der Zwischenzeit können Sie entweder die Entwicklungsversion https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398556438 installieren oder auf Python 3.6 downgraden.

Wir könnten erwĂ€gen, 0.19.2 in Eile nur fĂŒr die UnterstĂŒtzung von Py3.7 zu veröffentlichen??​

Angesichts der Menge an Themen, die in letzter Zeit dazu aufgeworfen wurden, könnte dies tatsĂ€chlich vorzuziehen sein. Es wird auch Vergleiche / Regressionsverfolgung zwischen 0.19.x und 0.20.x fĂŒr Leute vereinfachen, die in Zukunft Python 3.7 verwenden.

Wenn wir am Ende eine Version von 0.19.2 erstellen, sollten Sie Folgendes in Betracht ziehen, da sie 0.19.1 ohne besonderen Grund verpasst haben.

Unter Ubuntu 18.04 funktioniert die empfohlene Problemumgehung:
pip installieren https://github.com/scikit-learn/scikit-learn/archive/master.zip

@rth

Ein Monat sehr grob fĂŒr die nĂ€chste Veröffentlichung. In der Zwischenzeit können Sie entweder die Entwicklungsversion #11320 installieren (Kommentar) oder auf Python 3.6 downgraden.

Homebrew hat seine standardmĂ€ĂŸige Python-Installation auf 3.7 aktualisiert. Da Homebrew die Installation bestimmter Versionen nicht zulĂ€sst, ist ein Downgrade auf 3.6 keine leichte Aufgabe. Nur ein FYI

@bgyarfas es sollte möglich sein, von Python 3.7 zurĂŒck auf 3.6.5 im GebrĂ€u herunterzustufen

brew info python3
brew switch python 3.6.5

Dies funktioniert nur, wenn die vorherige Version noch auf dem lokalen Computer zwischengespeichert ist.

@bgyarfas Wenn Sie 3.6 nicht im Homebrew zwischengespeichert haben, können Sie pyenv verwenden. Bei mir hat folgendes funktioniert...

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

Sie können dies ohne virtualenv tun, aber mein typisches Setup basiert darauf.

Ich denke, der Punkt ist, dass der durchschnittliche Homebrew-Benutzer standardmĂ€ĂŸig Python 3.7 verwendet.

Ich denke, der Punkt ist, dass der durchschnittliche Homebrew-Benutzer standardmĂ€ĂŸig Python 3.7 verwendet.

Eine kleinere Version 0.19.2, die Python 3.7 unterstĂŒtzt, ist in Arbeit.

Wie sieht der Zeitplan fĂŒr die Version 19.2 aus?
Danke!

@sam-s Wenn Sie es jetzt brauchen, können Sie versuchen, den Master-Zweig mit der neuesten Cython-Version zu installieren:

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

Dies funktionierte fĂŒr mich unter Python 3.7 mit pipenv.
Wenn das Release verfĂŒgbar ist, sollten Sie natĂŒrlich vom (möglicherweise) instabilen Master-Zweig auf das richtige Release wechseln.

Sie können auch aus dem 0.19.X-Zweig installieren, der im Grunde bereit ist fĂŒr
Veröffentlichung, aber die Leute, die die Veröffentlichung vornehmen können, waren nicht verfĂŒgbar.

Version 0.19.2 ist jetzt auf PyPI verfĂŒgbar: https://pypi.org/project/scikit-learn/0.19.2/

Schließung wie fest. Bitte verwenden Sie 0.19.2 mit Python 3.7.

Was ist der Plan fĂŒr 0.20.X? Es sieht so aus, als ob ich mit 0.20.0 bauen kann, aber nicht mit 0.20.1.
Die Fehler sind wie folgt:

     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;

Haben Sie versucht, Cython wie in https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398631435 erwÀhnt zu aktualisieren?

Gerade auf 0.20.2 aktualisiert und es funktioniert.

Ich habe die Erfahrung gemacht, dass alle Versionen niedriger als 0.20 (zB 0.16 , 0.17 , 0.18 , 0.19 ) kaputt gehen.

Meine Tests: https://travis-ci.org/nok/sklearn-porter/builds/561765760

Gibt es PlÀne, diese Versionen abzudecken?

Ich habe die Erfahrung gemacht, dass alle Versionen kleiner als 0.20 (zB 0.16, 0.17, 0.18, 0.19) kaputt gehen.
Gibt es PlÀne, diese Versionen abzudecken?

Ich glaube nicht. Benutzer mit Python 3.7 mĂŒssten mindestens auf scikit-learn 0.20.X aktualisieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen