Numpy: No se puede importar numpy en la función AWS Lambda

Creado en 4 may. 2019  ·  14Comentarios  ·  Fuente: numpy/numpy

  • cómo instalaste Python
    borré python3 en mi mac y luego brew install python para instalar python 3.7.3
  • cómo instalaste numpy
    Dado que estoy instalando para ejecutar en AWS Lambda, pip install numpy --target .
  • tu sistema operativo
    mac OS Sierra 10.12.6
  • si tiene o no varias versiones de Python instaladas
    el python nativo 2.7.10 todavía está instalado en mi mac
  • si compiló desde la fuente, las versiones de su compilador e idealmente un registro de compilación
    N / A

Entonces puedo ejecutar mi código localmente y no tengo problemas. Soy pandas, matplotlib, boto3 y mpld3 para organizar y mostrar datos en una tabla AWS DDB con gráficos matplotlib que mpld3 convierte en html. numpy parece ser necesario para pandas, y cada vez que intento instalar estas bibliotecas en un directorio de destino para que puedan ejecutarse en una función lambda, de acuerdo con https://docs.aws.amazon.com/lambda/latest/dg/lambda -python-how-to-create-deployment-package.html , aparece el siguiente error:

```IMPORTANTE: ¡LEA ESTO PARA CONSEJOS SOBRE CÓMO RESOLVER ESTE PROBLEMA!

Error al importar el módulo de extensión numpy multiarray. Más
probablemente esté intentando importar una compilación fallida de numpy.
Aquí está cómo proceder:

  • Si está trabajando con un repositorio git numpy, intente git clean -xdf
    (elimina todos los archivos que no están bajo el control de versiones) y reconstruye numpy.
  • Si simplemente está tratando de usar la versión numpy que ha instalado:
    su instalación está rota; reinstale numpy.
  • Si ya reinstaló y eso no solucionó el problema, entonces:

    1. Compruebe que está utilizando el Python que espera (está utilizando /var/lang/bin/python3.6),

      y que no tiene directorios en su PATH o PYTHONPATH que puedan

      interferir con las versiones de Python y numpy que está tratando de usar.

    2. Si (1) se ve bien, puede abrir una nueva edición en

      https://github.com/numpy/numpy/issues. Incluya detalles sobre:



      • cómo instalaste Python


      • cómo instalaste numpy


      • tu sistema operativo


      • si tiene o no varias versiones de Python instaladas


      • si compiló desde la fuente, las versiones de su compilador e idealmente un registro de compilación



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

El error original era: ningún módulo llamado 'numpy.core._multiarray_umath'

FIN ID de solicitud: 2fc65f50-420d-441b-930c-665b1c8ab3ea
INFORME RequestId: 2fc65f50-420d-441b-930c-665b1c8ab3ea Duración: 0,85 ms Duración facturada: 100 ms Tamaño de memoria: 128 MB Memoria máxima utilizada: 40 MB ```

Comentario más útil

Esa guía de AWS no le cuenta toda la historia. La distribución de Amazon Linux no es compatible con una instalación normal de NumPy como PyPi o conda-forge.

Le sugiero que siga una de estas guías o use un archivo zip de uno de estos repositorios:
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-con-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

Este no es un error de NumPy, así que cerraré el problema.

Todos 14 comentarios

Para aislar el problema, volví a intentar lo anterior con:

def main(event, context):

    a = 100
    print(a)
    return

y

import numpy as np

def main(event, context):

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

Ambos archivos se comprimieron en un directorio package que contenía una instalación específica de numpy según https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment- paquete.html. Después de comprimir, los archivos tenían ~ 16 MB, por lo que tenían la instalación numpy. El primer ejemplo que no importó numpy funciona bien al probar la función Lambda, pero el segundo error con el mensaje de error original

Esa guía de AWS no le cuenta toda la historia. La distribución de Amazon Linux no es compatible con una instalación normal de NumPy como PyPi o conda-forge.

Le sugiero que siga una de estas guías o use un archivo zip de uno de estos repositorios:
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-con-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

Este no es un error de NumPy, así que cerraré el problema.

Gracias,

Le agradezco su respuesta. Para su información, pude hacerlo funcionar iniciando una instancia EC2 con el sistema operativo Linux de AWS e instalé las bibliotecas allí. Todo funcionó muy bien.

Gracias por la ayuda,
Sotavento

Obtenga Outlook para iOS https://aka.ms/o0ukef


De: Ralf Gommers [email protected]
Enviado: sábado, 4 de mayo de 2019 6:52 a. m.
Para: numpy/numpy
CC: Lee James; Autor
Asunto: Re: [numpy/numpy] No se puede importar numpy en la función AWS Lambda (#13465)

Esa guía de AWS no le cuenta toda la historia. La distribución de Amazon Linux no es compatible con una instalación normal de NumPy como PyPi o conda-forge.

Le sugiero que siga una de estas guías o use un archivo zip de uno de estos repositorios:
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-2Dde488b2afca6&d= DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=ZKkVD6L0iXq9wAG929BSTIkIAEun9eeS4ZdgU&w1Q
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=PQOBXsoiGwGl3XWjQFqEbAK77Kg9THTSlEZOmLQNiJo&e=
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 y d = DwMCaQ & c = 0hefKdg9jtsMu47wpF0ovg & r = 2qmZ2aA-JTvfrp24tI1PaA & m = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs y s = jm1X8lQ78YL30-NRN2kXnOGAhMS1LKSowIOFQMCpq5Y & e =
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy _ -2Dnumpy&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=708JPsyiAUC0pdCf1QwuLFNzMuusakJ4dEWun=eWun
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=

Este no es un error de NumPy, así que cerraré el problema.


Usted está recibiendo esto porque usted fue el autor del hilo.
Responder a este correo electrónico directamente, lo ven en 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= o silenciar el hilo 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 ¿Conoce alguna tachuela relacionada con python3.7 en esto? Probé un par de su lista de 3.6 y siempre termino con la misma queja sobre _multiarray lib. Necesito hacer una "capa" de AWS ya que la combinación que necesito (numpy, scipy, pandas) excede el tamaño permitido de una sola función.

@iceback si su error fue similar al que tuve, que fue No module named 'numpy.core._multiarray_umath' , esto se debe a que no instaló numpy con el sistema operativo correcto.

AWS lambda ejecutará AWS linux en tiempo de ejecución, por lo que cualquier paquete instalado en el destino debe instalarse con el sistema operativo adecuado. Si tiene como objetivo instalar numpy en un directorio package a través pip install --target ./package numpy y está ejecutando otro sistema operativo (como macOS), esto fallará porque la instalación de destino asume que el El sistema operativo no cambiará de su sistema operativo nativo.

Para evitar esto, tienes dos opciones:

  1. Realice la instalación de destino desde una máquina que ejecuta AWS Linux, como una instancia EC2. Esto funciono muy bien para mi.
  2. Averigüe cómo especificar el sistema operativo en tiempo de ejecución en su comando de instalación de destino. Si encuentra una buena manera de hacer esto, por favor comparta 😄

Tendré que revisar todas las cosas que probé la semana pasada, que incluían @korniichuk y github/pbegle y Dios sabe qué más, pero siempre terminaban en el mismo lugar. Construir numpy en un EC2 no va bien. Quizás la versión incorrecta de Cython (solo 0.27 disponible en aws linux). ¿Puedes dar más detalles sobre tu número 1? ¿Cómo pasa de un numpy instalado en una instancia a una capa en Lambda?

@iceback Sí , esto fue frustrante cuando lo hice por primera vez, pero definitivamente es posible. Actualmente ejecuto funciones Lambda con Python 3.7 con los 3 paquetes que mencionaste.

La forma en que realicé el paso 1 anterior implicó seguir los pasos descritos en Actualización de una función con dependencias adicionales , que se describe aquí . En aras de la simplicidad, supondré que su archivo python local se llama _pony.py_ y la función lambda se invoca con la función _ride_pony_.

  1. Inicie y conéctese a una instancia EC2, como una microinstancia EC2. Encuentre instrucciones aquí . Asegúrese de que la instancia ejecute AWS Linux.
  2. Verifique que python3 esté instalado. Si no está instalado, instálelo con sudo yum install python3 -y
  3. Cree un directorio para sus paquetes locales. mkdir package
  4. Instale las bibliotecas que desea usar en Lambda. Para su información, siempre llamo pip como un módulo para evitar confusiones entre Python2 y Python3 pips. Además, es posible que se prefiera algún orden de instalación en estas instalaciones y que puede valer la pena investigar.
  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. Mover al directorio de instalación con cd package
  9. Comprima el directorio de instalación con zip -r9 ../pony.zip .
  10. Ahora, desde su máquina local , scp _pony.zip_ desde su instancia EC2 a su local con las instrucciones aquí .
  11. Desde tu local , comprime _pony.py_ en _pony.zip_. zip -g pony.zip pony.py . Su archivo zip ahora contiene su código lambda junto con los módulos de python necesarios, que se instalaron para apuntar con un sistema operativo Linux de AWS.
  12. Cargue el archivo zip en S3 (lo que permite funciones lambda más grandes, hasta 50 MB). Si su código es pequeño, puede saltar al paso 10.
  13. Ingrese a su función lambda (o actualice desde CLI) para usar el código en pony.zip para esa función lambda

**Asegúrese de que su función lambda apunte y ejecute su nombre de archivo y función principal, _pony.ride_pony_, si no es la función predeterminada _lambda_function.lambda_handler_

Muchas gracias. ¡Creo que tengo una oportunidad! (Tengo entendido que la parte superior del zip tiene que ser "python" para una capa Lambda, así que la usaré en lugar de "paquete")

¡Grita ese cómo hacerlo en voz alta y con orgullo! No estoy seguro de dónde me equivoqué con la otra sugerencia (aunque eran para python3.6), pero ahora volví a trabajar en mi código de función. Gracias una tonelada.

AWS ahora también publicó una capa que incluye NumPy y SciPy. De https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

_En función de los comentarios de nuestros clientes, y para brindar un ejemplo de cómo usar Lambda Layers, estamos publicando una capa pública que incluye NumPy y SciPy, dos bibliotecas científicas populares para Python. Esta capa preconstruida y optimizada puede ayudarlo a comenzar muy rápidamente con aplicaciones de procesamiento de datos y aprendizaje automático._

Hm, ¿podría haber demasiada documentación AWX? ;)

El 23 de octubre de 2019, a las 4:29 a. m., Ralf Gommers [email protected] escribió:

AWS ahora también publicó una capa que incluye NumPy y SciPy. De https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/ https://aws.amazon.com/blogs /aws/nuevo-para-aws-lambda-utilice-cualquier-lenguaje-de-programación-y-comparta-componentes-comunes/
En función de los comentarios de nuestros clientes y para brindar un ejemplo de cómo usar Lambda Layers, estamos publicando una capa pública que incluye NumPy y SciPy, dos bibliotecas científicas populares para Python. Esta capa preconstruida y optimizada puede ayudarlo a comenzar muy rápidamente con el procesamiento de datos y las aplicaciones de aprendizaje automático.


Estás recibiendo esto porque te mencionaron.
Responder a este correo electrónico directamente, visualizarla en GitHub https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 , o darse de baja https://github.com/notifications/unsubscribe- autenticación/AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ .

Lo que funcionó para mí fue usar una versión de Linux de la biblioteca numpy (uso macOS). Fui a https://pypi.org/project/numpy/#files y descargué el archivo .whl en la versión que estaba buscando (para mí, era numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl) . A continuación, vaya a la terminal y descomprímala haciendo 'unzip numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl'. Esto debería darle la versión numpy que funcionará en Lambda. Luego, comprima todo como lo estaba haciendo antes y cárguelo. Al final, un problema increíblemente frustrante se resolvió de manera bastante simple.

Tuve el mismo problema, la solución que funcionó para mí es que desinstalé numpy de mi PC (Windows 7).
luego agregué una capa en la función aws lambda algo llamado AWSlambda scipy y eso es todo.

Me encontré con el mismo problema con Windows, pero pude resolverlo mediante cualquiera de los siguientes enfoques:

  • Cree Lambda con AWS SAM (Modelo de aplicación sin servidor) ejecutándose en Ubuntu que se ejecuta en WSL (Subsistema de Windows para Linux)
  • Cree Lambda con AWS SAM utilizando el indicador --use-container , que tiene la siguiente explicación en los documentos :

Si sus funciones dependen de paquetes que tienen dependencias compiladas de forma nativa, use esta marca para crear su función dentro de un contenedor Docker similar a AWS Lambda.

¿Fue útil esta página
0 / 5 - 0 calificaciones