Řešení chyb Pythonu ve službě Azure Functions

Tento článek obsahuje informace, které vám pomůžou řešit chyby s funkcemi Pythonu ve službě Azure Functions. Tento článek podporuje programovací modely v1 i v2. V horní části článku vyberte model, který chcete použít.

Poznámka:

Programovací model Pythonu v2 je podporován pouze v modulu runtime funkcí 4.x. Další informace najdete v přehledu verzí modulu runtime Azure Functions.

Tady jsou části řešení běžných problémů s funkcemi Pythonu:

Řešení potíží: ModuleNotFoundError

Tato část vám pomůže vyřešit chyby související s modulem v aplikaci funkcí Pythonu. Tyto chyby obvykle vedou k následující chybové zprávě služby Azure Functions:

Výjimka: ModuleNotFoundError: Žádný modul s názvem "module_name".

K této chybě dochází v případě, že se aplikaci funkcí Pythonu nepodaří načíst modul Pythonu. Hlavní příčinou této chyby je jeden z následujících problémů:

Zobrazení souborů projektu

Pokud chcete zjistit skutečnou příčinu vašeho problému, potřebujete získat soubory projektu Pythonu, které běží ve vaší aplikaci funkcí. Pokud nemáte soubory projektu na místním počítači, můžete je získat jedním z následujících způsobů:

  • Pokud má aplikace funkcí nastavení aplikace WEBSITE_RUN_FROM_PACKAGE a jeho hodnota je adresa URL, stáhněte soubor tak, že adresu URL zkopírujete a vložíte do prohlížeče.
  • Pokud má aplikace Function App položku WEBSITE_RUN_FROM_PACKAGE nastavenou na 1, přejděte na https://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackages a stáhněte soubor z adresy URL nejnovějšího href.
  • Pokud aplikace funkcí nemá ani jedno z předchozích nastavení aplikace, přejděte na https://<app-name>.scm.azurewebsites.net/api/settings a najděte adresu URL v části SCM_RUN_FROM_PACKAGE. Stáhněte si soubor zkopírováním a vložením adresy URL do prohlížeče.
  • Pokud návrhy problém vyřeší, přejděte na https://<app-name>.scm.azurewebsites.net/DebugConsole a zobrazte obsah v části /home/site/wwwroot.

Zbývající část tohoto článku vám pomůže vyřešit potenciální příčiny této chyby kontrolou obsahu aplikace funkcí, identifikací původní příčiny a řešením konkrétního problému.

Diagnostikujte ModuleNotFoundError

Tato část podrobně popisuje potenciální původní příčiny chyb souvisejících s modulem. Jakmile zjistíte, která je pravděpodobnou hlavní příčinou, můžete přejít na související zmírnění rizik.

Balíček nebyl nalezen.

Přejděte na .python_packages/lib/python3.6/site-packages/<package-name> nebo .python_packages/lib/site-packages/<package-name>. Pokud cesta k souboru neexistuje, tato chybějící cesta je pravděpodobně hlavní příčinou.

Tento problém může způsobit použití nástrojů třetích stran nebo zastaralých nástrojů během nasazování.

Chcete-li tento problém zmírnit, viz Povolit vzdálené sestavení nebo Sestavit nativní závislosti.

Balíček není rozpoznán pomocí správného Linux wheelu.

Přejděte na .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info nebo .python_packages/lib/site-packages/<package-name>-<version>-dist-info. Pomocí oblíbeného textového editoru otevřete soubor kolečka a zkontrolujte oddíl Značka: Problémem může být, že hodnota značky neobsahuje Linux.

Funkce Pythonu běží jenom v Linuxu v Azure. Modul runtime pro Functions v2.x běží na Debianu Stretch a runtime v3.x běží na Debianu Buster. Očekává se, že artefakt bude obsahovat správné binární soubory Linuxu. Pokud použijete --build local příznak v nástrojích Core Tools, třetích stranách nebo zastaralých nástrojích, může to způsobit použití starších binárních souborů.

Chcete-li problém zmírnit, viz Povolení vzdáleného sestavení nebo Sestavení nativních závislostí.

Balíček není kompatibilní s verzí interpretu Pythonu.

Přejděte na .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info nebo .python_packages/lib/site-packages/<package-name>-<version>-dist-info. V textovém editoru otevřete soubor METADATA a zkontrolujte oddíl Klasifikátory: Pokud sekce neobsahuje Python :: 3, Python :: 3.10, Python :: 3.11, Python :: 3.12 nebo Python :: 3.13, je verze balíčku buď příliš stará, nebo spíše už není udržovaná.

Verzi Pythonu vaší aplikace funkcí můžete zkontrolovat na webu Azure Portal. Přejděte na stránku prostředku Overview vaší aplikace Function App a vyhledejte verzi modulu runtime. Verze modulu runtime podporuje verze Pythonu, jak je popsáno v přehledu verzí modulu runtime Azure Functions.

Pokud chcete tento problém zmírnit, přečtěte si téma Aktualizace balíčku na nejnovější verzi nebo nahrazení balíčku ekvivalenty.

Balíček je v konfliktu s jinými balíčky.

Pokud jste ověřili, že se balíček správně vyřešil se správnými linuxovými koly, může dojít ke konfliktu s jinými balíčky. V některých balíčcích může dokumentace PyPi objasnit nekompatibilní moduly. Například v azure 4.0.0příkazu najdete následující příkaz:

Tento balíček není kompatibilní s azure-storage. Pokud jste nainstalovali azure-storage nebo jste nainstalovali Azure 1.x/2.x a neodinstalovali azure-storage, musíte nejprve odinstalovat azure-storage.

Dokumentaci k verzi vašeho balíčku najdete v https://pypi.org/project/<package-name>/<package-version>.

Pokud chcete tento problém zmírnit, přečtěte si téma Aktualizace balíčku na nejnovější verzi nebo nahrazení balíčku ekvivalenty.

Balíček podporuje pouze platformy Windows a macOS.

Otevřete soubor requirements.txt v textovém editoru a zkontrolujte balíček v https://pypi.org/project/<package-name>. Některé balíčky běží jenom na platformách Windows a macOS. Například pywin32 běží jenom ve Windows.

K Module Not Found chybě nemusí dojít, když používáte Windows nebo macOS pro místní vývoj. Balíček se ale nepodaří importovat do služby Azure Functions, která používá Linux za běhu. Příčinou tohoto problému je pravděpodobně použití pip freeze k exportu virtuálního prostředí do requirements.txt z počítače s Windows nebo macOS během inicializace projektu.

Chcete-li tento problém zmírnit, viz Nahraďte balíček ekvivalentními balíčky nebo Vytvořte requirements.txt ručně.

Zmírnit chybu ModuleNotFoundError

Níže jsou uvedené potenciální zmírnění problémů souvisejících s modulem. Pomocí výše uvedených diagnostik můžete určit, která z těchto omezení rizik se má vyzkoušet.

Povolení vzdáleného sestavení

Ujistěte se, že je povolené vzdálené sestavení. Způsob, jakým se ujistíte, závisí na vaší metodě nasazení.

Ujistěte se, že je nainstalovaná nejnovější verze rozšíření Azure Functions pro Visual Studio Code . Ověřte, že soubor .vscode/settings.json existuje a obsahuje nastavení "azureFunctions.scmDoBuildDuringDeployment": true. Pokud ne, vytvořte soubor s povoleným azureFunctions.scmDoBuildDuringDeployment nastavením a znovu nasaďte projekt.

Vytváření nativních závislostí

Ujistěte se, že jsou nainstalované nejnovější verze Dockeru i nástrojů Azure Functions Core Tools . Přejděte do složky projektu místní funkce a použijte func azure functionapp publish <app-name> --build-native-deps ji k nasazení.

Aktualizace balíčku na nejnovější verzi

V nejnovější verzi balíčku https://pypi.org/project/<package-name> se podívejte do sekce Klasifikátory: Balíček by měl být OS Independent nebo kompatibilní s POSIX nebo s POSIX :: Linux v Operačním systému. Programovací jazyk by také měl obsahovat: Python :: 3, Python :: 3.10, Python :: 3.11, Python :: 3.12, nebo Python :: 3.13.

Pokud jsou tyto položky balíčku správné, můžete balíček aktualizovat na nejnovější verzi změnou řádku <package-name>~=<latest-version> v requirements.txt.

Ručně vytvořit requirements.txt

Někteří vývojáři používají pip freeze > requirements.txt k vygenerování seznamu balíčků Pythonu pro vývojová prostředí. I když by tato pohodlí měla ve většině případů fungovat, můžou se zde vyskytovat problémy ve scénářích nasazení mezi platformami, jako je místní vývoj funkcí ve Windows nebo macOS, ale publikování do aplikace funkcí, která běží v Linuxu. V tomto scénáři může pip freeze zavést neočekávané závislosti na konkrétním operačním systému nebo závislosti pro vaše místní vývojové prostředí. Tyto závislosti můžou aplikaci funkcí Pythonu přerušit, když běží v Linuxu.

Osvědčeným postupem je zkontrolovat příkazy importu v každém souboru .py ve zdrojovém kódu projektu a potom do správy verzí zařadit pouze moduly uvedené v souboru requirements.txt. Tento postup zaručuje, že řešení balíčků je možné správně zpracovat v různých operačních systémech.

Nahraďte balíček ekvivalentními balíčky

Nejprve se podívejte na nejnovější verzi balíčku v https://pypi.org/project/<package-name>. Tento balíček má obvykle vlastní stránku GitHubu. Přejděte do části Problémy na GitHubu a vyhledejte, jestli se váš problém vyřešil. Pokud byla opravena, aktualizujte balíček na nejnovější verzi.

Někdy může být balíček integrovaný do Python standardní knihovny (například pathlib). Pokud ano, protože Azure Functions poskytuje určitou distribuci Python (Python 3.10, Python 3.11, Python 3.12 a Python 3.13), odeberte balíček ze souboru requirements.txt.

Pokud ale zjistíte, že problém nebyl opravený a že jste ve lhůtě, doporučujeme, abyste provedli průzkum, abyste našli podobný balíček pro váš projekt. Komunita Pythonu vám obvykle poskytuje širokou škálu podobných knihoven, které můžete použít.

Zakázat příznak izolace závislostí

Nastavte nastavení aplikace PYTHON_ISOLATE_WORKER_DEPENDENCIES na hodnotu 0.


Řešení potíží: Nejde importovat cygrpc

Tato část vám pomůže vyřešit chyby související s cygrpc v aplikaci funkcí Pythonu. Tyto chyby obvykle vedou k následující chybové zprávě služby Azure Functions:

Nelze importovat název cygrpc z grpc._cython

K této chybě dochází v případě, že se aplikaci funkcí Pythonu nepodaří spustit se správným interpretem Pythonu. Hlavní příčinou této chyby je jeden z následujících problémů:

Diagnostikujte chybu odkazu „cygrpc“

Existuje několik možných příčin chyb, které odkazují na cygrpc, a které jsou podrobně popsány v této části.

Interpret jazyka Python neodpovídá architektuře operačního systému.

Příčinou této neshody je pravděpodobně 32bitový interpret Pythonu nainstalovaný ve vašem 64bitovém operačním systému.

Pokud používáte operační systém x64, ujistěte se, že Python verze 3.10, 3.11, 3.12 nebo 3.13 je také 64bitová verze.

Bitovost interpretu Pythonu můžete zkontrolovat spuštěním následujících příkazů:

Ve Windows v PowerShellu spusťte py -c 'import platform; print(platform.architecture()[0])'příkaz .

V prostředí podobném unixu spusťte python3 -c 'import platform; print(platform.architecture()[0])'příkaz .

Pokud došlo k neshodě mezi bitovou verzí interpreta Pythonu a architekturou operačního systému, stáhněte si správný interpret Pythonu ze služby Python Software Foundation.

Interpret Pythonu není podporován modulem Azure Functions Python Worker.

Pracovní proces Pythonu služby Azure Functions podporuje pouze konkrétní verze Pythonu.

Zkontrolujte, jestli interpret Pythonu odpovídá očekávané verzi py --version ve Windows nebo python3 --version v systémech Unix. Ujistěte se, že vrácený výsledek je jednou z podporovaných verzí Pythonu.

Pokud vaše verze interpreta Pythonu nesplňuje požadavky pro Azure Functions, stáhněte si místo toho verzi interpretu Pythonu podporovanou funkcí ze služby Python Software Foundation.


Řešení potíží: python se ukončil s kódem 137

Chyby kódu 137 jsou obvykle způsobeny problémy s nedostatkem paměti v aplikaci funkcí Pythonu. V důsledku toho se zobrazí následující chybová zpráva Azure Functions:

Microsoft.Azure.WebJobs.Script.WorkerProcessExitException: Python se ukončil s kódem 137

K této chybě dochází, když je aplikace funkcí Pythonu nucena ukončit operačním systémem signálem SIGKILL . Tento signál obvykle značí chybu nedostatku paměti v procesu Pythonu. Platforma Azure Functions má omezení služby, které ukončí všechny aplikace funkcí, které tento limit překročí.

Pokud chcete analyzovat kritické body paměti v aplikaci funkcí, přečtěte si téma Profil aplikace funkcí Pythonu v místním vývojovém prostředí.


Řešení potíží: python se ukončil s kódem 139

Tato část vám pomůže vyřešit chyby chyb segmentace v aplikaci funkcí Pythonu. Tyto chyby obvykle vedou k následující chybové zprávě služby Azure Functions:

Microsoft.Azure.WebJobs.Script.WorkerProcessExitException: Python se ukončil s kódem 139

K této chybě dochází, když je aplikace funkcí Pythonu nucena ukončit operačním systémem signálem SIGSEGV . Tento signál označuje porušení segmentace paměti, což může mít za následek neočekávané čtení z oblasti omezené paměti nebo zápis do oblasti omezené paměti. V následujících částech uvádíme seznam běžných původních příčin.

Regrese způsobená balíčky třetích stran

V souboru requirements.txt vaší aplikace funkcí se při každém nasazení do Azure nefixovaný balíček aktualizuje na nejnovější verzi. Aktualizace balíčků můžou potenciálně představovat regrese, které ovlivňují vaši aplikaci. Pokud se chcete z těchto problémů zotavit, zakomentujte příkazy importu, zakažte odkazy na balíčky nebo připněte balíček na předchozí verzi v requirements.txt.

Deserializace z poškozeného souboru .pkl

Pokud vaše aplikace funkcí k načtení objektu Pythonu ze souboru .pkl používá knihovnu pickle Pythonu, je možné, že soubor obsahuje poškozený řetězec bajtů nebo neplatný odkaz na adresu. Chcete-li tento problém vyřešit, zkuste zakomentovat funkci pickle.load().

Kolize připojení Pyodbc

Pokud vaše aplikace funkcí používá ovladač databáze ODBC pyodbc, je možné, že v rámci jedné aplikace funkcí je otevřeno více připojení. Abyste tomuto problému předešli, použijte vzor singleton a zajistěte, aby se v celé aplikaci Function App používalo pouze jedno připojení pyodbc.

Návod

Zvažte použití mssql-pythonu, oficiálního ovladače Pythonu od Microsoftu pro SQL Server, který poskytuje integrovanou podporu ověřování Microsoft Entra a nevyžaduje ruční správu ovladačů ODBC.


Spouštěče synchronizace selhaly.

Příčinou chyby Sync triggers failed může být několik problémů. Jednou z možných příčin je konflikt mezi závislostmi definovanými zákazníkem a integrovanými moduly Pythonu při spuštění funkcí v plánu služby App Service. Další informace najdete v tématu Správa balíčků.


Řešení potíží: Nepodařilo se načíst soubor nebo sestavení

Tato chyba se zobrazí při místním spuštění pomocí programovacího modelu v2. Příčinou této chyby je známý problém, který se má vyřešit v nadcházející verzi.

Toto je příklad zprávy pro tuto chybu:

DurableTask.Netherite.AzureFunctions: Nelze načíst soubor nebo sestavení 'Microsoft.Azure.WebJobs.Extensions.DurableTask, Version=2.0.0.0, Culture=neutral, PublicKeyToken=014045d636e89289'.
Systém nemůže najít zadaný soubor.

K chybě dochází kvůli problému s ukládáním sady rozšíření do mezipaměti. Pokud chcete tento problém vyřešit, spusťte tento příkaz --verbose a zobrazte další podrobnosti:

func host start --verbose

Na tento problém s ukládáním do mezipaměti pravděpodobně narážíte, pokud se zobrazuje protokol o načítání rozšíření, například Loading startup extension <>, po kterém nenásleduje Loaded extension <>.

Řešení tohoto problému:

  1. Najděte .azure-functions-core-tools cestu spuštěním příkazu:

    func GetExtensionBundlePath
    
  2. .azure-functions-core-tools Odstraňte adresář.

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

Adresář mezipaměti se znovu vytvoří při opětovném spuštění nástrojů Core Tools.

Řešení potíží: Nejde vyřešit připojení ke službě Azure Storage

Tato chyba se může zobrazit v místním výstupu jako následující zpráva:

Microsoft.Azure.WebJobs.Extensions.DurableTask: Nepodařilo se přeložit připojení k Azure Storage s názvem 'Storage'.
Hodnota nemůže být rovná null. (Parametr Poskytovatel)

Tato chyba je výsledkem toho, jak se rozšíření načítají z sady místně. Pokud chcete tuto chybu vyřešit, proveďte jednu z následujících akcí:

  • Použijte emulátor úložiště, například Azurite. Tato možnost je vhodná, když ve své aplikaci funkcí neplánujete používat účet úložiště.

  • Vytvořte účet úložiště a přidejte připojovací řetězec do proměnné prostředí AzureWebJobsStorage v souboru localsettings.json. Tuto možnost použijte, pokud používáte trigger nebo vazbu účtu úložiště s aplikací nebo pokud máte existující účet úložiště. Než začnete, přečtěte si článek Vytvoření účtu úložiště.

Funkce se po nasazení nenašly.

Existuje několik běžných problémů s sestavením, které můžou způsobit, že hostitel po zdánlivě úspěšném nasazení nenajde funkce Pythonu:

  • Fond agentů musí běžet na Ubuntu, aby bylo zajištěno, že balíčky budou v kroku sestavení správně obnoveny. Ujistěte se, že vaše šablona nasazení vyžaduje prostředí Ubuntu pro sestavení a nasazení.

  • Pokud aplikace funkcí není v kořenovém adresáři zdrojového úložiště, ujistěte se, že pip install krok odkazuje na správné umístění, ve kterém se má složka vytvořit .python_packages . Mějte na paměti, že v tomto umístění se rozlišují malá a velká písmena, například v tomto příkladu příkazu:

    pip install --target="./FunctionApp1/.python_packages/lib/site-packages" -r ./FunctionApp1/requirements.txt
    
  • Šablona musí vygenerovat balíček pro nasazení, který lze načíst do /home/site/wwwroot. V Azure Pipelines to provádí úloha ArchiveFiles .

Problémy s vývojem na webu Azure Portal

Při používání webu Azure Portal vezměte v úvahu tyto známé problémy a jejich alternativní řešení:

  • Pokud chcete odstranit funkci z aplikace funkcí na portálu, odeberte kód funkce ze samotného souboru. Při použití programovacího modelu Pythonu v2 nefunguje tlačítko Odstranit funkci.
  • Při vytváření funkce na portálu můžete být vyzváni k použití jiného nástroje pro vývoj. Existuje několik scénářů, kdy nemůžete upravit kód na portálu, včetně toho, kdy byla zjištěna chyba syntaxe. V těchto scénářích můžete pomocí nástroje Visual Studio Code nebo Azure Functions Core Tools vyvíjet a publikovat kód funkce.

Další kroky

Pokud se vám nedaří problém vyřešit, obraťte se na tým Azure Functions: