Numpy: Tidak dapat mengimpor numpy dalam fungsi AWS Lambda

Dibuat pada 4 Mei 2019  ·  14Komentar  ·  Sumber: numpy/numpy

  • bagaimana Anda menginstal Python
    menghapus python3 di mac saya dan kemudian brew install python untuk menginstal python 3.7.3
  • bagaimana Anda menginstal numpy
    Karena saya menginstal untuk dijalankan di AWS Lambda, pip install numpy --target .
  • sistem operasi Anda
    macOS Sierra 10.12.6
  • apakah Anda memiliki beberapa versi Python yang diinstal
    python asli 2.7.10 masih diinstal di mac saya
  • jika Anda membangun dari sumber, versi kompiler Anda dan idealnya log build
    T/A

Jadi saya dapat menjalankan kode saya secara lokal dan saya tidak memiliki masalah. Saya panda, matplotlib, boto3, dan mpld3 untuk mengatur dan menampilkan data dalam tabel AWS DDB dengan grafik matplotlib yang mpld3 berubah menjadi html. numpy tampaknya diperlukan untuk panda, dan setiap kali saya mencoba menginstal perpustakaan ini ke direktori target sehingga mereka dapat berjalan dalam fungsi lambda, menurut https://docs.aws.amazon.com/lambda/latest/dg/lambda -python-how-to-create-deployment-package.html , saya mendapatkan kesalahan berikut:

```PENTING: HARAP BACA INI UNTUK SARAN CARA MEMECAHKAN MASALAH INI!

Gagal mengimpor modul ekstensi numpy multiarray. Paling
kemungkinan Anda mencoba mengimpor build numpy.
Berikut adalah cara untuk melanjutkan:

  • Jika Anda bekerja dengan repositori numpy git, coba git clean -xdf
    (menghapus semua file yang tidak berada di bawah kontrol versi) dan membangun kembali numpy.
  • Jika Anda hanya mencoba menggunakan versi numpy yang telah Anda instal:
    instalasi Anda rusak - silakan instal ulang numpy.
  • Jika Anda telah menginstal ulang dan itu tidak memperbaiki masalah, maka:

    1. Periksa apakah Anda menggunakan Python yang Anda harapkan (Anda menggunakan /var/lang/bin/python3.6),

      dan Anda tidak memiliki direktori di PATH atau PYTHONPATH Anda yang dapat

      mengganggu versi Python dan numpy yang Anda coba gunakan.

    2. Jika (1) terlihat baik-baik saja, Anda dapat membuka edisi baru di

      https://github.com/numpy/numpy/issues. Harap sertakan detail tentang:



      • bagaimana Anda menginstal Python


      • bagaimana Anda menginstal numpy


      • sistem operasi Anda


      • apakah Anda memiliki beberapa versi Python yang diinstal


      • jika Anda membangun dari sumber, versi kompiler Anda dan idealnya log build



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

Kesalahan asli adalah: Tidak ada modul bernama 'numpy.core._multiarray_umath'

ID Permintaan AKHIR: 2fc65f50-420d-441b-930c-665b1c8ab3ea
REPORT RequestId: 2fc65f50-420d-441b-930c-665b1c8ab3ea Duration: 0.85 ms Billed Duration: 100 ms Ukuran Memori: 128 MB Memori Maks yang Digunakan: 40 MB ```

Komentar yang paling membantu

Panduan AWS itu tidak menceritakan keseluruhan cerita kepada Anda. Distribusi Amazon Linux tidak kompatibel dengan instalasi NumPy biasa seperti dari PyPi atau conda-forge.

Saya sarankan Anda mengikuti salah satu panduan ini atau menggunakan file zip dari salah satu repo ini:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-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

Ini bukan bug NumPy, jadi saya akan menutup masalah ini.

Semua 14 komentar

Untuk mengisolasi masalah, saya mencoba lagi di atas dengan:

def main(event, context):

    a = 100
    print(a)
    return

dan

import numpy as np

def main(event, context):

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

Kedua file di-zip ke direktori package yang berisi instalasi numpy yang ditargetkan menurut https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment- paket.html. Setelah zip, file berukuran ~16MB, jadi mereka memiliki instalasi numpy. Contoh pertama yang tidak mengimpor numpy berjalan dengan baik saat menguji fungsi Lambda, tetapi kesalahan kedua dengan pesan kesalahan asli

Panduan AWS itu tidak menceritakan keseluruhan cerita kepada Anda. Distribusi Amazon Linux tidak kompatibel dengan instalasi NumPy biasa seperti dari PyPi atau conda-forge.

Saya sarankan Anda mengikuti salah satu panduan ini atau menggunakan file zip dari salah satu repo ini:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-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

Ini bukan bug NumPy, jadi saya akan menutup masalah ini.

Terima kasih,

Saya menghargai tanggapan Anda. FYI Saya bisa membuatnya bekerja dengan memulai instance EC2 dengan AWS Linux OS dan menginstal perpustakaan di sana. Semuanya bekerja dengan baik.

Terima kasih untuk bantuannya,
Lee

Dapatkan Outlook untuk iOS https://aka.ms/o0ukef


Dari: Ralf Gommers [email protected]
Dikirim: Sabtu, 4 Mei 2019 06:52
Kepada: numpy/numpy
Cc: Lee James; Pengarang
Subjek: Re: [numpy/numpy] Tidak dapat mengimpor numpy dalam fungsi AWS Lambda (#13465)

Panduan AWS itu tidak menceritakan keseluruhan cerita kepada Anda. Distribusi Amazon Linux tidak kompatibel dengan instalasi NumPy biasa seperti dari PyPi atau conda-forge.

Saya sarankan Anda mengikuti salah satu panduan ini atau menggunakan file zip dari salah satu repo ini:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-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-2Dimage-2Dde488d=2af DowMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=ZKkVD6L0Edw1
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=DwMCaQ&c= 0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=PQOBXsoiGwGl3XWjQF
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 & d = DwMCaQ & c = 0hefKdg9jtsMu47wpF0ovg & r = 2qmZ2aA-JTvfrp24tI1PaA & m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs & s = jm1X8lQ78YL30-NRN2kXnOGAhMS1LKSowIOFQMCpq5Y & e =
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-KgjOittvdP3EKrsYfomhsyi&s=
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=0hefKdg9jtsMu47wpF0ovm -KgjOittvdP3EKrsYfomhs&s=poqmiFo_VPWUjgf2NEI4vBxzANNWtRm3sXSUypHO88w&e=

Ini bukan bug NumPy, jadi saya akan menutup masalah ini.


Anda menerima ini karena Anda yang menulis utas.
Balas email ini secara langsung, melihatnya di GitHub 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= , atau mematikan benang 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 Apakah Anda tahu ada taktik terkait python3.7 tentang ini. Saya sudah mencoba beberapa dari daftar 3.6 Anda dan selalu berakhir dengan keluhan yang sama tentang _multiarray lib. Saya perlu membuat "lapisan" AWS karena kombinasi yang saya butuhkan (numpy,scipy,pandas) melebihi tunjangan ukuran dari satu fungsi.

@iceback jika kesalahan Anda mirip dengan yang saya miliki, yaitu No module named 'numpy.core._multiarray_umath' , ini disebabkan oleh tidak menginstal numpy dengan OS yang benar.

AWS lambda akan menjalankan AWS linux saat runtime, jadi semua paket yang diinstal target harus diinstal dengan OS yang tepat. Jika Anda menargetkan menginstal numpy ke direktori package melalui pip install --target ./package numpy , dan Anda menjalankan OS lain (seperti macOS), maka ini akan gagal karena instalasi target mengasumsikan bahwa OS tidak akan berubah dari OS asli Anda.

Untuk menyiasatinya, Anda memiliki dua opsi:

  1. Lakukan penginstalan target dari mesin yang menjalankan AWS Linux, seperti instans EC2. Ini bekerja sangat baik untuk saya.
  2. Cari tahu cara menentukan OS runtime dalam perintah instal target Anda. Jika Anda menemukan cara yang baik untuk melakukan ini, silakan bagikan

Saya harus meninjau kembali semua hal yang saya coba minggu lalu termasuk @korniichuk dan github/pbegle dan tuan tahu apa lagi tetapi selalu berakhir di tempat yang sama. Membangun numpy pada EC2 tidak berjalan dengan baik. Mungkin versi Cython yang salah (hanya tersedia 0,27 di aws linux). Bisakah Anda menguraikan # 1 Anda. Bagaimana Anda mendapatkan dari numpy yang diinstal pada satu instance ke lapisan di Lambda?

@iceback Ya ini membuat frustrasi ketika saya pertama kali melakukannya, tapi itu pasti mungkin. Saat ini saya menjalankan fungsi Lambda dengan Python 3.7 dengan 3 paket yang Anda sebutkan.

Bagaimana saya melakukan langkah 1. di atas terlibat mengikuti langkah-langkah yang diuraikan dalam Memperbarui Fungsi dengan Dependensi Tambahan , dijelaskan di sini . Demi kesederhanaan, saya akan berasumsi bahwa file python lokal Anda bernama _pony.py_ dan fungsi lambda_ dipanggil dengan fungsi _ride_pony_.

  1. Luncurkan dan sambungkan ke instans EC2, seperti instans mikro EC2. Temukan petunjuk di sini . Pastikan instans menjalankan AWS Linux.
  2. Periksa apakah python3 diinstal. Jika tidak diinstal, instal dengan sudo yum install python3 -y
  3. Buat direktori untuk paket lokal Anda. mkdir package
  4. Instal pustaka yang ingin Anda gunakan di Lambda. FYI Saya selalu memanggil pip sebagai modul untuk menghindari kebingungan antara Python2 dan Python3 pips. Juga, beberapa urutan instalasi mungkin lebih disukai dalam instalasi ini dan itu mungkin perlu diteliti.
  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. Pindah ke direktori instalasi dengan cd package
  9. Zip direktori instalasi dengan zip -r9 ../pony.zip .
  10. Sekarang, dari mesin lokal Anda, scp _pony.zip_ dari instans EC2 Anda ke lokal Anda dengan petunjuk di sini .
  11. Dari lokal Anda, zip _pony.py_ ke _pony.zip_. zip -g pony.zip pony.py . File zip Anda sekarang berisi kode lambda Anda bersama dengan modul python yang diperlukan, yang diinstal untuk menargetkan dengan OS Linux AWS.
  12. Unggah file zip ke S3 (yang memungkinkan fungsi lambda lebih besar, hingga 50 MB). Jika kode Anda kecil, Anda dapat melompat ke langkah 10.
  13. Masuk ke fungsi lambda Anda (atau perbarui dari CLI) untuk menggunakan kode di pony.zip untuk fungsi lambda itu

**Pastikan bahwa fungsi lambda Anda menunjuk ke & menjalankan nama file dan fungsi utama Anda, _pony.ride_pony_, jika itu bukan _lambda_function.lambda_handler_ default

Terima kasih banyak. Saya percaya saya punya kesempatan! (Pemahaman saya adalah bahwa bagian atas Zip harus "python" untuk lapisan Lambda jadi saya akan menggunakannya sebagai ganti "paket")

Teriakkan cara itu dengan lantang dan bangga! Tidak yakin di mana saya melanggar saran lain (meskipun itu untuk python3.6) tetapi saya sekarang kembali mengerjakan kode fungsi saya. Terima kasih banyak.

AWS sekarang juga menerbitkan lapisan yang mencakup NumPy dan SciPy. Dari https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

_Berdasarkan umpan balik pelanggan kami, dan untuk memberikan contoh cara menggunakan Lapisan Lambda, kami menerbitkan lapisan publik yang mencakup NumPy dan SciPy, dua perpustakaan ilmiah populer untuk Python. Lapisan yang telah dibuat sebelumnya dan dioptimalkan ini dapat membantu Anda memulai dengan sangat cepat dengan pemrosesan data dan aplikasi pembelajaran mesin._

Hm, mungkinkah ada terlalu banyak dokumentasi AWX? ;)

Pada 23 Oktober 2019, pukul 04.29, Ralf Gommers [email protected] menulis:

AWS sekarang juga menerbitkan lapisan yang mencakup NumPy dan SciPy. Dari 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-programming-language-and-share-common-components/
Berdasarkan umpan balik pelanggan kami, dan untuk memberikan contoh cara menggunakan Lapisan Lambda, kami menerbitkan lapisan publik yang mencakup NumPy dan SciPy, dua perpustakaan ilmiah populer untuk Python. Lapisan yang telah dibuat sebelumnya dan dioptimalkan ini dapat membantu Anda memulai dengan sangat cepat dengan pemrosesan data dan aplikasi pembelajaran mesin.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, melihatnya di GitHub https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 , atau berhenti berlangganan https://github.com/notifications/unsubscribe- auth/AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ .

Apa yang berhasil bagi saya adalah menggunakan versi Linux dari perpustakaan numpy (saya menggunakan macOS). Saya pergi ke https://pypi.org/project/numpy/#files dan mengunduh file .whl dalam versi yang saya cari (bagi saya, itu numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl) . Selanjutnya masuk ke terminal dan unzip dengan melakukan 'unzip numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl'. Ini akan memberi Anda versi numpy yang akan berfungsi di Lambda. Kemudian, zip semuanya seperti yang Anda lakukan sebelumnya dan unggah. Pada akhirnya masalah yang sangat membuat frustrasi diselesaikan dengan cukup sederhana.

Saya memiliki masalah yang sama, solusi yang berhasil untuk saya adalah saya menghapus numpy dari pc saya, (windows 7).
daripada saya menambahkan lapisan dalam fungsi aws lambda sesuatu yang disebut AWSlambda scipy dan hanya itu.

Saya mengalami masalah yang sama dengan Windows tetapi dapat menyelesaikannya dengan salah satu pendekatan berikut:

  • Bangun Lambda dengan AWS SAM (Model Aplikasi Tanpa Server) yang berjalan di Ubuntu yang berjalan di WSL (Subsistem Windows untuk Linux)
  • Bangun Lambda dengan AWS SAM menggunakan flag --use-container , yang memiliki penjelasan berikut dalam dokumen :

Jika fungsi Anda bergantung pada paket yang memiliki dependensi yang dikompilasi secara asli, gunakan flag ini untuk membangun fungsi Anda di dalam wadah Docker seperti AWS Lambda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat