Я пытаюсь использовать 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)