Невозможно импортировать grequest в AWS Lambda (Python 3.X) - PullRequest
0 голосов
/ 04 августа 2020

Когда я заархивирую «grequest» и пытаюсь использовать его в AWS лямбда-функции, я получаю следующую ошибку:

[ERROR] RuntimeError: Gevent is required for grequests.
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/fiveDay_updater.py", line 11, in <module>
    import grequests as asyncReq
  File "/var/task/grequests.py", line 18, in <module>
    raise RuntimeError('Gevent is required for grequests.')

Похоже, что у других была эта проблема. Невозможно импортировать grequests для AWS Lambda К сожалению, решение, предложенное в приведенной выше ссылке, не работает для меня. Есть ли у кого-нибудь "grequest" zip, который будет работать на более позднем python, или знает решение проблемы?

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Я бы порекомендовал подход, который меня никогда не подводил и основан на инструменте докера lambci / lambda и создании слоев лямбда .

Это было описано по ссылке ниже:

To проверьте , я создал слой с именем grequestslayer.zip следующим образом:

  1. Создайте папку layer и введите папку
  2. В папке создайте requirements.txt с содержимым
grequests
Выполните следующую команду:
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
Закрепите созданный слой:
zip -r grequestslayer.zip python

Слой будет содержать gevent автоматически:

python/lib/python3.8/site-packages/
├── bin
├── certifi
├── certifi-2020.6.20.dist-info
├── chardet
├── chardet-3.0.4.dist-info
├── easy_install.py
├── gevent
├── gevent-20.6.2.dist-info
├── greenlet-0.4.16.dist-info
├── greenlet.cpython-38-x86_64-linux-gnu.so
├── grequests-0.6.0.dist-info
├── grequests.py
├── idna
├── idna-2.10.dist-info
├── include
├── pkg_resources
├── __pycache__
├── requests
├── requests-2.24.0.dist-info
├── setuptools
├── setuptools-49.2.1.dist-info
├── urllib3
├── urllib3-1.25.10.dist-info
├── zope
├── zope.event-4.4.dist-info
├── zope.event-4.4-py2.7-nspkg.pth
├── zope.interface-5.1.0.dist-info
└── zope.interface-5.1.0-py3.8-nspkg.pth
Создать слой лямбда:

enter image description here

  1. Добавьте слой к вашей функции:

enter image description here

  1. Используйте grequests в своей функции:
import json

import grequests

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

0 голосов
/ 04 августа 2020

Я не уверен, используете ли вы инструмент для развертывания своих функций, если вы не используете машину linux, вы столкнетесь с некоторыми проблемами при создании zip-архива. Я рекомендую вам использовать один из этих инструментов для развертывания ваших функций python на AWS.

Это мои рекомендации для вас, чтобы вам не приходилось иметь дело с созданием zip-архива вручную, если вам это не интересно, возможно, вам нужно будет использовать экземпляр linux для генерации вашего zip-архива.

...