Numpy: تعذر استيراد numpy في دالة AWS Lambda

تم إنشاؤها على ٤ مايو ٢٠١٩  ·  14تعليقات  ·  مصدر: numpy/numpy

  • كيف قمت بتثبيت بايثون
    حذف python3 من جهاز Mac الخاص بي ثم حذفه brew install python لتثبيت python 3.7.3
  • كيف قمت بتثبيت numpy
    نظرًا لأنني أقوم بالتثبيت للتشغيل على AWS Lambda ، pip install numpy --target .
  • نظام التشغيل الخاص بك
    macOS Sierra 10.12.6
  • سواء كان لديك إصدارات متعددة من Python مثبتة أم لا
    لا يزال برنامج python 2.7.10 الأصلي مثبتًا على جهاز Mac الخاص بي
  • إذا كنت قد بنيت من المصدر ، فإن إصدارات برنامج التحويل البرمجي الخاص بك وسجل بناء مثالي
    غير متاح

لذلك أنا قادر على تشغيل الكود الخاص بي محليًا وليس لدي أي مشاكل. أنا حيوانات الباندا و matplotlib و boto3 و mpld3 لتنظيم البيانات وعرضها في جدول AWS DDB مع الرسوم البيانية matplotlib التي يتحول mpld3 إلى html. يبدو أن numpy ضروري للباندا ، وكلما حاولت تثبيت هذه المكتبات على دليل الهدف حتى يتمكنوا من العمل في وظيفة lambda ، وفقًا لـ https://docs.aws.amazon.com/lambda/latest/dg/lambda -python-how-to-create-publish-package.html ، أتلقى الخطأ التالي:

"مهم: يرجى قراءة هذا للحصول على نصيحة حول كيفية حل هذه المشكلة!

فشل استيراد الوحدة النمطية للملحق متعدد الصفائح. معظم
من المحتمل أنك تحاول استيراد بنية فاشلة من numpy.
إليك كيفية المتابعة:

  • إذا كنت تعمل مع مستودع git numpy ، فجرّب git clean -xdf
    (يزيل جميع الملفات التي لا تخضع للتحكم في الإصدار) ويعيد إنشاء ملفات numpy.
  • إذا كنت تحاول ببساطة استخدام الإصدار numpy الذي قمت بتثبيته:
    التثبيت معطل - الرجاء إعادة تثبيت numpy.
  • إذا كنت قد أعدت التثبيت بالفعل ولم يؤد ذلك إلى حل المشكلة ، فعندئذٍ:

    1. تأكد من أنك تستخدم لغة Python التي تتوقعها (أنت تستخدم /var/lang/bin/python3.6) ،

      وأنه ليس لديك أدلة في PATH أو PYTHONPATH الخاص بك

      تتداخل مع إصدارات Python و numpy التي تحاول استخدامها.

    2. إذا كان (1) يبدو جيدًا ، يمكنك فتح إصدار جديد في

      https://github.com/numpy/numpy/issues. الرجاء تضمين تفاصيل عن:



      • كيف قمت بتثبيت بايثون


      • كيف قمت بتثبيت numpy


      • نظام التشغيل الخاص بك


      • سواء كان لديك إصدارات متعددة من Python مثبتة أم لا


      • إذا كنت قد بنيت من المصدر ، فإن إصدارات برنامج التحويل البرمجي الخاص بك وسجل بناء مثالي



 Note: this error has many possible causes, so please don't comment on
 an existing issue about this - open a new one instead.

الخطأ الأصلي كان: لا توجد وحدة باسم "numpy.core._multiarray_umath"

معرّف طلب النهاية: 2fc65f50-420d-441b-930c-665b1c8ab3ea
معرّف طلب التقرير: 2fc65f50-420d-441b-930c-665b1c8ab3ea المدة: 0.85 مللي ثانية المدة: 100 مللي ثانية حجم الذاكرة: 128 ميجا بايت الحد الأقصى للذاكرة المستخدمة: 40 ميجا بايت ""

التعليق الأكثر فائدة

لا يخبرك دليل AWS بالقصة كاملة. توزيع Amazon Linux غير متوافق مع تثبيت NumPy العادي مثل PyPi أو conda-forge.

أقترح عليك اتباع أحد هذه الأدلة أو استخدام ملف مضغوط من أحد هذه المستودعات:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-publish-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

هذا ليس خطأ NumPy ، لذلك سأغلق المشكلة.

ال 14 كومينتر

لعزل المشكلة ، أعدت المحاولة أعلاه باستخدام:

def main(event, context):

    a = 100
    print(a)
    return

و

import numpy as np

def main(event, context):

    a = np.array(100)
    print(a)
    return

تم ضغط كلا الملفين بدليل package يحتوي على تثبيت مستهدف لـ numpy وفقًا لـ https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment- package.html. بعد الضغط ، كانت الملفات حوالي 16 ميغا بايت ، لذلك كان لديهم تثبيت غير مكتمل. المثال الأول الذي لم يستورد numpy يعمل بشكل جيد عند اختبار وظيفة Lambda ، لكن الأخطاء الثانية مع رسالة الخطأ الأصلية

لا يخبرك دليل AWS بالقصة كاملة. توزيع Amazon Linux غير متوافق مع تثبيت NumPy العادي مثل PyPi أو conda-forge.

أقترح عليك اتباع أحد هذه الأدلة أو استخدام ملف مضغوط من أحد هذه المستودعات:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-publish-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

هذا ليس خطأ NumPy ، لذلك سأغلق المشكلة.

شكرا،

أنا أقدر ردك. لمعلوماتك ، تمكنت من تشغيله من خلال بدء مثيل EC2 مع AWS Linux OS وتثبيت المكتبات هناك. كل شيء يعمل بشكل رائع.

شكرا للمساعدة،
لي

احصل على Outlook لنظام التشغيل iOS https://aka.ms/o0ukef


من: Ralf Gommers [email protected]
تاريخ الإرسال: السبت 4 مايو 2019 الساعة 6:52 صباحًا
إلى: numpy / numpy
نسخة إلى: لي جيمس ؛ مؤلف
الموضوع: Re: [numpy / numpy] تعذر استيراد numpy في وظيفة AWS Lambda (# 13465)

لا يخبرك دليل AWS بالقصة كاملة. توزيع Amazon Linux غير متوافق مع تثبيت NumPy العادي مثل PyPi أو conda-forge.

أقترح عليك اتباع أحد هذه الأدلة أو استخدام ملف مضغوط من أحد هذه المستودعات:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-publish-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6 https: // urldefense. proofpoint.com/v2/url؟u=https-3A__medium.com_-40samme_setting-2Dup-2Dpython-2D3-2D6-2Daws-2Dlambda-2Ddeployment-2Dpackage-2Dwith-2Dnumpy-2Dscipy-2Dpillow-2Dand-2Dscikit-28Dimage DwMCaQ & c = 0hefKdg9jtsMu47wpF0ovg & r = 2qmZ2aA-JTvfrp24tI1PaA & m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYFomhs & s = ZKkVD4AE
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e https://urldefense.proofpoint.com/v2/url؟u=https-3A__medium.com_-40korniichuk_lambda-2Dwith-2Dpandas-2Dfd81aa2ff25e&d=DwM 0hefKdg9jtsMu47wpF0ovg & r = 2qmZ2aA-JTvfrp24tI1PaA & m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs & s = PQOBXsoiGwGl3QBTI
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9 https://urldefense.proofpoint.com/v2/url؟u=https -3A__blog.orikami.nl_building-2Dscipy-2Dpandas-2Dand-2Dnumpy-2Dfor-2Daws-2Dlambda-2Dpython-2D3-2D6-2Dcba9355b44e9 ود = DwMCaQ وج = 0hefKdg9jtsMu47wpF0ovg وص = 2qmZ2aA-JTvfrp24tI1PaA وم = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs وق = jm1X8lQ78YL30-NRN2kXnOGAhMS1LKSowIOFQMCpq5Y وه =
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy https://urldefense.proofpoint.com/v2/url؟u=https-3A__github.com_pbegle_aws-2Dlambda-2Dpy3.6-2Dpandas -2Dnumpy & d = DwMCaQ & c = 0hefKdg9jtsMu47wpF0ovg & r = 2qmZ2aA-JTvfrp24tI1PaA & m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYifom1
https://github.com/vitolimandibhrata/aws-lambda-numpy https://urldefense.proofpoint.com/v2/url؟u=https-3A__github.com_vitolimandibhrata_aws-2Dlambda-2Dnumpy&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z -KgjOittvdP3EKrsYfomhs & s = poqmiFo_VPWUjgf2NEI4vBxzANNWtRm3sXSUypHO88w & e =

هذا ليس خطأ NumPy ، لذلك سأغلق المشكلة.

-
أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
الرد على هذا البريد الإلكتروني مباشرة، مشاهدته على جيثب https://urldefense.proofpoint.com/v2/url؟u=https-3A__github.com_numpy_numpy_issues_13465-23issuecomment-2D489329007&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=J7VXklMAkObDeLGzi_DueXIZ7gya0qrVm9tZhLH9dzI&e= ، أو كتم موضوع https://urldefense.proofpoint.com/v2/url؟u=https-3A__github.com_notifications_unsubscribe-2Dauth_AHKHI4N5E7XURJJTX7INB6LPTWIJVANCNFSM4HKX25DQ&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=zMXEEFbVt2bm8P0Cn2aJbHDaSdV0ABZ_hgsaB2AWUWg&e= .

rgommers هل تعرف أي مسامير ذات صلة بـ python3.7 على هذا. لقد جربت زوجًا من قائمتك 3.6 وينتهي بي الأمر دائمًا بنفس الحزن حول _multiarray lib. أحتاج إلى إنشاء "طبقة" AWS نظرًا لأن المجموعة التي أحتاجها (numpy ، scipy ، pandas) تتجاوز بدل الحجم لوظيفة واحدة.

iceback إذا كان خطأك مشابهًا لما كان لدي ، والذي كان No module named 'numpy.core._multiarray_umath' ، فإن السبب في ذلك هو عدم تثبيت numpy مع نظام التشغيل الصحيح.

ستقوم AWS lambda بتشغيل AWS linux في وقت التشغيل ، لذلك يجب تثبيت أي حزم مستهدفة مع نظام التشغيل المناسب. إذا كنت تستهدف تثبيت numpy على دليل package عبر pip install --target ./package numpy ، وكنت تقوم بتشغيل نظام تشغيل آخر (مثل macOS) ، فسيفشل هذا لأن التثبيت الهدف يفترض أن لن يتغير نظام التشغيل من نظام التشغيل الأصلي الخاص بك.

للتغلب على هذا ، لديك خياران:

  1. قم بإجراء التثبيت المستهدف من جهاز يعمل بنظام AWS Linux ، مثل مثيل EC2. هذا عمل عظيم بالنسبة لي.
  2. اكتشف كيفية تحديد وقت التشغيل OS في أمر التثبيت الهدف الخاص بك. إذا وجدت طريقة جيدة للقيام بذلك ، يرجى مشاركة 😄

سأضطر إلى إعادة زيارة جميع الأشياء التي جربتها الأسبوع الماضي والتي تضمنت korniichuk و github / pbegle والورد يعرف ماذا أيضًا ولكن انتهى به الأمر دائمًا في نفس المكان. البناء غير المستقر على EC2 لا يسير على ما يرام. ربما يكون إصدار Cython خاطئًا (يتوفر 0.27 فقط على نظام AWS Linux). هل يمكنك توضيح رقمك الأول. كيف يمكنك الانتقال من numpy مثبت في مثيل واحد إلى طبقة في Lambda؟

iceback Ya كان هذا محبطًا عندما فعلت ذلك لأول مرة ، لكنه ممكن بالتأكيد. أقوم حاليًا بتشغيل وظائف Lambda مع Python 3.7 مع الحزم الثلاثة التي ذكرتها.

كيف قمت بتنفيذ الخطوة 1. أعلاه تضمنت اتباع الخطوات الموضحة في تحديث وظيفة مع التبعيات الإضافية ، الموضحة هنا . من أجل التبسيط ، سأفترض أن ملف python المحلي الخاص بك يسمى _pony.py_ ويتم استدعاء وظيفة lambda_ مع وظيفة _ride_pony_.

  1. قم بتشغيل مثيل EC2 والاتصال به ، مثل مثيل EC2 الصغير. اعثر على التعليمات هنا . تأكد من أن المثيل يعمل على AWS Linux.
  2. تأكد من تثبيت python3. إذا لم يتم تثبيته ، فقم بتثبيته بـ sudo yum install python3 -y
  3. قم بعمل دليل لحزمك المحلية. mkdir package
  4. ثبّت المكتبات التي تريد استخدامها في Lambda. لمعلوماتك ، فأنا دائمًا ما أستدعي pip كوحدة نمطية لتجنب الخلط بين نقاط Python2 و Python3. أيضًا ، قد يُفضل بعض أوامر التثبيت في هذه التثبيتات وقد يكون ذلك يستحق البحث.
  5. python3 -m pip install --target ./package numpy
  6. python3 -m pip install --target ./package pandas
  7. python3 -m pip install --target ./package scipy
  8. انتقل إلى دليل التثبيت باستخدام cd package
  9. اضغط دليل التثبيت باستخدام zip -r9 ../pony.zip .
  10. الآن ، من جهازك المحلي ، scp _pony.zip_ من مثيل EC2 إلى منطقتك مع الاتجاهات هنا .
  11. من موقعك المحلي ، اضغط _pony.py_ إلى _pony.zip_. zip -g pony.zip pony.py . يحتوي ملف zip الخاص بك الآن على كود lambda الخاص بك إلى جانب وحدات python النمطية المطلوبة ، والتي تم تثبيتها لاستهداف نظام التشغيل AWS Linux OS.
  12. قم بتحميل الملف المضغوط إلى S3 (والذي يسمح بوظائف lambda أكبر ، حتى 50 ميجابايت). إذا كان الرمز الخاص بك صغيرًا ، فيمكنك التخطي إلى الخطوة 10.
  13. انتقل إلى وظيفة lambda (أو قم بالتحديث من CLI) لاستخدام الكود الموجود في pony.zip لوظيفة lambda تلك

** تأكد من أن دالة lambda الخاصة بك تشير إلى & تقوم بتنفيذ اسم الملف والوظيفة الرئيسية ، _pony.ride_pony_ ، إذا لم تكن الوظيفة الافتراضية _lambda_function.lambda_handler_

شكرا جزيلا. أعتقد أن لدي فرصة! (ما أفهمه هو أن الجزء العلوي من zip يجب أن يكون "python" لطبقة Lambda ، لذا سأستخدمها بدلاً من "package")

أصرخ بهذا الكيفية بصوت عالٍ وفخور! لست متأكدًا من المكان الذي تعارضت فيه مع الاقتراح الآخر (على الرغم من أنها كانت من أجل python3.6) لكنني عدت الآن إلى العمل على كود وظيفتي. شكرا جزيلا.

نشرت AWS الآن أيضًا طبقة تتضمن NumPy و SciPy. من https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

_ استنادًا إلى ملاحظات العملاء ، ولتقديم مثال على كيفية استخدام Lambda Layers ، فإننا ننشر طبقة عامة تتضمن NumPy و SciPy ، وهما مكتبتان علميتان شائعتان في Python. يمكن أن تساعدك هذه الطبقة المُنشأة مسبقًا والمُحسَّنة على البدء بسرعة كبيرة في معالجة البيانات وتطبيقات التعلم الآلي.

حسنًا ، هل يمكن أن يكون هناك الكثير من وثائق AWX؟ ؛)

في 23 تشرين الأول (أكتوبر) 2019 ، الساعة 4:29 صباحًا ، كتب Ralf Gommers [email protected] :

نشرت AWS الآن أيضًا طبقة تتضمن NumPy و SciPy. من https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/ https://aws.amazon.com/blogs / aws / new-for-aws-lambda-use-any-program-language-and-share-common-features /
استنادًا إلى ملاحظات العملاء ، ولتقديم مثال على كيفية استخدام Lambda Layers ، نقوم بنشر طبقة عامة تتضمن NumPy و SciPy ، وهما مكتبتان علميتان شائعتان في Python. يمكن أن تساعدك هذه الطبقة المُنشأة مسبقًا والمُحسَّنة على البدء بسرعة كبيرة في معالجة البيانات وتطبيقات التعلم الآلي.

-
أنت تتلقى هذا لأنه تم ذكرك.
الرد على هذا البريد الإلكتروني مباشرة، مشاهدته على جيثب https://github.com/numpy/numpy/issues/13465؟email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 ، أو إلغاء الاشتراك https://github.com/notifications/unsubscribe- المصادقة / AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ .

ما نجح بالنسبة لي هو استخدام إصدار Linux من مكتبة numpy (أستخدم macOS). ذهبت إلى https://pypi.org/project/numpy/#files وقمت بتنزيل ملف .whl في الإصدار الذي كنت أبحث عنه (بالنسبة لي ، كان numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl) . انتقل بعد ذلك إلى المحطة الطرفية وقم بفك ضغطها عن طريق إجراء "unzip numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl". يجب أن يمنحك هذا الإصدار المجزأ الذي سيعمل على Lambda. بعد ذلك ، قم بضغط كل شيء كما كنت تفعل من قبل وقم بتحميله. في النهاية تم حل مشكلة محبطة بشكل لا يصدق بكل بساطة.

واجهت نفس المشكلة ، الحل الذي نجح معي هو أنني قمت بإلغاء تثبيت numpy من جهاز الكمبيوتر الخاص بي ، (windows 7).
مما أضفت طبقة في دالة aws lambda شيئًا يسمى AWSlambda scipy وهذا كل شيء.

واجهت نفس المشكلة مع Windows ولكنني تمكنت من حلها بأي من الطرق التالية:

  • قم ببناء Lambda باستخدام AWS SAM (نموذج تطبيق بدون خادم) يعمل على Ubuntu الذي يعمل على WSL (نظام Windows الفرعي لنظام Linux)
  • قم ببناء Lambda باستخدام AWS SAM باستخدام علامة --use-container ، والتي تحتوي على الشرح التالي في المستندات :

إذا كانت وظائفك تعتمد على الحزم التي تحتوي على تبعيات مجمعة في الأصل ، فاستخدم هذه العلامة لبناء وظيفتك داخل حاوية Docker تشبه AWS Lambda.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات