pydantic
kan goed worden geïntegreerd met AWS Lambda-functies. In deze handleiding bespreken we hoe u pydantic
instelt voor een AWS Lambda-functie.
Python-bibliotheken installeren voor AWS Lambda-functies¶
Er zijn veel manieren om Python-bibliotheken te gebruiken in AWS Lambda-functies. Zoals uiteengezet in de AWS Lambda-documentatie , zijn de meest voorkomende benaderingen:
- Een
.zip
bestandsarchief gebruiken om uw code en afhankelijkheden te verpakken - AWS Lambda Layers gebruiken om bibliotheken over meerdere functies te delen
- Een containerimage gebruiken om uw code en afhankelijkheden te verpakken
Al deze benaderingen kunnen worden gebruikt met pydantic
. De beste aanpak voor u hangt af van uw specifieke vereisten en beperkingen. We gaan hier dieper in op de eerste twee gevallen, omdat het beheer van afhankelijkheid met een containerimage eenvoudiger is. Als u een containerimage gebruikt, vindt u deze opmerking mogelijk nuttig bij het installeren pydantic
.
!!! tip Als u pydantic
voor meerdere functies gebruikt, kunt u AWS Lambda Layers overwegen, die het naadloos delen van bibliotheken tussen meerdere functies ondersteunen.
Ongeacht de aanpak die u kiest voor het beheer van afhankelijkheden, het is nuttig om u aan deze richtlijnen te houden om een soepel beheerproces voor afhankelijkheden te garanderen.
pydantic
installeren voor AWS Lambda-functies¶
Wanneer u uw .zip
bestandsarchief aan het bouwen bent met uw code en afhankelijkheden, of uw .zip
bestand organiseert voor een Lambda-laag, gebruikt u waarschijnlijk een lokale virtuele omgeving om uw afhankelijkheden te installeren en te beheren. Dit kan een beetje lastig zijn als je pip
gebruikt, omdat pip
wielen installeert die zijn gecompileerd voor je lokale platform, en die mogelijk niet compatibel zijn met de Lambda-omgeving.
We raden u daarom aan een opdracht te gebruiken die lijkt op het volgende:
pip install \
--platform manylinux2014_x86_64 \ # (1)!
--target=<your_package_dir> \ # (2)!
--implementation cp \ # (3)!
--python-version 3.10 \ # (4)!
--only-binary=:all: \ # (5)!
--upgrade pydantic # (6)!
- Gebruik het platform dat overeenkomt met uw Lambda-runtime.
- Geef de map op waar u het pakket wilt installeren (vaak
python
voor Lambda Layers). - Gebruik de CPython-implementatie.
- De Python-versie moet compatibel zijn met de Lambda-runtime.
- Deze vlag zorgt ervoor dat het pakket vooraf gebouwde binaire wielen is geïnstalleerd.
- De nieuwste versie van
pydantic
wordt geïnstalleerd.
Problemen oplossen¶
no module named 'pydantic_core._pydantic_core'
¶
De
no module named `pydantic_core._pydantic_core`
fout is een veelvoorkomend probleem dat aangeeft dat u pydantic
verkeerd hebt geïnstalleerd. Om dit probleem op te lossen, kunt u de volgende stappen proberen (vóór de mislukte import):
-
Controleer de inhoud van het geïnstalleerde
pydantic-core
pakket. Zijn de gecompileerde bibliotheek en de type-stubs beide aanwezig?from importlib.metadata import files print([file for file in files('pydantic-core') if file.name.startswith('_pydantic_core')]) """ [PackagePath('pydantic_core/_pydantic_core.pyi'), PackagePath('pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so')] """
Je zou twee bestanden verwachten zoals hierboven afgedrukt. Het compileerbibliotheekbestand zal een .so of .pyd zijn met een naam die varieert afhankelijk van het besturingssysteem en de Python-versie.
-
Controleer of de Python-versie van uw lambda compatibel is met de hierboven gecompileerde bibliotheekversie.
import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX"))
> '.cpython-312-x86_64-linux-gnu.so'¶
Je zou hier hetzelfde achtervoegsel verwachten als de gecompileerde bibliotheek, hier zien we bijvoorbeeld dit achtervoegsel .cpython-312-x86_64-linux-gnu.so
klopt inderdaad _pydantic_core.cpython-312-x86_64-linux-gnu.so
.
Als deze twee controles niet overeenkomen, hebben uw bouwstappen niet de juiste native code voor het doelplatform van uw lambda geïnstalleerd. U moet uw bouwstappen aanpassen om de versie van de geïnstalleerde bibliotheek die wordt geïnstalleerd te wijzigen.
Meest waarschijnlijke fouten:
-
Uw besturingssysteem of CPU-architectuur komt niet overeen (bijv. Darwin versus x86_64-linux-gnu). Probeer het juiste
--platform
argument door te geven aanpip install
bij het installeren van uw lambda-afhankelijkheden, of bouw in een Linux docker-container voor het juiste platform. Mogelijke platforms op dit moment zijn onder meer--platform manylinux2014_x86_64
of--platform manylinux2014_aarch64
, maar deze kunnen veranderen met een toekomstige grote release van Pydantic. -
Uw Python-versie komt niet overeen (bijvoorbeeld
cpython-310
versuscpython-312
). Probeer het juiste--python-version
argument door te geven aanpip install
, of wijzig op een andere manier de Python-versie die in uw build wordt gebruikt.
Er zijn geen pakketmetagegevens gevonden voor email-validator
¶
Pydantic gebruikt version
van importlib.metadata
om te controleren welke versie van email-validator
is geïnstalleerd. Dit mechanisme voor pakketversiebeheer is enigszins incompatibel met AWS Lambda, ook al is het de industriestandaard voor versiebeheer van pakketten in Python. Er zijn een paar manieren om dit probleem op te lossen:
Als u uw lambda implementeert met het serverloze raamwerk, is het waarschijnlijk dat de juiste metagegevens voor het email-validator
niet zijn opgenomen in uw implementatiepakket. Gereedschappen zoals serverless-python-requirements
verwijder metagegevens om de pakketgrootte te verkleinen. U kunt dit probleem oplossen door de slim
instelling in uw serverless.yml
-bestand op false in te stellen:
pythonRequirements:
dockerizePip: non-linux
slim: false
fileName: requirements.txt
U kunt hier meer lezen over deze oplossing en andere slim
instellingen die mogelijk relevant zijn.
Als u een .zip
archief gebruikt voor uw code en/of afhankelijkheden, zorg er dan voor dat uw pakket de vereiste versiemetagegevens bevat. Om dit te doen, moet u ervoor zorgen dat u de map dist-info
opneemt in uw .zip
archief voor het email-validator
.
Dit probleem is gemeld voor andere populaire Python-bibliotheken zoals jsonschema
, dus u kunt daar ook meer lezen over het probleem en mogelijke oplossingen.
Extra bronnen¶
Meer foutopsporingstips¶
Als je nog steeds worstelt met het installeren van pydantic
voor je AWS Lambda, kun je dit probleem raadplegen, dat een verscheidenheid aan problemen en oplossingen behandelt die andere ontwikkelaars tegenkwamen.
Valideren van event
en context
¶
Bekijk onze blogpost voor meer informatie over hoe u pydantic
kunt gebruiken om event
en context
in AWS Lambda-functies te valideren.
本文总阅读量次