Картопы в AWS Lambda - PullRequest
       17

Картопы в AWS Lambda

0 голосов
/ 26 июня 2019

Я пытаюсь использовать cartopy и matplotlib для создания карты в AWS Lambda.

Сценарий (пример картографии) довольно прост, просто для тестирования:

import pandas as pd
import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt


def lambda_handler(event, context):
    a = np.arange(15).reshape(3, 5)
    print(a)

    b = pd.Series([1, 3, 5, np.nan, 6, 8])
    print(b)

    ax = plt.axes(projection=ccrs.PlateCarree())
    ax.coastlines()

    plt.show()

Я использую conda для установки cartopy и всех его зависимостей на моем локальном компьютере.

Проблема в том, что все зависимости чрезвычайно велики, поэтому проект превышает установленный предел в 250 МБот AWS Lambda.

Я пробовал 2 вещи:

  • Установка cartopy с использованием conda, архивирование папок site-packages и lib, но это безумно много.

  • Установите cartopy с помощью conda, архивируя только то, что мне нужно, из site-packages, но я не могу найти все библиотеки, которые нужно импортировать из папки lib (лямбдааварийно завершает работу, не сообщая мне, какую библиотеку он не нашел.

[ERROR] AttributeError: 'object' object has no attribute 'startswith'
Traceback (most recent call last):
  File "/var/lang/lib/python3.7/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.7/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/main.py", line 4, in <module>
    import matplotlib.pyplot as plt
  File "/opt/python/matplotlib/pyplot.py", line 2349, in <module>
    switch_backend(rcParams["backend"])
  File "/opt/python/matplotlib/__init__.py", line 820, in __getitem__
    plt.switch_backend(rcsetup._auto_backend_sentinel)
  File "/opt/python/matplotlib/pyplot.py", line 212, in switch_backend
    newbackend[9:] if newbackend.startswith("module://")
  • Если я заархивирую всю папку lib, то конечный zip-файл будет также намного выше лимита.

Кроме того, я не могу реплицировать лямбда-среду на локальном компьютере, так как у меня есть некоторые библиотекиустановлен по умолчанию (я использую EC2 - AWS Linux 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...