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:
A v2-modellel kapcsolatban az alábbiakban ismert problémákat és kerülő megoldásokat talál:
- Nem sikerült betölteni a fájlt vagy a szerelvényt
- Nem sikerült feloldani a Storage nevű Azure Storage-kapcsolatot
A Python Functions általános hibaelhárítási útmutatói 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:
- A csomag nem található
- A csomag nem oldható fel megfelelő Linux-kerékkel
- A csomag nem kompatibilis a Python-értelmező verziójával
- A csomag ütközik más csomagokkal
- A csomag csak Windows és macOS platformokat támogat
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ítva1
, nyissa meghttps://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackages
és töltse le a fájlt a legújabbhref
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ímetSCM_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 :: 3
a csomagverziótPython :: 3.7
Python :: 3.6
Python :: 3.8
, vagy Python :: 3.9
tú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.0
pé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 Independent
az 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.8
vagy 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 Python-értelmező nem egyezik az operációsrendszer-architektúrával
- Az Azure Functions Python-feldolgozó nem támogatja a Python-értelmezőt
A "cygrpc" referenciahiba diagnosztizálása
A hivatkozott cygrpc
hibá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:
Keresse meg az elérési utat a
.azure-functions-core-tools
következő futtatásával:func GetExtensionBundlePath
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/wwwroot
rendszerbe. Az Azure Pipelinesban ezt aArchiveFiles
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: