أهلا،
عندما أكتب: "from numpy import *" من الكود وأنفذ الكود ، فحينها أواجه الخطأ التالي:
Traceback (most recent call last):
ملف "rgbtoyuv.py" ، السطر 2 ، بتنسيق
استيراد numpy كـ np
ملف "/usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/__init__.py" ، السطر 163 ، في
من عند . استيراد عشوائي
ملف "/usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/random/__init__.py" ، السطر 99 ، في
من استيراد mtrand *
خطأ الاستيراد: /usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/random/mtrand.cpython-35m-x86_64-linux-gnu.so : الرمز غير المحدد: PyFPE_jbuf
النظام الأساسي ubuntu16.04 x86_64
إصدار بيثون: 3.5.2
الإصدار numpy الإصدار: 1.9.0 أيضًا ، لكن التثبيت فشل.
الرجاء مساعدتي في العثور على السبب ، شكرا جزيلا.
من أين حصلت على numpy؟ راجع للشغل ، يجب طرح أسئلة مثل هذه في القائمة البريدية ، مشكلات github مخصصة للأخطاء
يبدو وكأنه تقرير الشوائب لي؟
بعض القرائن على ما يحدث هنا:
يحتوي CPython على بعض الرموز الاختيارية للقبض على SIGFPE وتحويله إلى استثناء. لاستخدامها ، يمكنك التفاف حسابات النقطة العائمة على مستوى C في PyFPE_START_PROTECT
/ PyFPE_END_PROTECT
. إذا تم تجميع CPython باستخدام --with-fpectl
(والذي يتوافق مع وجود #define WANT_SIGFPE_HANDLER
في pyconfig.h
) ، فسيتم تصدير PyFPE_jbuf
كرمز عام ، ويتم توسيع وحدات الماكرو هذه في بعض الأشياء الذكية التي تشير إلى هذا الرمز. إذا تم تجميع CPython بدون --with-fpectl
، فلن يتم تصدير الرمز وتصبح وحدات الماكرو no-ops. هذا يعني أن CPython يحتوي بالفعل على ABI مختلف وغير متوافق اعتمادًا على ما إذا كان قد تم تجميعه باستخدام أو بدون --with-fpectl
. مرح.
(يبدو أنه يمكنك التحقق من نوع CPython الذي لديك عن طريق القيام بـ import fpectl
- إذا نجح ذلك ، فلديك --with-fpectl
CPython.)
Numpy نفسها لا تستخدم وحدات الماكرو هذه. لكن الكود الذي تم إنشاؤه بواسطة Cython يستخدمها.
الخلاصة: إذا قمت بتجميع وحدة Cython باستخدام CPython الذي تم إنشاؤه باستخدام --with-fpectl
، فسوف يتعطل عند محاولة تشغيله على CPython الذي تم إنشاؤه بدون --with-fpectl
.
فحص سريع لبعض إصدارات linux CPython الشائعة لمعرفة أي منها يستخدم --with-fpectl
:
@ kevinzhai80 : هل قمت ببعض المصادفة ببناء numpy من المصدر لسبب ما ، باستخدام Python المثبت على Ubuntu ، ثم حاولت استيراده من Python المثبتة على Conda؟
مرحبا نجسميث ،
شكرا لمعلوماتك ، تم حل هذه المشكلة.
شكرا نجسميث. أيضًا: Ubuntu 17.10 no . الترقية تسببت في الخطأ:
$ بيثون
Python 2.7.14 (افتراضي ، 23 سبتمبر 2017 ، 22:06:14)
[GCC 7.2.0] على linux2
اكتب "مساعدة" أو "حقوق طبع ونشر" أو "ائتمانات" أو "ترخيص" لمزيد من المعلومات.
استيراد fpectl
Traceback (آخر مكالمة أخيرة):
ملف ""، السطر 1 ، في
ImportError: لا توجد وحدة باسم fpectl
التعليق الأكثر فائدة
يبدو وكأنه تقرير الشوائب لي؟
بعض القرائن على ما يحدث هنا:
يحتوي CPython على بعض الرموز الاختيارية للقبض على SIGFPE وتحويله إلى استثناء. لاستخدامها ، يمكنك التفاف حسابات النقطة العائمة على مستوى C في
PyFPE_START_PROTECT
/PyFPE_END_PROTECT
. إذا تم تجميع CPython باستخدام--with-fpectl
(والذي يتوافق مع وجود#define WANT_SIGFPE_HANDLER
فيpyconfig.h
) ، فسيتم تصديرPyFPE_jbuf
كرمز عام ، ويتم توسيع وحدات الماكرو هذه في بعض الأشياء الذكية التي تشير إلى هذا الرمز. إذا تم تجميع CPython بدون--with-fpectl
، فلن يتم تصدير الرمز وتصبح وحدات الماكرو no-ops. هذا يعني أن CPython يحتوي بالفعل على ABI مختلف وغير متوافق اعتمادًا على ما إذا كان قد تم تجميعه باستخدام أو بدون--with-fpectl
. مرح.(يبدو أنه يمكنك التحقق من نوع CPython الذي لديك عن طريق القيام بـ
import fpectl
- إذا نجح ذلك ، فلديك--with-fpectl
CPython.)Numpy نفسها لا تستخدم وحدات الماكرو هذه. لكن الكود الذي تم إنشاؤه بواسطة Cython يستخدمها.
الخلاصة: إذا قمت بتجميع وحدة Cython باستخدام CPython الذي تم إنشاؤه باستخدام
--with-fpectl
، فسوف يتعطل عند محاولة تشغيله على CPython الذي تم إنشاؤه بدون--with-fpectl
.فحص سريع لبعض إصدارات linux CPython الشائعة لمعرفة أي منها يستخدم
--with-fpectl
:@ kevinzhai80 : هل قمت ببعض المصادفة ببناء numpy من المصدر لسبب ما ، باستخدام Python المثبت على Ubuntu ، ثم حاولت استيراده من Python المثبتة على Conda؟