Scikit-learn: `pip install` gagal (kesalahan kompilasi) dengan Python 3.7rc1

Dibuat pada 19 Jun 2018  ·  29Komentar  ·  Sumber: scikit-learn/scikit-learn

Keterangan

Tidak dapat pip install (kesalahan kompilasi: PyThreadState tidak memiliki anggota ...) dengan Python 3.7rc1.

Saya minta maaf jika ini telah dilaporkan, tetapi saya tidak dapat menemukannya dalam masalah (tertutup/terbuka) atau permintaan tarik apa pun untuk itu.

Ada masalah serupa dengan pyyaml ​​(yaml/pyyaml#126), numpy (numpy/numpy#10500), cython (cython/cython#1978), dan pygame (pygame/pygame#382).

Langkah/Kode untuk Mereproduksi

Instal Python 3.7rc1.
pip install scikit-learn

Hasil yang diharapkan

pip berhasil.

Hasil nyata

Kesalahan kompilasi:

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

Versi

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

Komentar yang paling membantu

Saya pikir intinya adalah rata-rata pengguna Homebrew akan memiliki Python 3.7 secara default.

Rilis kecil 0.19.2 yang akan mendukung Python 3.7 sedang berlangsung.

Semua 29 komentar

Terima kasih telah melaporkan ini!

Apakah pemasangan versi dev terbaru berfungsi?

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

Perhatikan bahwa Anda memerlukan Cython >=0.27.3 untuk mengompilasinya..

(Menghubungkan ke https://github.com/scikit-learn/scikit-learn/issues/11224 untuk referensi di masa mendatang)

Sepertinya ini mungkin sesuatu yang perlu diperbaiki dan dirilis oleh Cython. Kami
bergantung pada dukungan Cython untuk Py3.7 di sini.​

Ya, menurut https://github.com/cython/cython/issues/1955 persyaratan minimum di bawah Python 3.7 adalah Cython 0.27.3 di mana masalah ini telah diperbaiki. Di #11224 saya dapat mengonfirmasi bahwa build berfungsi dengan baik dengan Cython 0.28.

Versi Cython minimal di doc/developers/advanced_installation.rst mungkin harus diperbarui sesuai untuk Python 3.7

Cara termudah bagi kami untuk beralih ke dukungan Python 3.7 adalah dengan menggunakannya dalam pekerjaan "dependensi terbaru" harian kami. Tapi ini paling mudah ketika NumPy dan SciPy mendukung Python 3.7. NumPy memproduksi roda untuk 3,7. Saat ini, SciPy tidak membuat build di Python 3.7, tetapi sedang mengerjakannya (https://github.com/scipy/scipy/pull/8988). Kami akan mencoba mengikutinya.

IMO, kita tidak perlu khawatir tentang dukungan Python 3.7 di v0.20.0, tetapi atasi itu dalam rilis perbaikan bug (0.20.1 atau 0.20.2), mengingat dukungan terbatas di SciPy dan Six (https://github.com /benjaminp/enam/tarik/241).

IMO, kita tidak perlu khawatir tentang dukungan Python 3.7 di v0.20.0, tetapi atasi itu dalam rilis perbaikan bug (0.20.1 atau 0.20.2),

Untuk meringkas situasi untuk Python 3.7,

SciPy sekarang memiliki roda biner untuk Python 3.7 (semua platform).

FWIW, #11409 mengidentifikasi bahwa kita dapat membangun dengan versi pengembangan numpy, scipy dan cython, dan semua tes lulus (walaupun dengan PendingDeprecationWarning dan DeprecationWarning). Namun, itu tidak mencoba menjalankan galeri contoh. Juga tidak mencoba membangun di Windows (mungkin memang seharusnya).

homebrew memutakhirkan saya ke python 3.7.0 dan sekarang saya dibiarkan tanpa scikit-learn.
kapan menurutmu aku bisa melakukan pip3 install scikit-learn ? seminggu? sebulan? tahun?
Saya memerlukan informasi ini untuk memutuskan apakah akan menunggu atau menurunkan versi ke 3.6.*.
Terima kasih banyak.

kapan menurut Anda saya dapat menginstal pip3 scikit-learn? seminggu? sebulan? tahun?

Sebulan sangat kasar untuk rilis berikutnya. Sementara itu Anda dapat menginstal versi pengembangan https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398556438 atau menurunkan versi ke python 3.6.

Kami dapat mempertimbangkan untuk merilis 0.19.2 dengan tergesa-gesa hanya untuk dukungan Py3.7??​

Mengingat jumlah masalah yang dibuka akhir-akhir ini tentang hal itu, mungkin memang lebih baik. Ini juga akan menyederhanakan perbandingan / pelacakan regresi antara 0.19.x dan 0.20.x untuk orang yang menggunakan Python 3.7 di masa mendatang.

Jika kami akhirnya melakukan rilis 0.19.2, berikut adalah dua hal yang perlu dipertimbangkan untuk ditambahkan karena mereka melewatkan 0.19.1 tanpa alasan yang jelas.

Di Ubuntu 18.04 solusi yang disarankan berfungsi:
instal pip https://github.com/scikit-learn/scikit-learn/archive/master.zip

@rth

Sebulan sangat kasar untuk rilis berikutnya. Sementara itu Anda dapat menginstal versi pengembangan #11320 (komentar) atau menurunkan versi ke python 3.6.

Homebrew telah memperbarui instalasi python default mereka ke 3.7. Karena homebrew tidak mengizinkan penginstalan versi tertentu, penurunan versi ke 3.6 bukanlah prospek yang mudah. Sekedar FYI

@bgyarfas seharusnya dimungkinkan untuk menurunkan versi dari python 3.7 kembali ke 3.6.5 dalam minuman

brew info python3
brew switch python 3.6.5

Ini hanya berfungsi jika versi sebelumnya masih di-cache di mesin lokal.

@bgyarfas Jika Anda tidak memiliki 3.6 cache di homebrew, Anda dapat menggunakan pyenv. Berikut ini berhasil untuk saya ...

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

Anda dapat melakukan ini tanpa virtualenv, tetapi pengaturan tipikal saya bergantung padanya.

Saya pikir intinya adalah rata-rata pengguna Homebrew akan memiliki Python 3.7 secara default.

Saya pikir intinya adalah rata-rata pengguna Homebrew akan memiliki Python 3.7 secara default.

Rilis kecil 0.19.2 yang akan mendukung Python 3.7 sedang berlangsung.

apa timeline untuk rilis 19.2?
Terima kasih!

@sam-s Jika Anda membutuhkannya sekarang, Anda dapat mencoba menginstal cabang master menggunakan versi cython terbaru:

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

Ini bekerja untuk saya di Python 3.7 menggunakan pipenv.
Tentu saja, ketika rilis tersedia, Anda harus menukar dari (mungkin) cabang master yang tidak stabil ke rilis yang benar.

Anda juga dapat menginstal dari cabang 0.19.X yang pada dasarnya siap untuk
rilis, tetapi orang-orang yang dapat membuat rilis belum tersedia.

Rilis 0.19.2 sekarang tersedia di PyPI: https://pypi.org/project/scikit-learn/0.19.2/

Penutupan sebagai tetap. Silakan gunakan 0.19.2 dengan Python 3.7.

Apa rencana untuk 0.20.X? Sepertinya saya bisa membangun dengan 0.20.0, tetapi tidak dengan 0.20.1.
Kesalahan-kesalahan itu seperti:

     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;

Sudahkah Anda mencoba memperbarui Cython seperti yang disebutkan di https://github.com/scikit-learn/scikit-learn/issues/11320#issuecomment -398631435?

Baru saja diperbarui ke 0.20.2 dan berfungsi.

Saya membuat pengalaman bahwa semua versi yang lebih rendah dari 0.20 (misalnya 0.16 , 0.17 , 0.18 , 0.19 ) akan rusak.

Tes saya: https://travis-ci.org/nok/sklearn-porter/builds/561765760

Apakah ada rencana untuk menutupi versi ini?

Saya membuat pengalaman bahwa semua versi yang lebih rendah dari 0.20 (misalnya 0.16, 0.17, 0.18, 0.19) akan rusak.
Apakah ada rencana untuk menutupi versi ini?

Saya tidak berpikir begitu. Pengguna dengan Python 3.7 perlu meningkatkan ke scikit-learn 0.20.X setidaknya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat