Scikit-learn: فشل `تثبيت النقطة` (خطأ في التحويل البرمجي) في Python 3.7rc1

تم إنشاؤها على ١٩ يونيو ٢٠١٨  ·  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 كومينتر

شكرا على الإبلاغ عن هذا!

هل يعمل تثبيت أحدث إصدار من المطورين؟

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 في الإصدار 0.20.0 ، ولكن يجب التعامل معه في إصدار إصلاح الأخطاء (0.20.1 أو 0.20.2) ، نظرًا للدعم المحدود في SciPy و Six (https://github.com / بنيامينب / ستة / سحب / 241).

IMO ، لا يجب أن نقلق بشأن دعم Python 3.7 في الإصدار 0.20.0 ، ولكن يجب التعامل معه في إصدار إصلاح الأخطاء (0.20.1 أو 0.20.2) ،

لتلخيص وضع Python 3.7 ،

تمتلك SciPy الآن عجلات ثنائية لـ Python 3.7 (جميع الأنظمة الأساسية).

يحدد FWIW ، # 11409 أنه يمكننا البناء باستخدام إصدارات التطوير من numpy و scipy و cython ، وجميع الاختبارات تجتاز (وإن كان ذلك مع PendingDeprecationWarning and DeprecationWarning). لا يحاول تشغيل معرض الأمثلة ، بالرغم من ذلك. ولا يحاول البناء في Windows (ربما ينبغي).

homebrew بترقيتي إلى لغة python 3.7.0 وتركتني الآن بدون scikit-learn.
متى تعتقد أنني سأتمكن من القيام بـ pip3 install scikit-learn ؟ أسبوع؟ شهر؟ سنة؟
أحتاج إلى هذه المعلومات لاتخاذ قرار بشأن الانتظار أو الرجوع إلى الإصدار 3.6. *.
شكرا جزيلا لك.

متى تعتقد أنني سأتمكن من تثبيت pip3 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:
تثبيت النقطة 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 info python3
brew switch python 3.6.5

يعمل هذا فقط في حالة استمرار تخزين الإصدار السابق مؤقتًا على الجهاز المحلي.

bgyarfas إذا لم يكن لديك 3.6 مخبأ في البيرة ، يمكنك استخدام pyenv. ما يلي يعمل بالنسبة لي ...

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 التقييمات