Delen via


Uw Python Azure Functions-apps bouwen

Azure Functions ondersteunt drie buildopties voor het publiceren van uw Python-apps naar Azure. Kies uw bouwmethode op basis van uw lokale omgeving, applicatie-afhankelijkheden en runtime-vereisten.

Snelle vergelijking voor bouwacties

Implementatietype Waar afhankelijkheden worden geïnstalleerd Typisch gebruiksscenario
Externe build (aanbevolen) Azure (App Service) Standaard, aanbevolen voor de meeste gebruikers
Lokale build Uw machine Linux- en macOS-ontwikkelaars, beperkte Windows-scenario's
Aangepaste afhankelijkheden Verwerkt via een extra index-URL of een lokale installatie Niet-PyPI-afhankelijkheden

Overwegingen voor implementatiepakketten

Houd bij het implementeren van uw Python-functie-app in Azure rekening met deze verpakkingsvereisten:

  • Pakketinhoud, niet de map: Implementeer de inhoud van de projectmap, niet de map zelf.
  • Hoofdniveau host.json: zorg ervoor dat één host.json bestand zich in de hoofdmap van het implementatiepakket bevindt, niet genest in een submap.
  • Ontwikkelbestanden uitsluiten: U kunt mappen zoals tests/, .github/en .venv*/ van het geïmplementeerde pakket uitsluiten door ze op te slaan in .funcignore.
  • De build-omgeving moet overeenkomen met de productieomgeving: uw afhankelijkheden moeten worden gebouwd op een ubuntu-machine met dezelfde Python-versie als de productie-app. Remote build behandelt dit scenario automatisch.
  • Afhankelijkheden moeten worden geïnstalleerd in ./.python_packages/lib/site-packages: Externe build installeert alle afhankelijkheden die worden vermeld in requirements.txt in de juiste map.
  • Houd rekening met de grootte van het implementatiepakket: grote afhankelijkheidssets verhogen de buildtijd, latentie bij koude start en de import- en initialisatietijd van de module. Toepassingen met grote wetenschappelijke of ML-bibliotheken (inclusief pytorch) worden vooral beïnvloed.
  • Externe build heeft een time-out van 60 seconden: als de afhankelijkheidsinstallatie de limiet overschrijdt, mislukt de build. In dat geval kunt u overwegen om een lokale build te gebruiken en te implementeren met vooraf gedefinieerde afhankelijkheden.
  • Module importeren heeft een tijdslimiet van 2 minuten: het laden en indexeren van functies in Python-modules tijdens het opstarten heeft een limiet van 2 minuten voor Python 3.13 en hoger, of voor oudere Python-versies waarvoor PYTHON_ENABLE_INIT_INDEXING ingeschakeld is. Als uw app dit overschrijdt, vermindert u top-level imports of gebruikt u lazy imports (importeer modules binnen de functietekst in plaats van in de globale scope).

Externe build

Externe build is de aanbevolen benadering voor een implementatie met alleen code van uw Python-app naar Functions.

Met externe build verwerkt het Functions-platform de pakketinstallatie en zorgt het voor compatibiliteit met de externe runtime-omgeving. Het gebruik van externe build resulteert ook in een kleiner implementatiepakket.

U kunt externe build gebruiken wanneer u uw Python-app publiceert met behulp van deze hulpprogramma's:

Zie Remote Build inschakelen voor andere scenario's, zoals Continue levering met Azure Pipelines.

Externe build ondersteunt ook aangepaste pakketindexen wanneer u de PIP_EXTRA_INDEX_URL app-instelling gebruikt. Zie Remote build voor meer informatie.

Belangrijk

Een externe build installeert alle afhankelijkheden die worden vermeld in requirements.txt. Als u ervoor wilt zorgen dat alle vereiste pakketten zijn geïnstalleerd, moet u deze afhankelijkheden in uw requirements.txt bestand opnemen.

Lokale versie

Als u geen externe build aanvraagt, worden in plaats daarvan afhankelijkheden op uw computer geïnstalleerd. Het hele lokale project en de afhankelijkheden worden vervolgens lokaal verpakt en geïmplementeerd in uw functie-app. Het gebruik van lokale buildresultaten leidt tot een grotere pakketupload.

U moet ook afhankelijkheden installeren in de juiste map. Gebruik pip install --target="./.python_packages/lib/site-packages" om de vereiste afhankelijkheden in uw lokale .python_packages/lib/site-packages map te installeren. Als u bijvoorbeeld uw afhankelijkheden in een requirements.txt bestand hebt, kunt u deze opdracht uitvoeren:

pip install --target="./.python_packages/lib/site-packages" -r requirements.txt

Lokale build gebruiken wanneer:

  • U ontwikkelt lokaal in Linux of macOS.
  • Externe bouw is niet beschikbaar of wordt beperkt.
  • U wilt afhankelijkheden definiëren in een ander bestand dan requirements.txt, zoals pyproject.toml.

De volgende hulpprogramma's kunnen worden geconfigureerd voor het gebruik van lokale build:

Belangrijk

Gebruik geen lokale build bij het ontwikkelen van uw Python-apps op een Windows-computer. Pakketten die zijn gebouwd op een Windows-computer, hebben vaak problemen met het implementeren en uitvoeren op Linux in Azure Functions. Gebruik alleen lokale build als u zeker weet dat het pakket wordt uitgevoerd op Linux-systemen.

Aangepaste afhankelijkheden

Azure Functions ondersteunt aangepaste en andere niet-PyPI-afhankelijkheden met behulp van de PIP_EXTRA_INDEX_URL app-instelling of door een lokale build te maken op een Linux- of macOS-computer.

Externe build met een extra index-URL

Wanneer uw privépakketten online beschikbaar zijn, kunt u een externe build aanvragen nadat u de locatie van het privépakket hebt ingesteld met behulp van de PIP_EXTRA_INDEX_URL app-instelling. Wanneer u instelt PIP_EXTRA_INDEX_URL, gebruiken externe builds deze pakketfeed tijdens de implementatie. PIP_INDEX_URL vervangt de pakketindex, dus overweeg PIP_EXTRA_INDEX_URL in plaats daarvan om onverwacht gedrag te voorkomen.

Lokale pakketten of wielen

Lokale pakketten en wielen worden ondersteund bij het bouwen van Python Azure Function-apps.

Als u deze pakketten of wielen wilt installeren met behulp van een externe build, kunt u de afhankelijkheden in uw requirements.txt bestand opnemen en implementeren met externe build ingeschakeld.

Het requirements.txt bestand kan er bijvoorbeeld uitzien als het volgende codefragment:

 # Installing a custom wheel
 <my_package_wheel>.whl
 
 # Installing a local package
 path/to/my/package

Als u deze afhankelijkheden wilt installeren door gebruik te maken van lokale build, installeert u de afhankelijkheden in uw lokale .python_packages/lib/site-packages map en implementeert u met de externe build uitgeschakeld. Als u bijvoorbeeld de pakketten hebt gedefinieerd in uw requirements.txt bestand, kunt u installeren en publiceren met behulp van de volgende opdrachten en Core Tools:

pip install --target="./.python_packages/lib/site-packages" -r requirements.txt
func azure functionapp publish <APP_NAME> --no-build