Azure İşlevleri'nde Python hatalarını giderme

Bu makalede, Azure İşlevleri Python işlevlerinizle ilgili hataları gidermenize yardımcı olacak bilgiler sağlanır. Bu makale hem v1 hem de v2 programlama modellerini destekler. Makalenin üst kısmındaki seçiciden kullanmak istediğiniz modeli seçin.

Not

Python v2 programlama modeli yalnızca 4.x işlevleri çalışma zamanında desteklenir. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.

Python işlevlerindeki yaygın sorunlar için sorun giderme bölümleri şunlardır:

Sorun giderme: ModuleNotFoundError

Bu bölüm, Python işlev uygulamanızda modülle ilgili hataları gidermenize yardımcı olur. Bu hatalar genellikle aşağıdaki Azure İşlevleri hata iletisiyle sonuçlanır:

Özel durum: ModuleNotFoundError: 'module_name' adlı modül yok.

Bu hata, bir Python işlev uygulaması Python modülünü yükleyemediğinde oluşur. Bu hatanın kök nedeni aşağıdaki sorunlardan biridir:

Proje dosyalarını görüntüleme

Sorununuzun gerçek nedenini belirlemek için işlev uygulamanızda çalışan Python proje dosyalarını almanız gerekir. Proje dosyalarınız yerel bilgisayarınızda yoksa, bunları aşağıdaki yollardan biriyle alabilirsiniz:

  • İşlev uygulamasının bir WEBSITE_RUN_FROM_PACKAGE uygulama ayarı varsa ve değeri bir URL ise, URL'yi kopyalayıp tarayıcınıza yapıştırarak dosyayı indirin.
  • İşlev uygulaması WEBSITE_RUN_FROM_PACKAGE olarak 1ayarlandıysa adresine gidin https://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackages ve dosyayı en son href URL'den indirin.
  • İşlev uygulamasında önceki uygulama ayarlarından biri yoksa adresine gidin https://<app-name>.scm.azurewebsites.net/api/settings ve altında SCM_RUN_FROM_PACKAGEURL'yi bulun. URL'yi kopyalayıp tarayıcınıza yapıştırarak dosyayı indirin.
  • Öneriler sorunu çözerse adresine gidin https://<app-name>.scm.azurewebsites.net/DebugConsole ve altındaki /home/site/wwwrootiçeriği görüntüleyin.

Bu makalenin geri kalanı işlev uygulamanızın içeriğini inceleyerek, kök nedenini belirleyerek ve belirli bir sorunu çözerek bu hatanın olası nedenlerini gidermenize yardımcı olur.

ModuleNotFoundError Tanılama

Bu bölümde modülle ilgili hataların olası kök nedenleri açıklanır. Olası kök nedenin hangisi olduğunu anladıktan sonra ilgili azaltmaya gidebilirsiniz.

Paket bulunamıyor

veya .python_packages/lib/site-packages/<package-name>adresine .python_packages/lib/python3.6/site-packages/<package-name> gidin. Dosya yolu yoksa, bu eksik yol büyük olasılıkla kök nedendir.

Dağıtım sırasında üçüncü taraf veya eski araçların kullanılması bu soruna neden olabilir.

Bu sorunu azaltmak için bkz . Uzak derlemeyi etkinleştirme veya Yerel bağımlılıkları derleme.

Paket doğru Linux tekerleği ile çözümlenmez

veya .python_packages/lib/site-packages/<package-name>-<version>-dist-infoadresine .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info gidin. Sık kullandığınız metin düzenleyiciyi kullanarak tekerlek dosyasını açın ve Etiket: bölümünü denetleyin. Sorun, etiket değerinin Linux içermemesi olabilir.

Python işlevleri yalnızca Azure'da Linux üzerinde çalışır. İşlevler çalışma zamanı v2.x, Debian Stretch üzerinde, v3.x çalışma zamanı ise Debian Buster üzerinde çalışır. Yapıtın doğru Linux ikili dosyalarını içermesi beklenir. Core Tools, üçüncü taraf veya eski araçlarda bayrağını kullandığınızda --build local , bu eski ikili dosyaların kullanılmasına neden olabilir.

Sorunu azaltmak için bkz . Uzaktan derlemeyi etkinleştirme veya Yerel bağımlılıkları derleme.

Paket Python yorumlayıcı sürümüyle uyumlu değil

veya .python_packages/lib/site-packages/<package-name>-<version>-dist-infoadresine .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info gidin. Metin düzenleyicinizde METADATA dosyasını açın ve Sınıflandırıcılar: bölümünü denetleyin. Bölümünde Python :: 3, , Python :: 3.6, Python :: 3.7, Python :: 3.8veya Python :: 3.9yoksa paket sürümü çok eski veya daha büyük olasılıkla bakım dışıdır.

İşlev uygulamanızın Python sürümünü Azure portalından de kontrol edebilirsiniz. Çalışma zamanı sürümünü bulmak için işlev uygulamanızın Genel Bakış kaynak sayfasına gidin. Çalışma zamanı sürümü, Azure İşlevleri çalışma zamanı sürümlerine genel bakış bölümünde açıklandığı gibi Python sürümlerini destekler.

Sorunu azaltmak için bkz . Paketinizi en son sürüme güncelleştirme veya Paketi eşdeğerleriyle değiştirme.

Paket diğer paketlerle çakişer

Paketin doğru Linux tekerlekleriyle doğru çözümlendiğini doğruladıysanız, diğer paketlerle çakışma olabilir. Bazı paketlerde PyPi belgeleri uyumsuz modülleri netleştirebilir. Örneğin, içinde azure 4.0.0aşağıdaki deyimi bulursunuz:

Bu paket azure-storage ile uyumlu değildir. azure-storage'ı yüklediyseniz veya azure 1.x/2.x'i yüklediyseniz ve azure-storage'ı kaldırmadıysanız, önce azure-storage'ı kaldırmanız gerekir.

Paket sürümünüzle ilgili belgeleri içinde https://pypi.org/project/<package-name>/<package-version>bulabilirsiniz.

Sorunu azaltmak için bkz . Paketinizi en son sürüme güncelleştirme veya Paketi eşdeğerleriyle değiştirme.

Paket yalnızca Windows ve macOS platformlarını destekler

requirements.txt öğesini bir metin düzenleyicisiyle açın ve içinde https://pypi.org/project/<package-name>paketi denetleyin. Bazı paketler yalnızca Windows ve macOS platformlarında çalışır. Örneğin, pywin32 yalnızca Windows üzerinde çalışır.

Yerel Module Not Found geliştirme için Windows veya macOS kullanırken hata oluşmayabilir. Ancak paket, çalışma zamanında Linux kullanan Azure İşlevleri içeri aktarılamıyor. Bu sorun, projenin başlatılması sırasında kullanarak pip freeze sanal ortamı Windows veya macOS makinenizden requirements.txt dışarı aktarma işleminden kaynaklanabilir.

Sorunu azaltmak için bkz . Paketi eşdeğerlerle değiştirme veya El sanatları requirements.txt.

ModuleNotFoundError'ı Azaltma

Modülle ilgili sorunlar için olası risk azaltma işlemleri aşağıda verilmiştir. Bu risk azaltmalarından hangisinin deneneceğini belirlemek için daha önce bahsedilen tanılamaları kullanın.

Uzak derlemeyi etkinleştirme

Uzak derlemenin etkinleştirildiğinden emin olun. Emin olmanız gereken yol, dağıtım yönteminize bağlıdır.

Visual Studio Code için Azure İşlevleri uzantısının en son sürümünün yüklendiğinden emin olun. .vscode/settings.json dosyasının mevcut olduğunu ve ayarını "azureFunctions.scmDoBuildDuringDeployment": trueiçerdiğini doğrulayın. Etkinleştirilmezse, ayar etkin olarak dosyayı azureFunctions.scmDoBuildDuringDeployment oluşturun ve projeyi yeniden dağıtın.

Yerel bağımlılıklar oluşturma

Hem Docker hem de Azure İşlevleri Core Tools'un en son sürümlerinin yüklendiğinden emin olun. Yerel işlev proje klasörünüze gidin ve dağıtım için kullanın func azure functionapp publish <app-name> --build-native-deps .

Paketinizi en son sürüme güncelleştirme

öğesinin en son paket sürümünde https://pypi.org/project/<package-name>Sınıflandırıcılar: bölümünü denetleyin. Paket, veya ile uyumlu POSIX veya POSIX :: Linux İşletim Sistemi'nde olmalıdırOS Independent. Ayrıca, programlama dili şunları içermelidir: Python :: 3, Python :: 3.6, Python :: 3.7, Python :: 3.8veya Python :: 3.9.

Bu paket öğeleri doğruysa, requirements.txt satırını <package-name>~=<latest-version> değiştirerek paketi en son sürüme güncelleştirebilirsiniz.

El sanatları requirements.txt

Bazı geliştiriciler, geliştirme ortamları için Python paketlerinin listesini oluşturmak için kullanır pip freeze > requirements.txt . Bu kolaylık çoğu durumda işe yarasa da, Windows veya macOS'ta yerel olarak işlev geliştirme, ancak Linux üzerinde çalışan bir işlev uygulamasında yayımlama gibi platformlar arası dağıtım senaryolarında sorunlar olabilir. Bu senaryoda, pip freeze yerel geliştirme ortamınız için beklenmeyen işletim sistemine özgü bağımlılıklar veya bağımlılıklar oluşturabilir. Bu bağımlılıklar, Linux üzerinde çalışırken Python işlev uygulamasını bozabilir.

En iyi yöntem, proje kaynak kodunuzdaki her .py dosyasından içeri aktarma deyimini denetlemek ve ardından yalnızca requirements.txt dosyasındaki modülleri iade etmektir. Bu uygulama, paketlerin çözümünün farklı işletim sistemlerinde düzgün bir şekilde işlenebileceğini garanti eder.

Paketi eşdeğerlerle değiştirme

İlk olarak, içindeki paketin https://pypi.org/project/<package-name>en son sürümüne göz atın. Bu paketin genellikle kendi GitHub sayfası vardır. GitHub'da Sorunlar bölümüne gidin ve sorununuzun düzeltilip giderildiğini görmek için arama yapın. Düzeltildiyse paketi en son sürüme güncelleştirin.

Bazen paket Python Standart Kitaplığı ile (örneğinpathlib) tümleştirilmiş olabilir. Bu durumda, Azure İşlevleri belirli bir Python dağıtımı sağladığımız için (Python 3.6, Python 3.7, Python 3.8 ve Python 3.9), requirements.txt dosyanızdaki paket kaldırılmalıdır.

Ancak, sorunun düzeltilmediğini ve son tarihe ulaşıldığını fark ederseniz, projeniz için benzer bir paket bulmak için biraz araştırma yapmanızı öneririz. Python topluluğu genellikle kullanabileceğiniz çok çeşitli benzer kitaplıklar sunar.

Bağımlılık yalıtımı bayrağını devre dışı bırakma

PYTHON_ISOLATE_WORKER_DEPENDENCIES uygulama ayarını değerine 0ayarlayın.


Sorun giderme: 'cygrpc' içeri aktarılamıyor

Bu bölüm, Python işlev uygulamanızdaki 'cygrpc' ile ilgili hataları gidermenize yardımcı olur. Bu hatalar genellikle aşağıdaki Azure İşlevleri hata iletisiyle sonuçlanır:

'cygrpc' adı 'grpc._cython' içinden içeri aktarılamıyor

Bu hata, bir Python işlev uygulaması düzgün bir Python yorumlayıcısıyla başlayamazsa oluşur. Bu hatanın kök nedeni aşağıdaki sorunlardan biridir:

'cygrpc' başvuru hatasını tanılama

Başvuruda bulunan hataların cygrpcçeşitli olası nedenleri vardır ve bunlar bu bölümde ayrıntılı olarak anlatılmıştır.

Python yorumlayıcısı işletim sistemi mimarisini yanlış algılar

Bu uyuşmazlık büyük olasılıkla 64 bit işletim sisteminizde yüklü olan 32 bit Python yorumlayıcıdan kaynaklanır.

x64 işletim sisteminde çalışıyorsanız Python sürüm 3.6, 3.7, 3.8 veya 3.9 yorumlayıcınızın da 64 bit sürümde olduğundan emin olun.

Aşağıdaki komutları çalıştırarak Python yorumlayıcınızın bitliğini de kontrol edebilirsiniz:

PowerShell'de Windows'ta komutunu çalıştırın py -c 'import platform; print(platform.architecture()[0])'.

Unix benzeri bir kabuk üzerinde komutunu çalıştırın python3 -c 'import platform; print(platform.architecture()[0])'.

Python yorumlayıcı bitliği ile işletim sistemi mimarisi arasında bir uyuşmazlık varsa Python Software Foundation'dan uygun bir Python yorumlayıcısı indirin.

Python yorumlayıcısı Azure İşlevleri Python Çalışanı tarafından desteklenmiyor

Azure İşlevleri Python Çalışanı yalnızca belirli Python sürümlerini destekler.

Python yorumlayıcınızın Windows'da veya python3 --version Unix benzeri sistemlerde beklenen sürümünüzle py --version eşleşip eşleşmediğini denetleyin. Döndürülen sonucun desteklenen Python sürümlerinden biri olduğundan emin olun.

Python yorumlayıcı sürümünüz Azure İşlevleri gereksinimlerini karşılamıyorsa Python Software Foundation'dan İşlevler tarafından desteklenen bir Python yorumlayıcı sürümü indirin.


Sorun giderme: Python'dan 137 koduyla çıkıldı

Kod 137 hataları genellikle Python işlev uygulamanızdaki yetersiz bellek sorunlarından kaynaklanıyor. Sonuç olarak, aşağıdaki Azure İşlevleri hata iletisini alırsınız:

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException : python 137 koduyla çıktı

Bu hata, bir Python işlev uygulaması işletim sistemi tarafından bir SIGKILL sinyalle sonlandırmaya zorlandığında oluşur. Bu sinyal genellikle Python işleminizde bellek yetersiz hatası olduğunu gösterir. Azure İşlevleri platformu, bu sınırı aşan tüm işlev uygulamalarını sonlandıran bir hizmet sınırlaması vardır.

İşlev uygulamanızdaki bellek sorunlarını analiz etmek için bkz . Yerel geliştirme ortamında Python işlev uygulamasının profilini oluşturma.


Sorun giderme: Python'dan 139 koduyla çıkıldı

Bu bölüm, Python işlev uygulamanızdaki segmentasyon hatası hatalarını gidermenize yardımcı olur. Bu hatalar genellikle aşağıdaki Azure İşlevleri hata iletisiyle sonuçlanır:

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException : python 139 koduyla çıktı

Bu hata, bir Python işlev uygulaması işletim sistemi tarafından bir SIGSEGV sinyalle sonlandırmaya zorlandığında oluşur. Bu sinyal, bellek segmentasyonunun ihlalini gösterir ve bu da kısıtlanmış bir bellek bölgesinden beklenmeyen bir okuma veya yazma işleminden kaynaklanabilir. Aşağıdaki bölümlerde yaygın kök nedenlerin bir listesini sağlıyoruz.

Üçüncü taraf paketlerden bir regresyon

İşlev uygulamanızın requirements.txt dosyasında, her Azure dağıtımı sırasında sabitlenmemiş bir paket en son sürüme yükseltilir. Paket güncelleştirmeleri, uygulamanızı etkileyen regresyonlara neden olabilir. Bu tür sorunlardan kurtarmak için içeri aktarma deyimlerini açıklama satırı yapma, paket başvurularını devre dışı bırakma veya paketi requirements.txt önceki bir sürüme sabitleme.

Yanlış biçimlendirilmiş bir .pkl dosyasından seçim kaldırma

İşlev uygulamanız bir .pkl dosyasından Python nesnesi yüklemek için Python pickle kitaplığını kullanıyorsa, dosyada hatalı biçimlendirilmiş bayt dizesi veya geçersiz bir adres başvurusu olabilir. Bu sorundan kurtulmak için işleve pickle.load() açıklama eklemeyi deneyin.

Pyodbc bağlantı çakışması

İşlev uygulamanız popüler ODBC veritabanı sürücüsü pyodbc kullanıyorsa, tek bir işlev uygulamasında birden çok bağlantı açık olabilir. Bu sorunu önlemek için tekil deseni kullanın ve işlev uygulaması genelinde yalnızca bir pyodbc bağlantısı kullanıldığından emin olun.


Eşitleme tetikleyicileri başarısız oldu

Hataya Sync triggers failed çeşitli sorunlar neden olabilir. Olası nedenlerden biri, işlevleriniz bir App Service planında çalıştırıldığında müşteri tanımlı bağımlılıklarla Python yerleşik modülleri arasındaki çakışmadır. Daha fazla bilgi için bkz . Paket yönetimi.


Sorun giderme: dosya veya derleme yüklenemedi

Bu hatayı, v2 programlama modelini kullanarak yerel olarak çalıştırırken görebilirsiniz. Bu hatanın nedeni, gelecek sürümde çözülecek bilinen bir sorundur.

Bu, bu hata için örnek bir iletidir:

DurableTask.Netherite.AzureFunctions: 'Microsoft.Azure.WebJobs.Extensions.DurableTask, Version=2.0.0.0, Culture=neutral, PublicKeyToken=014045d636e89289' dosyası veya derlemesi yüklenemedi.
Sistem belirtilen dosyayı bulamıyor.

Uzantı paketinin önbelleğe alınma şekliyle ilgili bir sorun nedeniyle hata oluşur. Sorunu gidermek için, diğer ayrıntıları görmek için şu komutu ile --verbose çalıştırın:

func host start --verbose

Gibi bir uzantı yükleme günlüğü Loading startup extension <> izlenmiyorsa Loaded extension <>büyük olasılıkla bu önbelleğe alma sorununu görüyorsunuzdur.

Bu sorunu çözmek için:

  1. .azure-functions-core-tools Komutunu çalıştırarak yolu bulun:

    func GetExtensionBundlePath
    
  2. .azure-functions-core-tools Dizini silin.

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

Önbellek dizini, Core Tools'u yeniden çalıştırdığınızda yeniden oluşturulur.

Sorun giderme: Azure Depolama bağlantısı çözümlenemiyor

Bu hatayı yerel çıkışınızda aşağıdaki ileti olarak görebilirsiniz:

Microsoft.Azure.WebJobs.Extensions.DurableTask: 'Storage' adlı Azure Depolama bağlantısı çözümlenemiyor.
Değer null olamaz. (Parametre 'provider')

Bu hata, uzantıların paketten yerel olarak nasıl yüklendiğinin bir sonucudur. Bu hatayı çözmek için aşağıdaki eylemlerden birini gerçekleştirin:

  • Azurite gibi bir depolama öykünücüsü kullanın. İşlev uygulamanızda depolama hesabı kullanmayı planlamıyorsanız bu seçenek iyi bir seçenektir.

  • Depolama hesabı oluşturun ve localsettings.json dosyasındaki AzureWebJobsStorage ortam değişkenine bir bağlantı dizesi ekleyin. Uygulamanızda bir depolama hesabı tetikleyicisi veya bağlaması kullanırken ya da mevcut bir depolama hesabınız varsa bu seçeneği kullanın. Başlamak için bkz. Depolama hesabı oluşturma.

Dağıtımdan sonra işlevler bulunamadı

Python işlevlerinin, görünüşe göre başarılı bir dağıtımdan sonra konak tarafından bulunmamasına neden olabilecek bazı yaygın derleme sorunları vardır:

  • Paketlerin derleme adımından doğru şekilde geri yüklendiğini garanti etmek için aracı havuzunun Ubuntu üzerinde çalışıyor olması gerekir. Dağıtım şablonunuzun derleme ve dağıtım için bir Ubuntu ortamı gerektirdiğine emin olun.

  • İşlev uygulaması kaynak deponun kökünde olmadığında, adımın pip install klasörü oluşturmak için doğru konuma başvurduğundan .python_packages emin olun. Bu konumun büyük/küçük harfe duyarlı olduğunu unutmayın, örneğin şu komut örneğinde:

    pip install --target="./FunctionApp1/.python_packages/lib/site-packages" -r ./FunctionApp1/requirements.txt
    
  • Şablonun içine /home/site/wwwrootyüklenebilen bir dağıtım paketi oluşturması gerekir. Azure Pipelines'da bu işlem görev tarafından ArchiveFiles gerçekleştirilir.

Azure portalında geliştirme sorunları

Azure portalını kullanırken şu bilinen sorunları ve bunların geçici çözümlerini dikkate alın:

  • İşlev kodunuzu portalda yazmak için genel sınırlamalar vardır. Daha fazla bilgi için bkz . Azure portalında geliştirme sınırlamaları.
  • Portaldaki bir işlev uygulamasından bir işlevi silmek için işlev kodunu dosyanın kendisinden kaldırın. Sil düğmesi, Python v2 programlama modeli kullanılırken işlevi kaldırmak için çalışmaz.
  • Portalda işlev oluştururken geliştirme için farklı bir araç kullanmanız gerekebilir. Bir söz dizimi hatasının algılandığı durumlar da dahil olmak üzere kodunuzu portalda düzenleyememenize neden olan çeşitli senaryolar vardır. Bu senaryolarda, işlev kodunuzu geliştirmek ve yayımlamak için Visual Studio Code veya Azure İşlevleri Core Tools kullanın.

Sonraki adımlar

Sorununuzu çözemiyorsanız Azure İşlevleri ekibine başvurun: