Az Azure Functions Python-hibáinak elhárítása

Ez a cikk az Azure Functions Python-függvényeivel kapcsolatos hibák elhárításához nyújt segítséget. Ez a cikk a v1 és a v2 programozási modelleket is támogatja. Válassza ki a használni kívánt modellt a cikk tetején található választógombból.

Megjegyzés

A Python v2 programozási modell csak a 4.x függvények futtatókörnyezetében támogatott. További információkért tekintse meg az Azure Functions futtatókörnyezeti verzióinak áttekintését.

A Python-függvények gyakori problémáinak hibaelhárítási szakaszai a következők:

Hibaelhárítás: ModuleNotFoundError

Ez a szakasz segítséget nyújt a Python-függvényalkalmazás modulokkal kapcsolatos hibáinak elhárításában. Ezek a hibák általában a következő Azure Functions-hibaüzenetet eredményezik:

Kivétel: ModuleNotFoundError: Nincs "module_name" nevű modul.

Ez a hiba akkor fordul elő, ha egy Python-függvényalkalmazás nem tölt be Egy Python-modult. A hiba kiváltó oka az alábbi problémák egyike:

Projektfájlok megtekintése

A probléma tényleges okának azonosításához be kell szereznie a függvényalkalmazásban futó Python-projektfájlokat. Ha nem rendelkezik a projektfájlokkal a helyi számítógépen, az alábbi módokon szerezheti be őket:

  • Ha a függvényalkalmazás rendelkezik alkalmazásbeállítással WEBSITE_RUN_FROM_PACKAGE , és az értéke URL-cím, töltse le a fájlt az URL-cím böngészőbe másolásával és beillesztésével.
  • Ha a függvényalkalmazásban a(z) WEBSITE_RUN_FROM_PACKAGE értéke 1 van állítva, lépjen a következőre: https://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackages, és töltse le a fájlt a legújabb href URL-címről.
  • Ha a függvényalkalmazás nem rendelkezik az előző két alkalmazásbeállítás egyikével sem, lépjen a(z) https://<app-name>.scm.azurewebsites.net/api/settings helyre, és keresse meg az URL-címet a(z) SCM_RUN_FROM_PACKAGE alatt. Töltse le a fájlt az URL-cím böngészőbe másolásával és beillesztésével.
  • Ha a javaslatok megoldják a problémát, lépjen a(z) https://<app-name>.scm.azurewebsites.net/DebugConsole oldalra, és tekintse meg a(z) /home/site/wwwroot alatti tartalmat.

A cikk további része segít a hiba lehetséges okainak elhárításában a függvényalkalmazás tartalmának vizsgálatával, a kiváltó ok azonosításával és az adott probléma megoldásával.

A ModuleNotFoundError diagnosztizálása

Ez a szakasz a modullal kapcsolatos hibák lehetséges kiváltó okait ismerteti. Miután rájött, hogy melyik a valószínű kiváltó ok, lépjen a kapcsolódó kockázatcsökkentéshez.

A csomag nem található

Nyissa meg a(z) .python_packages/lib/python3.6/site-packages/<package-name> vagy .python_packages/lib/site-packages/<package-name> elemet. Ha a fájl elérési útja nem létezik, valószínűleg ez a hiányzó elérési út okozza a problémát.

Ezt a problémát okozhatja, ha harmadik féltől származó vagy elavult eszközöket használ az üzembe helyezés során.

A probléma megoldásához lásd: Távoli buildelés vagy natív függőségek létrehozása.

A csomag nem a megfelelő Linux-kerékkel van feloldva

Ugrás ide: .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info vagy .python_packages/lib/site-packages/<package-name>-<version>-dist-info. A kedvenc szövegszerkesztőjével nyissa meg a kerékfájlt , és ellenőrizze a Címke: szakaszt. A probléma az lehet, hogy a címke értéke nem tartalmaz Linuxot.

A Python-függvények csak Linuxon futnak az Azure-ban. A Functions v2.x futtatókörnyezete a Debian Stretchen fut, a v3.x futtatókörnyezet pedig a Debian Busteren fut. Az összetevő várhatóan a megfelelő Linux bináris fájlokat tartalmazza. Ha a jelölőt a --build local Core Toolsban, harmadik féltől származó vagy elavult eszközökben használja, az régebbi bináris fájlok használatát okozhatja.

A probléma megoldásához lásd: Távoli buildelés vagy natív függőségek létrehozása.

A csomag nem kompatibilis a Python-értelmező verziójával

Lépjen a .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info vagy a .python_packages/lib/site-packages/<package-name>-<version>-dist-info oldalra. A szövegszerkesztőben nyissa meg a METADATA fájlt, és ellenőrizze az Osztályozók: szakaszt. Ha a szakasz nem tartalmazza a(z) Python :: 3, Python :: 3.10, Python :: 3.11, Python :: 3.12 vagy Python :: 3.13 elemet, akkor a csomagverzió vagy túl régi, vagy — ami valószínűbb — már nincs karbantartva.

A függvényalkalmazás Python-verzióját az Azure Portalon ellenőrizheti. A futtatókörnyezet verziójának megkereséséhez lépjen a függvényalkalmazás Áttekintés erőforráslapjára. A futtatókörnyezet verziója támogatja a Python-verziókat az Azure Functions futtatókörnyezeti verzióinak áttekintésében leírtak szerint.

A probléma megoldásához tekintse meg a csomag frissítését a legújabb verzióra , vagy cserélje le a csomagot egyenértékűre.

A csomag ütközik más csomagokkal

Ha már ellenőrizte, hogy a csomag megfelelően kerül feloldásra a megfelelő Linux wheel-ekkel, akkor ütközés lehet más csomagokkal. Egyes csomagokban a PyPi dokumentációja tisztázhatja a nem kompatibilis modulokat. Például a(z) azure 4.0.0 a következő állítás található:

Ez a csomag nem kompatibilis az Azure-Storage szolgáltatással. Ha telepítette az Azure-Storage-t, vagy ha az Azure 1.x/2.x-et telepítette, és nem távolítja el az Azure-Storage-t, először el kell távolítania az Azure-Storage-t.

A csomagverzió dokumentációját a következő helyen https://pypi.org/project/<package-name>/<package-version>találja: .

A probléma megoldásához tekintse meg a csomag frissítését a legújabb verzióra , vagy cserélje le a csomagot egyenértékűre.

A csomag csak Windows és macOS platformokat támogat

Nyissa meg a requirements.txt elemet egy szövegszerkesztővel, és ellenőrizze a csomagot a(z) https://pypi.org/project/<package-name> elemben. Egyes csomagok csak Windows és macOS platformokon futnak. A pywin32 például csak Windows rendszeren fut.

Előfordulhat Module Not Found , hogy a hiba nem jelenik meg, ha a Windowst vagy a macOS-t használja a helyi fejlesztéshez. A csomag azonban nem importálható az Azure Functionsbe, amely futtatókörnyezetben Linuxot használ. Ezt a problémát valószínűleg az okozza, hogy a projekt inicializálása során a virtuális környezetet pip freeze exportálja a requirements.txt fájlba a Windows- vagy macOS-gépéről.

A probléma enyhítéséhez lásd: Cserélje le a csomagot egyenértékű alternatívákra vagy requirements.txt kézi elkészítése.

A ModuleNotFoundError enyhítése

Az alábbiakban a modulokkal kapcsolatos problémák lehetséges kockázatcsökkentéseit olvashatja el. A korábban említett diagnosztizálások alapján állapítsa meg, hogy ezek közül melyiket próbálja ki.

Távoli build engedélyezése

Győződjön meg arról, hogy a távoli build engedélyezve van. Az, hogy ezt hogyan biztosítja, az üzembe helyezési módszerétől függ.

Győződjön meg arról, hogy telepítve van a Visual Studio Code Azure Functions-bővítményének legújabb verziója. Ellenőrizze, hogy létezik-e a .vscode/settings.json fájl, és tartalmazza-e a beállítást "azureFunctions.scmDoBuildDuringDeployment": true. Ha nem, hozza létre a fájlt a azureFunctions.scmDoBuildDuringDeployment beállítás engedélyezésével, majd telepítse újra a projektet.

Natív függőségek létrehozása

Győződjön meg arról, hogy a Docker és az Azure Functions Core Tools legújabb verziói is telepítve vannak. Lépjen a helyi függvényprojekt mappájába, és az üzembe helyezéshez használja a(z) func azure functionapp publish <app-name> --build-native-deps parancsot.

A csomag frissítése a legújabb verzióra

A legújabb csomagverzióban https://pypi.org/project/<package-name>ellenőrizze az Osztályozók: szakaszt. A csomagnak OS Independent-nak kell lennie, vagy kompatibilisnek kell lennie a(z) POSIX vagy POSIX :: Linux elemmel a(z) Operációs rendszer esetében. A programozási nyelvnek a következőket is tartalmaznia kell: Python :: 3, Python :: 3.10, Python :: 3.11, Python :: 3.12vagy Python :: 3.13.

Ha ezek a csomagelemek helyesek, a requirements.txt sorának <package-name>~=<latest-version>módosításával frissítheti a csomagot a legújabb verzióra.

requirements.txt kézi létrehozása

Egyes fejlesztők a pip freeze > requirements.txt Python-csomagok listáját használják a fejlesztőkörnyezeteikhez. Bár ennek a kényelemnek a legtöbb esetben működnie kell, előfordulhatnak problémák a platformfüggetlen üzembe helyezési forgatókönyvekben, például a függvények helyi fejlesztése Windows vagy macOS rendszeren, de közzététel egy Linuxon futó függvényalkalmazásban. Ebben a forgatókönyvben pip freeze váratlan operációsrendszer-specifikus függőségeket vagy függőségeket vezethet be a helyi fejlesztési környezethez. Ezek a függőségek megszakíthatják a Python-függvényalkalmazást, ha Linuxon fut.

Ajánlott eljárás, hogy ellenőrizze a projekt forráskódjának minden .py fájljában az importutasításokat, majd csak a requirements.txt fájlban szereplő modulokat vegye fel. Ez a gyakorlat garantálja, hogy a csomagok felbontása megfelelően kezelhető a különböző operációs rendszereken.

Cserélje le a csomagot egyenértékűre

Először is tekintse meg a csomag legújabb verzióját a következőben https://pypi.org/project/<package-name>: . Ennek a csomagnak általában saját GitHub-oldala van. Nyissa meg a GitHub Problémák szakaszát, és keressen rá, hogy kijavították-e a problémát. Ha kijavították, frissítse a csomagot a legújabb verzióra.

Előfordulhat, hogy a csomag integrálva van Python standard kódtárba (például pathlib). Ha igen, mivel Azure Functions biztosít bizonyos Python-disztribúciót (Python 3.10, Python 3.11, Python 3.12 és Python 3.13), távolítsa el a csomagot a requirements.txt fájlból.

Ha azonban azt tapasztalja, hogy a probléma nem lett kijavítva, és határidőre jár, javasoljuk, hogy végezzen kutatást, hogy hasonló csomagot találjon a projekthez. A Python-közösség általában számos hasonló kódtárat kínál, amelyeket használhat.

Függőségelkülönítési jelző letiltása

Állítsa a PYTHON_ISOLATE_WORKER_DEPENDENCIES alkalmazásbeállítást 0 értékre.


Hibaelhárítás: a "cygrpc" nem importálható

Ez a szakasz segít a Python-függvényalkalmazásban a "cygrpc"-hez kapcsolódó hibák elhárításában. Ezek a hibák általában a következő Azure Functions-hibaüzenetet eredményezik:

A "cygrpc" név nem importálható a következőből: "grpc._cython"

Ez a hiba akkor fordul elő, ha egy Python-függvényalkalmazás nem indul el egy megfelelő Python-értelmezővel. A hiba kiváltó oka az alábbi problémák egyike:

A "cygrpc" referenciahiba diagnosztizálása

A hivatkozott cygrpchibáknak számos lehetséges oka lehet, amelyekről ebben a szakaszban olvashat.

A Python-értelmező architektúrája nem egyezik meg az operációs rendszer architektúrájával

Ezt az eltérést valószínűleg egy 32 bites Python-értelmező okozza, amely a 64 bites operációs rendszerre van telepítve.

Ha x64 operációs rendszeren fut, győződjön meg arról, hogy a Python 3.10-es, 3.11-es, 3.12-es vagy 3.13-es értelmezője is 64 bites verzió.

A Python-értelmező bitképességét az alábbi parancsok futtatásával ellenőrizheti:

Windows rendszeren a PowerShellben futtassa a következőt py -c 'import platform; print(platform.architecture()[0])': .

Unix-szerű parancsértelmezőben futtassa a(z) python3 -c 'import platform; print(platform.architecture()[0])' parancsot.

Ha eltérés van a Python-értelmező bitje és az operációs rendszer architektúrája között, töltsön le egy megfelelő Python-értelmezőt a Python Software Foundationből.

Az Azure Functions Python-feldolgozó nem támogatja a Python-értelmezőt

Az Azure Functions Python Worker csak bizonyos Python-verziókat támogat.

Ellenőrizze, hogy a Python-értelmező megfelel-e a várt verziónak py --version a Windowsban vagy python3 --version Unix-szerű rendszerekben. Győződjön meg arról, hogy a visszatérési érték a támogatott Python-verziók egyike.

Ha a Python-értelmező verziója nem felel meg az Azure Functions követelményeinek, töltse le a Python-értelmező verzióját, amelyet a Functions támogat a Python Software Foundationből.


Hibaelhárítás: Python 137-es kóddal kilépett

A 137-s kódhibákat általában a Python-függvényalkalmazás memórián kívüli problémái okozzák. Ennek eredményeként a következő Azure Functions-hibaüzenet jelenik meg:

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException: a Python kilépett a 137-es kóddal

Ez a hiba akkor fordul elő, ha egy Python-függvényalkalmazást az operációs rendszer jellel SIGKILL kénytelen leállíteni. Ez a jel általában memóriakihasználtság-hibát jelez a Python-folyamatban. Az Azure Functions platform olyan szolgáltatáskorlátozással rendelkezik, amely leállítja azokat a függvényalkalmazásokat, amelyek túllépik ezt a korlátot.

A függvényalkalmazás memória szűk keresztmetszetének elemzéséhez lásd : Profile Python függvényalkalmazás helyi fejlesztési környezetben.


Hibaelhárítás: a python 139-es kóddal kilépett

Ez a szakasz segítséget nyújt a Python-függvényalkalmazás szegmentálási hibáinak elhárításában. Ezek a hibák általában a következő Azure Functions-hibaüzenetet eredményezik:

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException: a Python a 139-es kóddal kilépett

Ez a hiba akkor fordul elő, ha egy Python-függvényalkalmazást az operációs rendszer jellel SIGSEGV kénytelen leállíteni. Ez a jel a memória szegmentálásának megsértését jelzi, amely egy korlátozott memóriarégióból származó vagy beírt váratlan olvasásból vagy írásból eredhet. A következő szakaszokban felsoroljuk a gyakori kiváltó okokat.

Harmadik féltől származó csomagok által okozott regresszió

A függvényalkalmazás requirements.txt fájljában egy nem rögzített csomag minden Azure-ba történő telepítéskor a legújabb verzióra frissül. A csomagfrissítések potenciálisan olyan regressziókat okozhatnak, amelyek hatással vannak az alkalmazásra. Az ilyen problémák elhárításához tegye megjegyzésbe az importálási utasításokat, tiltsa le a csomaghivatkozásokat, vagy rögzítse a csomagot egy korábbi verzióra requirements.txt.

Nem formázott .pkl-fájlból való kipipálás

Ha a függvényalkalmazás a Python-pickle kódtárat használja egy .pkl-fájlból származó Python-objektum betöltéséhez, lehetséges, hogy a fájl hibásan formázott bájtsztringet vagy érvénytelen címhivatkozást tartalmaz. A probléma elhárításához próbálja meg kikommentelni a pickle.load() függvényt.

Pyodbc-kapcsolat ütközése

Ha a függvényalkalmazás az ODBC-adatbázis-illesztő pyodbc-t használja, lehetséges, hogy több kapcsolat is meg van nyitva egyetlen függvényalkalmazásban. A probléma elkerülése érdekében használja a singleton mintát, és győződjön meg arról, hogy csak egy pyodbc-kapcsolat van használva a függvényalkalmazásban.

Jótanács

Fontolja meg az mssql-python, a Microsoft hivatalos Python-illesztőprogramjának használatát az SQL Serverhez, amely beépített Microsoft Entra-hitelesítési támogatást nyújt, és nem igényel manuális ODBC-illesztőprogram-kezelést.


A szinkronizálási eseményindítók sikertelenek

A hibát Sync triggers failed több probléma is okozhatja. Az egyik lehetséges ok az ügyfél által definiált függőségek és a Python beépített moduljai közötti ütközés, amikor a függvények egy App Service-csomagban futnak. További információ: Csomagkezelés.


Hibaelhárítás: nem sikerült betölteni a fájlt vagy a szerelvényt

Ez a hiba akkor jelenik meg, ha helyileg futtatja a v2 programozási modellt. Ezt a hibát egy ismert probléma okozza, amelyet egy közelgő kiadásban kell megoldani.

Ez egy példaüzenet erre a hibára:

DurableTask.Netherite.AzureFunctions: Nem sikerült betölteni a "Microsoft.Azure.WebJobs.Extensions.DurableTask, Version=2.0.0.0, Culture=neutral, PublicKeyToken=014045d636e89289" fájlt vagy szerelvényt.
A megadott fájl nem található.

A hiba a bővítménycsomag gyorsítótárazási módjával kapcsolatos probléma miatt fordul elő. A probléma elhárításához futtassa ezt a parancsot --verbose a további részletek megtekintéséhez:

func host start --verbose

Valószínűleg akkor tapasztalja ezt a gyorsítótárazási problémát, ha egy olyan bővítménybetöltési naplót lát, mint a Loading startup extension <>, amelyet nem követ a Loaded extension <>.

A probléma megoldása:

  1. Keresse meg az elérési utat a .azure-functions-core-tools következő futtatásával:

    func GetExtensionBundlePath
    
  2. Törölje a könyvtárat .azure-functions-core-tools .

    rm -r <insert path>/.azure-functions-core-tools
    

A rendszer újra létrehozza a gyorsítótár könyvtárát a Core Tools ismételt futtatásakor.

Hibaelhárítás: az Azure Storage-kapcsolat nem oldható fel

Ez a hiba a helyi kimenetben a következő üzenetként jelenhet meg:

Microsoft.Azure.WebJobs.Extensions.DurableTask: Nem sikerült feloldani a "Storage" nevű Azure Storage-kapcsolatot.
Az érték nem lehet null. („provider” paraméter)

Ez a hiba annak a következménye, hogy a bővítmények helyileg vannak betöltve a csomagból. A hiba elhárításához hajtsa végre az alábbi műveletek egyikét:

  • Használjon olyan tárolóemulátort, mint az Azurite. Ez a lehetőség akkor jó, ha nem tervez tárfiókot használni a függvényalkalmazásban.

  • Hozzon létre egy tárfiókot, és adjon hozzá egy kapcsolati sztring a AzureWebJobsStorage környezeti változóhoz a localsettings.json fájlban. Ezt a lehetőséget akkor használhatja, ha tárfiók-eseményindítót vagy kötést használ az alkalmazással, vagy ha már rendelkezik tárfiókkal. Első lépésként lásd: Tárfiók létrehozása.

A függvények nem találhatók meg a telepítés után

Számos gyakori összeállítási probléma miatt előfordulhat, hogy a gazdaalkalmazás a Python-függvényeket egy látszólag sikeres üzembe helyezés után nem találja meg:

  • Az ügynökkészletnek az Ubuntu-on kell futnia, hogy a csomagok megfelelően legyenek visszaállítva a buildelési lépésből. Győződjön meg arról, hogy az üzembehelyezési sablonhoz Ubuntu-környezet szükséges a buildeléshez és üzembe helyezéshez.

  • Ha a függvényalkalmazás nem a forrásadattár gyökerénél van, győződjön meg arról, hogy a pip install lépés a mappa létrehozásának .python_packages megfelelő helyére hivatkozik. Ne feledje, hogy ez az elérési út megkülönbözteti a kis- és nagybetűket, például ebben a parancspéldában:

    pip install --target="./FunctionApp1/.python_packages/lib/site-packages" -r ./FunctionApp1/requirements.txt
    
  • A sablonnak létre kell hoznia egy üzembehelyezési csomagot, amely betölthető a /home/site/wwwrootrendszerbe. Az Azure Pipelinesban ezt a ArchiveFiles feladat végzi el.

Fejlesztési problémák az Azure Portalon

Az Azure Portal használatakor vegye figyelembe ezeket az ismert problémákat és azok kerülő megoldásait:

  • A függvénykód portálon való írására általános korlátozások vonatkoznak. További információ: Az Azure Portal fejlesztési korlátozásai.
  • Ha törölni szeretne egy függvényt egy függvényalkalmazásból a portálon, távolítsa el magát a függvénykódot a fájlból. A Delete gomb nem működik a függvény eltávolításához a Python v2 programozási modell használatakor.
  • Amikor függvényt hoz létre a portálon, előfordulhat, hogy arra figyelmeztetik, hogy a fejlesztéshez másik eszközt használjon. Több olyan eset is van, amikor nem lehet szerkeszteni a kódot a portálon, például ha szintaxishibát észleltek. Ezekben a forgatókönyvekben a Visual Studio Code vagy az Azure Functions Core Tools használatával fejlesztheti és teheti közzé a függvénykódot.

Következő lépések

Ha nem tudja megoldani a problémát, forduljon az Azure Functions csapatához: