Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
Konkrétně s modelem v2 jsou zde některé známé problémy a jejich alternativní řešení:
Mezi obecné průvodce odstraňováním potíží pro funkce Pythonu patří:
Ř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ů:
- Balíček nebyl nalezen.
- Balíček se nevyřešil správným linuxovým kolečkem.
- Balíček není kompatibilní s verzí interpretu Pythonu.
- Balíček je v konfliktu s jinými balíčky.
- Balíček podporuje pouze platformy Windows a macOS.
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_PACKAGEa 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_PACKAGEnastavenou na1, přejděte nahttps://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackagesa stáhněte soubor z adresy URL nejnovějšíhohref. - Pokud aplikace funkcí nemá ani jedno z předchozích nastavení aplikace, přejděte na
https://<app-name>.scm.azurewebsites.net/api/settingsa najděte adresu URL v částiSCM_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/DebugConsolea 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ů:
- Interpret jazyka Python neodpovídá architektuře operačního systému.
- Pracovní proces Pythonu ve službě Azure Functions nepodporuje interpret Pythonu.
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:
Najděte
.azure-functions-core-toolscestu spuštěním příkazu:func GetExtensionBundlePath.azure-functions-core-toolsOdstraň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í
AzureWebJobsStoragev 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 installkrok 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í úlohaArchiveFiles.
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í:
- Psaní kódu funkce na portálu má obecná omezení. Další informace najdete v tématu Omezení vývoje na webu Azure Portal.
- 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: