Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
Özellikle v2 modelinde bilinen bazı sorunlar ve bunların geçici çözümleri şunlardır:
Python İşlevleri için genel sorun giderme kılavuzları ş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:
- Paket bulunamıyor
- Paket düzgün Linux tekerleği ile çözümlenmedi
- Paket Python yorumlayıcı sürümüyle uyumlu değil
- Paket diğer paketlerle çakişer
- Paket yalnızca Windows ve macOS platformlarını destekler
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_PACKAGEuygulama 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_PACKAGEolarak1ayarlandıysa,https://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackageskonumuna gidin ve dosyayı en sonhrefURL’sinden indirin. - İşlev uygulamasında önce bahsedilen uygulama ayarlarından hiçbiri yoksa
https://<app-name>.scm.azurewebsites.net/api/settingskonumuna gidin veSCM_RUN_FROM_PACKAGEaltındaki URL’yi bulun. URL'yi kopyalayıp tarayıcınıza yapıştırarak dosyayı indirin. - Öneriler sorunu çözerse,
https://<app-name>.scm.azurewebsites.net/DebugConsolekonumuna gidin ve/home/site/wwwrootaltındaki iç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 Hatasını 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
.python_packages/lib/python3.6/site-packages/<package-name> veya .python_packages/lib/site-packages/<package-name> adresine gidin. Dosya yolu mevcut değilse, bunun temel nedeni büyük olasılıkla bu eksikliktir.
Dağıtım sırasında üçüncü taraf veya eski araçların kullanılması bu soruna neden olabilir.
Bu sorunu azaltmak için Uzak derlemeyi etkinleştirme veya yerel bağımlılıkları derleme bölümüne bakın.
Paket doğru Linux tekerleği ile çözümlenmez
.python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info veya .python_packages/lib/site-packages/<package-name>-<version>-dist-info adresine 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'ta, üçüncü taraf ya da güncel olmayan araçlarda --build local bayrağını kullandığınızda, eski ikili dosyaların kullanılmasına yol açabilir.
Sorunu hafifletmek için Uzaktan derlemeyi etkinleştirin veya Yerel bağımlılıkları derleyin bölümüne bakın.
Paket Python yorumlayıcı sürümüyle uyumlu değil
.python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info veya .python_packages/lib/site-packages/<package-name>-<version>-dist-info adresine 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.10, Python :: 3.11, Python :: 3.12veya Python :: 3.13yoksa 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 uygun Linux wheel’leriyle doğru şekilde çözümlendiğini doğruladıysanız, diğer paketlerle bir çakışma söz konusu 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üzenleyiciyle açın ve https://pypi.org/project/<package-name> içindeki paketi kontrol edin. Bazı paketler yalnızca Windows ve macOS platformlarında çalışır. Örneğin, pywin32 yalnızca Windows üzerinde çalışır.
Windows veya macOS’u yerel geliştirme için kullanırken Module Not Found hatası oluşmayabilir. Ancak paket, çalışma zamanında Linux kullanan Azure İşlevleri üzerinde içe aktarılamıyor. Bu sorunun nedeni büyük olasılıkla, proje başlatılırken Windows veya macOS makinenizden sanal ortamı pip freeze kullanarak requirements.txt dosyasına dışa aktarmanızdır.
Sorunu azaltmak için Paketi eşdeğerleriyle değiştirin veya requirements.txt dosyasını elle oluşturun bölümüne bakın.
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. Bunu nasıl sağlayacağınız, 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. Aksi takdirde, dosyayı azureFunctions.scmDoBuildDuringDeployment ayarı etkinleştirilmiş olarak oluşturun ve ardından 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 OS Independent olmalı veya İşletim Sistemi'nde POSIX ya da POSIX :: Linux ile uyumlu olmalıdır. Ayrıca, programlama dili şunları içermelidir: Python :: 3, Python :: 3.10, Python :: 3.11, Python :: 3.12veya Python :: 3.13.
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.
requirements.txt dosyasını elle oluşturun
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 uygulama, proje kaynak kodunuzdaki her .py dosyasındaki import ifadelerini kontrol etmek ve ardından yalnızca requirements.txt dosyasındaki modülleri sürüm denetimine eklemektir. 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ştirilebilir. Öyleyse, Azure İşlevleri belirli bir Python dağıtımı sağladığından (Python 3.10, Python 3.11, Python 3.12 ve Python 3.13), paketi requirements.txt dosyanızdan kaldırın.
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ı 0 değerine ayarlayı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:
- Python yorumlayıcısı işletim sistemi mimarisini yanlış algılar
- Python yorumlayıcısı Azure İşlevleri Python Çalışanı tarafından desteklenmiyor
'cygrpc' referans hatasını tanılayın
cygrpc öğesine başvuran hataların birkaç olası nedeni vardır; bunlar bu bölümde ayrıntılı olarak açıklanmaktadı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ıştırıyorsanız Python sürüm 3.10, 3.11, 3.12 veya 3.13 yorumlayıcınızın da 64 bit sürüm olduğundan emin olun.
Aşağıdaki komutları çalıştırarak Python yorumlayıcınızın bitliğini de kontrol edebilirsiniz:
Windows'ta PowerShell'de py -c 'import platform; print(platform.architecture()[0])' komutunu çalıştırın.
Unix benzeri bir kabukta python3 -c 'import platform; print(platform.architecture()[0])' komutunu çalıştırın.
Python yorumlayıcısının bit sürümü ile işletim sistemi mimarisi arasında bir uyuşmazlık varsa, Python Software Foundation üzerinden 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 beklediğiniz sürümle eşleşip eşleşmediğini Windows'ta py --version veya Unix benzeri sistemlerde python3 --version komutunu kullanarak kontrol edin. 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, 137 koduyla çıktı
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 139 çıkış koduyla sonlandı
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 kaynaklanan 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 sorunları gidermek için import ifadelerini yorum satırı hâline getirin, paket referanslarını devre dışı bırakın veya paketi requirements.txt dosyasında önceki bir sürüme sabitleyin.
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 sorunu gidermek için pickle.load() işlevini yorum satırı haline getirmeyi deneyin.
Pyodbc bağlantı çakışması
İşlev uygulamanız 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.
Tavsiye
Microsoft'un yerleşik Microsoft Entra kimlik doğrulama desteği sağlayan ve el ile ODBC sürücü yönetimi gerektirmeyen SQL Server için resmi Python sürücüsü mssql-python kullanmayı göz önünde bulundurun.
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
Loading startup extension <> ile başlayan ve ardından Loaded extension <> gelmeyen bir uzantı yükleme günlüğü görüyorsanız, büyük olasılıkla bu önbellekleme sorunuyla karşılaşıyorsunuzdur.
Bu sorunu çözmek için:
.azure-functions-core-toolsKomutunu çalıştırarak yolu bulun:func GetExtensionBundlePath.azure-functions-core-toolsDizini 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. ('provider' parametresi)
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
AzureWebJobsStorageortam 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ı
Görünüşte başarılı bir dağıtımın ardından Python fonksiyonlarının ana bilgisayar tarafından bulunamamasına neden olabilecek birkaç yaygın derleme sorunu 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 deposunun kökünde değilse,
pip installadımının.python_packagesklasörünün oluşturulacağı doğru konumu işaret ettiğinden emin olun. Bu konumun büyük/küçük harfe duyarlı olduğunu unutmayın; aşağıdaki komut örneğinde olduğu gibi: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şlemArchiveFilesgörevi tarafından 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: