Numpy: Não é possível importar numpy na função AWS Lambda

Criado em 4 mai. 2019  ·  14Comentários  ·  Fonte: numpy/numpy

  • como você instalou o Python
    deletei python3 no meu mac e depois brew install python para instalar o python 3.7.3
  • como você instalou o numpy
    Como estou instalando para rodar no AWS Lambda, pip install numpy --target .
  • seu sistema operacional
    macOS Sierra 10.12.6
  • se você tem ou não várias versões do Python instaladas
    o python 2.7.10 nativo ainda está instalado no meu mac
  • se você construiu a partir da fonte, suas versões do compilador e, idealmente, um log de compilação
    N / D

Assim, consigo executar meu código localmente e não tenho problemas. Eu sou pandas, matplotlib, boto3 e mpld3 para organizar e exibir dados em uma tabela DDB da AWS com gráficos matplotlib que o mpld3 transforma em html. numpy parece ser necessário para pandas e sempre que tento instalar essas bibliotecas em um diretório de destino para que possam ser executadas em uma função lambda, de acordo com https://docs.aws.amazon.com/lambda/latest/dg/lambda -python-how-to-create-deployment-package.html , recebo o seguinte erro:

```IMPORTANTE: POR FAVOR, LEIA ISTO PARA CONSELHOS SOBRE COMO RESOLVER ESTE PROBLEMA!

A importação do módulo de extensão numpy multiarray falhou. Maioria
provavelmente você está tentando importar uma compilação com falha de numpy.
Aqui está como proceder:

  • Se você estiver trabalhando com um repositório git numpy, tente git clean -xdf
    (remove todos os arquivos que não estão sob controle de versão) e reconstrua o numpy.
  • Se você está simplesmente tentando usar a versão numpy que você instalou:
    sua instalação está quebrada - reinstale o numpy.
  • Se você já reinstalou e isso não resolveu o problema, então:

    1. Verifique se você está usando o Python esperado (você está usando /var/lang/bin/python3.6),

      e que você não tem diretórios em seu PATH ou PYTHONPATH que possam

      interferir com as versões Python e numpy que você está tentando usar.

    2. Se (1) parece bom, você pode abrir um novo problema em

      https://github.com/numpy/numpy/issues. Inclua detalhes sobre:



      • como você instalou o Python


      • como você instalou o numpy


      • seu sistema operacional


      • se você tem ou não várias versões do Python instaladas


      • se você construiu a partir da fonte, suas versões do compilador e, idealmente, um log de compilação



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

O erro original era: Nenhum módulo chamado 'numpy.core._multiarray_umath'

END RequestId: 2fc65f50-420d-441b-930c-665b1c8ab3ea
REPORT RequestId: 2fc65f50-420d-441b-930c-665b1c8ab3ea Duração: 0,85 ms Duração faturada: 100 ms Tamanho da memória: 128 MB Memória máxima usada: 40 MB ```

Comentários muito úteis

Esse guia da AWS não está contando toda a história. A distribuição do Amazon Linux não é compatível com uma instalação normal do NumPy, como do PyPi ou conda-forge.

Sugiro que você siga um desses guias ou use um arquivo zip de um desses repositórios:
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

Este não é um bug do NumPy, então fecharei o problema.

Todos 14 comentários

Para isolar o problema, tentei o acima com:

def main(event, context):

    a = 100
    print(a)
    return

e

import numpy as np

def main(event, context):

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

Ambos os arquivos foram compactados em um diretório package contendo uma instalação direcionada do numpy de acordo com https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment- pacote.html. Após a compactação, os arquivos ficaram com ~ 16 MB, então eles tiveram a instalação numpy. O primeiro exemplo que não importou numpy funciona bem ao testar a função Lambda, mas o segundo erro com a mensagem de erro original

Esse guia da AWS não está contando toda a história. A distribuição do Amazon Linux não é compatível com uma instalação normal do NumPy, como do PyPi ou conda-forge.

Sugiro que você siga um desses guias ou use um arquivo zip de um desses repositórios:
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

Este não é um bug do NumPy, então fecharei o problema.

Obrigado,

Eu aprecio sua resposta. Para sua informação, consegui fazê-lo funcionar iniciando uma instância do EC2 com o sistema operacional AWS Linux e instalei as bibliotecas lá. Tudo funcionou muito bem.

Obrigado pela ajuda,
Lee

Obtenha o Outlook para iOS https://aka.ms/o0ukef


De: Ralf Gommers [email protected]
Enviado: sábado, 4 de maio de 2019 06:52
Para: numpy/numpy
CC: Lee James; Autor
Assunto: Re: [numpy/numpy] Não é possível importar numpy na função AWS Lambda (#13465)

Esse guia da AWS não está contando toda a história. A distribuição do Amazon Linux não é compatível com uma instalação normal do NumPy, como do PyPi ou conda-forge.

Sugiro que você siga um desses guias ou use um arquivo zip de um desses repositórios:
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=ZKkVD6L0iXq9wAG929BSTikIAEun9eeS4ZdgUw1Q8oY&e=
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 & 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-KgjOittvdP3EKrsYfomhs&s=708JPsyiAUC0pdCf1QwuLz=J4dEWunFnuZ
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 não é um bug do NumPy, então fecharei o problema.


Você está recebendo isso porque foi o autor do tópico.
Responda a este e-mail diretamente, vê-lo no 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= , ou silenciar o fio 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 Você conhece alguma tática relacionada ao python3.7 sobre isso. Eu tentei alguns da sua lista de 3.6 e sempre acabo com a mesma reclamação sobre o _multiarray lib. Eu preciso fazer uma "camada" da AWS, pois a combinação que preciso (numpy,scipy,pandas) excede o limite de tamanho de uma única função.

@iceback se o seu erro foi semelhante ao que eu tive, que era No module named 'numpy.core._multiarray_umath' , isso é causado por não instalar o numpy com o sistema operacional correto.

O AWS lambda executará o AWS linux em tempo de execução, portanto, todos os pacotes instalados no destino devem ser instalados com o sistema operacional adequado. Se você tiver como destino instalar numpy em um diretório package por meio pip install --target ./package numpy e estiver executando outro sistema operacional (como macOS), isso falhará porque a instalação de destino pressupõe que o O sistema operacional não mudará do seu sistema operacional nativo.

Para contornar isso, você tem duas opções:

  1. Execute a instalação de destino de uma máquina que executa o AWS Linux, como uma instância do EC2. Isso funcionou muito bem para mim.
  2. Descubra como especificar o sistema operacional de tempo de execução em seu comando de instalação de destino. Se você encontrar uma boa maneira de fazer isso, compartilhe 😄

Vou ter que revisitar todas as coisas que tentei na semana passada, incluindo o @korniichuk e o github/pbegle e o senhor sabe o que mais, mas sempre acabava no mesmo lugar. Construir numpy em um EC2 não está indo bem. Talvez versão errada do Cython (apenas 0,27 disponível no aws linux). Você pode detalhar o seu #1. Como você passa de um numpy instalado em uma instância para uma camada no Lambda?

@iceback Ya, isso foi frustrante quando fiz isso pela primeira vez, mas é definitivamente possível. Atualmente executo funções Lambda com Python 3.7 com os 3 pacotes que você mencionou.

Como eu executei a etapa 1. acima envolveu seguir as etapas descritas em Atualizando uma Função com Dependências Adicionais , descritas aqui . Para simplificar, vou assumir que seu arquivo python local é chamado _pony.py_ e a função lambda_ é invocada com a função _ride_pony_.

  1. Inicie e conecte -se a uma instância do EC2, como uma microinstância do EC2. Encontre instruções aqui . Certifique-se de que a instância execute o AWS Linux.
  2. Verifique se o python3 está instalado. Se não estiver instalado, instale-o com sudo yum install python3 -y
  3. Crie um diretório para seus pacotes locais. mkdir package
  4. Instale as bibliotecas que deseja usar no Lambda. Para sua informação, eu sempre chamo pip como um módulo para evitar confusão entre pips Python2 e Python3. Além disso, alguma ordem de instalação pode ser preferida nessas instalações e pode valer a pena pesquisar.
  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. Mova para o diretório de instalação com cd package
  9. Compacte o diretório de instalação com zip -r9 ../pony.zip .
  10. Agora, de sua máquina local , scp _pony.zip_ de sua instância do EC2 para seu local com as instruções aqui .
  11. De seu local , zip _pony.py_ em _pony.zip_. zip -g pony.zip pony.py . Seu arquivo zip agora contém seu código lambda junto com os módulos python necessários, que foram instalados para destino com um sistema operacional AWS Linux.
  12. Carregue o arquivo zip para S3 (que permite funções lambda maiores, até 50 MB). Se o seu código for pequeno, você pode pular para a etapa 10.
  13. Vá para sua função lambda (ou atualize da CLI) para usar o código em pony.zip para essa função lambda

**Certifique-se de que sua função lambda aponte para e execute seu nome de arquivo e função principal, _pony.ride_pony_, se não for o padrão _lambda_function.lambda_handler_

Muito obrigado. Eu acredito que eu tenho um tiro! (Meu entendimento é que a parte superior do zip deve ser "python" para uma camada Lambda, então usarei isso em vez de "pacote")

Grite esse how-to em voz alta e orgulhoso! Não tenho certeza de onde errei com a outra sugestão (embora fossem para python3.6), mas agora estou de volta a trabalhar no meu código de função. Obrigado uma tonelada.

A AWS agora também publicou uma camada que inclui NumPy e SciPy. De https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

_Com base no feedback de nossos clientes e para fornecer um exemplo de como usar as Camadas Lambda, estamos publicando uma camada pública que inclui NumPy e SciPy, duas bibliotecas científicas populares para Python. Essa camada pré-criada e otimizada pode ajudá-lo a começar muito rapidamente com aplicativos de processamento de dados e aprendizado de máquina._

Hm, poderia haver muita documentação AWX? ;)

Em 23 de outubro de 2019, às 4h29, Ralf Gommers [email protected] escreveu:

A AWS agora também publicou uma camada que inclui NumPy e 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/new-for-aws-lambda-use-any-programming-language-and-share-common-components/
Com base no feedback de nossos clientes e para fornecer um exemplo de como usar Lambda Layers, estamos publicando uma camada pública que inclui NumPy e SciPy, duas bibliotecas científicas populares para Python. Essa camada pré-criada e otimizada pode ajudá-lo a começar muito rapidamente com aplicativos de processamento de dados e aprendizado de máquina.


Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, vê-lo no GitHub https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 , ou unsubscribe https://github.com/notifications/unsubscribe- auth/AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ .

O que funcionou para mim foi usar uma versão Linux da biblioteca numpy (eu uso o macOS). Fui em https://pypi.org/project/numpy/#files e baixei o arquivo .whl na versão que estava procurando (para mim, era numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl) . Em seguida, vá para o terminal e descompacte-o fazendo 'unzip numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl'. Isso deve fornecer a versão numpy que funcionará no Lambda. Em seguida, feche tudo como você estava fazendo antes e faça o upload. No final, um problema incrivelmente frustrante foi resolvido de forma bastante simples.

Eu tive o mesmo problema, a solução que funcionou para mim é que eu desinstalei o numpy do meu pc (windows 7).
do que eu adicionei camada na função aws lambda algo chamado AWSlambda scipy e é isso.

Eu me deparei com o mesmo problema com o Windows, mas consegui resolvê-lo por uma das seguintes abordagens:

  • Crie o Lambda com AWS SAM (Serverless Application Model) em execução no Ubuntu que é executado no WSL (Windows Subsystem for Linux)
  • Crie o Lambda com o AWS SAM usando o sinalizador --use-container , que tem a seguinte explicação na documentação :

Se suas funções dependem de pacotes que têm dependências compiladas nativamente, use esse sinalizador para criar sua função dentro de um contêiner do Docker semelhante ao AWS Lambda.

Esta página foi útil?
0 / 5 - 0 avaliações