Numpy: Невозможно импортировать numpy в функцию AWS Lambda

Созданный на 4 мая 2019  ·  14Комментарии  ·  Источник: numpy/numpy

  • как ты установил питон
    удалил python3 на моем Mac, а затем brew install python , чтобы установить python 3.7.3
  • как вы установили numpy
    Поскольку я устанавливаю для работы на AWS Lambda, pip install numpy --target .
  • ваша операционная система
    macOS Сьерра 10.12.6
  • независимо от того, установлено ли у вас несколько версий Python
    родной Python 2.7.10 все еще установлен на моем Mac
  • если вы собирали из исходного кода, версии вашего компилятора и, в идеале, журнал сборки
    Н/Д

Так что я могу запускать свой код локально, и у меня нет проблем. Я pandas, matplotlib, boto3 и mpld3 для организации и отображения данных в таблице AWS DDB с графиками matplotlib, которые mpld3 превращает в html. numpy, по-видимому, необходим для панд, и всякий раз, когда я пытаюсь установить эти библиотеки в целевой каталог, чтобы они могли работать в лямбда-функции, согласно https://docs.aws.amazon.com/lambda/latest/dg/lambda -python-how-to-create-deployment-package.html , я получаю следующую ошибку:

```ВАЖНО: ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЭТО, ЧТОБЫ ПОЛУЧИТЬ СОВЕТЫ ПО РЕШЕНИЮ ЭТОЙ ПРОБЛЕМЫ!

Не удалось импортировать модуль расширения multiarray numpy. Большинство
вероятно, вы пытаетесь импортировать неудачную сборку numpy.
Вот как это сделать:

  • Если вы работаете с пустым репозиторием git, попробуйте 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».

END RequestId: 2fc65f50-420d-441b-930c-665b1c8ab3ea
REPORT RequestId: 2fc65f50-420d-441b-930c-665b1c8ab3ea Продолжительность: 0,85 мс Продолжительность выставления счета: 100 мс Размер памяти: 128 МБ Макс. используемая память: 40 МБ ```

Самый полезный комментарий

Это руководство по AWS не рассказывает вам всю историю. Дистрибутив Amazon Linux несовместим с обычной установкой NumPy, такой как PyPi или conda-forge.

Я предлагаю вам следовать одному из этих руководств или использовать zip-файл из одного из этих репозиториев:
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-лямбда-py3.6-пандас-numpy
https://github.com/vitolimandibhrata/aws-лямбда-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- пакет.html. После архивирования файлы были ~ 16 МБ, поэтому у них была установка numpy. Первый пример, который не импортировал numpy, отлично работает при тестировании лямбда-функции, но второй выдает ошибку с исходным сообщением об ошибке.

Это руководство по AWS не рассказывает вам всю историю. Дистрибутив Amazon Linux несовместим с обычной установкой NumPy, такой как PyPi или conda-forge.

Я предлагаю вам следовать одному из этих руководств или использовать zip-файл из одного из этих репозиториев:
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-лямбда-py3.6-пандас-numpy
https://github.com/vitolimandibhrata/aws-лямбда-numpy

Это не ошибка NumPy, поэтому я закрою тему.

Спасибо,

Я ценю ваш ответ. К вашему сведению, мне удалось заставить его работать, инициировав экземпляр EC2 с ОС AWS Linux и установив туда библиотеки. Все работало отлично.

Спасибо за помощь,
Ли

Получите Outlook для iOS https://aka.ms/o0ukef


От: Ральф Гоммерс[email protected]
Отправлено: суббота, 4 мая 2019 г., 6:52
Кому: numpy/numpy
Копия: Ли Джеймс; Автор
Тема: Re: [numpy/numpy] Невозможно импортировать numpy в функцию AWS Lambda (#13465)

Это руководство по AWS не рассказывает вам всю историю. Дистрибутив Amazon Linux несовместим с обычной установкой NumPy, такой как PyPi или conda-forge.

Я предлагаю вам следовать одному из этих руководств или использовать zip-файл из одного из этих репозиториев:
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
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 & д = DwMCaQ & с = 0hefKdg9jtsMu47wpF0ovg & г = 2qmZ2aA-JTvfrp24tI1PaA & т = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs & s = 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-KgjOittvdP3EKrsYfomhs&s=708JPsyiBrAUC0pdCf1QwuLcJ4dEWunFNus
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, поэтому я закрою тему.


Вы получаете это, потому что вы создали тему.
Ответить на это сообщение непосредственно, просматривать его на 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= или приглушить нить 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. Мне нужно создать «слой» 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. Выясните, как указать исполняемую ОС в вашей целевой команде установки. Если вы найдете хороший способ сделать это, пожалуйста, поделитесь 😄

Мне придется пересмотреть все, что я пробовал на прошлой неделе, включая @korniichuk и github/pbegle, и бог знает что еще, но всегда оказывалось в одном и том же месте. Создание numpy на EC2 идет не очень хорошо. Возможно, неправильная версия Cython (в aws linux доступна только 0.27). Не могли бы вы уточнить свой номер 1. Как перейти от установленного numpy на одном экземпляре к слою на Lambda?

@iceback Да, это было неприятно, когда я впервые сделал это, но это определенно возможно. В настоящее время я запускаю функции Lambda с Python 3.7 с тремя упомянутыми вами пакетами.

То, как я выполнил шаг 1. выше, включало в себя выполнение шагов, описанных в разделе « Обновление функции с дополнительными зависимостями », описанном здесь . Для простоты я предполагаю, что ваш локальный файл Python называется _pony.py_, а функция lambda_function вызывается с помощью функции _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-файл теперь содержит ваш лямбда-код вместе с необходимыми модулями Python, которые были установлены для работы с ОС AWS Linux.
  12. Загрузите zip-файл на S3 (что позволяет использовать лямбда-функции большего размера, до 50 МБ). Если ваш код небольшой, вы можете перейти к шагу 10.
  13. Войдите в свою лямбда-функцию (или обновите из CLI), чтобы использовать код в pony.zip для этой лямбда-функции.

**Убедитесь, что ваша лямбда-функция указывает и выполняет ваше имя файла и основную функцию, _pony.ride_pony_, если это не _lambda_function.lambda_handler_ по умолчанию.

Спасибо большое. Я верю, что у меня есть шанс! (Насколько я понимаю, верхняя часть почтового индекса должна быть «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, Ральф Гоммерс, [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-programming-language-and-share-common-components/
Основываясь на отзывах наших клиентов и чтобы показать пример использования Lambda Layers, мы публикуем общедоступный слой, который включает NumPy и SciPy, две популярные научные библиотеки для Python. Этот предварительно созданный и оптимизированный уровень поможет вам очень быстро приступить к работе с приложениями для обработки данных и машинного обучения.


Вы получаете это, потому что вас упомянули.
Ответить на это сообщение непосредственно, просматривать его на GitHub https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 или отписки https://github.com/notifications/unsubscribe- auth/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». Это должно дать вам версию numpy, которая будет работать на Lambda. Затем заархивируйте все, как вы делали раньше, и загрузите его. В конце концов невероятно неприятная проблема была решена довольно просто.

У меня была такая же проблема, решение, которое сработало для меня, заключается в том, что я удалил numpy со своего компьютера (Windows 7).
затем я добавил слой в лямбда-функцию aws, что-то под названием AWSlambda scipy, и все.

Я столкнулся с той же проблемой в Windows, но смог решить ее одним из следующих способов:

  • Создайте Lambda с помощью AWS SAM (модель бессерверного приложения), работающего в Ubuntu, которая работает на WSL (подсистема Windows для Linux).
  • Создайте Lambda с помощью AWS SAM, используя флаг --use-container , который имеет следующее объяснение в документации :

Если ваши функции зависят от пакетов, которые имеют собственные скомпилированные зависимости, используйте этот флаг, чтобы создать свою функцию внутри контейнера Docker, похожего на AWS Lambda.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги