Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
Kifejezetten a v2 modell esetében az alábbiak az ismert problémák és a hozzájuk tartozó kerülőmegoldások:
- 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 wheellel
- 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ásban a(z)
WEBSITE_RUN_FROM_PACKAGEértéke1van á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újabbhrefURL-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/settingshelyre, és keresse meg az URL-címet a(z)SCM_RUN_FROM_PACKAGEalatt. 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/DebugConsoleoldalra, és tekintse meg a(z)/home/site/wwwrootalatti 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 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 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:
Keresse meg az elérési utat a
.azure-functions-core-toolskövetkező futtatásával:func GetExtensionBundlePathTö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
AzureWebJobsStoragekö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 installlépés a mappa létrehozásának.python_packagesmegfelelő 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.txtA sablonnak létre kell hoznia egy üzembehelyezési csomagot, amely betölthető a
/home/site/wwwrootrendszerbe. Az Azure Pipelinesban ezt aArchiveFilesfeladat 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: