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.

Feljegyzé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ás be van WEBSITE_RUN_FROM_PACKAGE állítva 1, nyissa meg 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ő alkalmazásbeállítások egyikével sem, keresse https://<app-name>.scm.azurewebsites.net/api/settings meg a következő URL-címet SCM_RUN_FROM_PACKAGE: . 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, nyissa meg https://<app-name>.scm.azurewebsites.net/DebugConsole és tekintse meg a tartalmat a következő alatt /home/site/wwwroot: .

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ó

Ugrás vagy .python_packages/lib/python3.6/site-packages/<package-name>.python_packages/lib/site-packages/<package-name>. 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 vagy .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info.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

Ugrás vagy .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info.python_packages/lib/site-packages/<package-name>-<version>-dist-info. A szövegszerkesztőben nyissa meg a METADATA fájlt, és ellenőrizze az Osztályozók: szakaszt. Ha a szakasz nem tartalmazza Python :: 3a csomagverziótPython :: 3.7Python :: 3.6Python :: 3.8, vagy Python :: 3.9túl régi, vagy valószínűbb, hogy már nincs karbantartásban.

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 ellenőrizte, hogy a csomag helyesen van-e feloldva a megfelelő Linux-kerekekkel, ütközés lehet más csomagokkal. Egyes csomagokban a PyPi dokumentációja tisztázhatja a nem kompatibilis modulokat. Ebben a példában azure 4.0.0például a következő utasí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 szövegszerkesztőt, és jelölje be a csomagot.https://pypi.org/project/<package-name> 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 pip freeze , hogy a projekt inicializálása során exportálja a virtuális környezetet requirements.txt a Windows vagy macOS rendszerű gépről.

A probléma megoldásához lásd : A csomag cseréje egyenértékű vagyKézmű requirements.txt.

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. Annak módja, hogy biztosan az üzembe helyezési módszertő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 használja func azure functionapp publish <app-name> --build-native-deps az üzembe helyezéshez.

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 kompatibilisnek kell lennie OS Independentaz operációs rendszerrel vagy POSIX :: Linux az operációs rendszerrel.POSIX A programozási nyelvnek a következőket is tartalmaznia kell: Python :: 3, Python :: 3.6, Python :: 3.7, Python :: 3.8vagy Python :: 3.9.

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.

Kézműves requirements.txt

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.

Az ajánlott eljárás az importálási utasítás ellenőrzése minden .py fájlból a projekt forráskódjában, majd csak a modulok beadása a requirements.txt fájlban. 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 lett a Python Standard Librarybe (például pathlib). Ha igen, mivel bizonyos Python-disztribúciót biztosítunk az Azure Functionsben (Python 3.6, Python 3.7, Python 3.8 és Python 3.9), a requirements.txt fájlban lévő csomagot el kell távolítani.

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ás értékét a következő értékre0: .


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ő nem egyezik az operációsrendszer-architektúrá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.6-os, 3.7-es, 3.8-os vagy 3.9-es értelmezője is 64 bites verzióban van.

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ű rendszerhéjon futtassa a parancsot python3 -c 'import platform; print(platform.architecture()[0])'.

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 eredmény az egyik támogatott Python-verzió.

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: a Python kilépett a 137-es kóddal

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 a 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.

Regresszió külső csomagokból

A függvényalkalmazás requirements.txt fájljában a rendszer minden üzembe helyezés során frissíti a nem rögzített csomagokat a legújabb verzióra az Azure-ba való üzembe helyezés során. 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 megoldásához próbálja meg megjegyzésbe fűzni a függvényt pickle.load() .

Pyodbc-kapcsolat ütközése

Ha a függvényalkalmazás a népszerű 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.


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 ezt a gyorsítótárazási problémát tapasztalja, amikor egy bővítménybetöltési naplót lát, amelyet Loading startup extension <> nem követ a Loaded extension <>rendszer.

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. (A "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 az üzembe helyezés után

Számos gyakori buildelési probléma esetén előfordulhat, hogy a Python-függvényeket a gazdagép nem találja a látszólag sikeres üzembe helyezés után:

  • 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 a hely megkülönbözteti a kis- és nagybetűk megkülönböztetett helyét, például ebben a parancs pé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 egy másik fejlesztési eszköz használatára van szükség. 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: