Bu konuda, Alibaba Cloud Python SDK hakkında sıkça sorulan soruların yanıtları yer almaktadır. Bu konu, geliştirme verimliliğinizi artırmanıza yardımcı olmayı amaçlamaktadır.
Önkoşullar
Python 3,7 veya sonraki bir sürüm yüklüdür.
Alibaba Cloud API'lerine ağınız üzerinden erişilebilir.
Genel Bakış
Sorunlar ve çözümler
AccessKey hatalarını nasıl gideririm?
Sorun: Kod çalıştırıldıktan sonra aşağıdaki hata mesajı döndürülür. Hata mesajı, AccessKey çiftinin doğru yapılandırılmadığını gösterir.
Alibaba Cloud SDK V2.0: AttributeError: 'NoneType' object has no attribute 'get_access_key_id'.
Alibaba Cloud SDK V1.0: Error:MissingParameter The input parameter "AccessKeyId" that is mandatory for processing this request is not supplied.
Çözümler:
-
ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenlerinin yapılandırılıp yapılandırılmadığını kontrol etmek için aşağıdaki komutları çalıştırın.
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Geçerli bir AccessKey çifti döndürülüyorsa ortam değişkenleri düzgün şekilde yapılandırılmış demektir. AccessKey çifti döndürülmezse veya geçersiz bir AccessKey çifti döndürülürse ortam değişkenlerini gerektiği gibi yapılandırın. Daha fazla bilgi için bkz. Linux, macOS ve Windows'ta ortam değişkenlerini yapılandırma.
-
Kodda AccessKey çiftiyle ilgili hataları kontrol edin.
Örnek hatalı istek:
config = open_api_models.Config( access_key_id=os.environ['yourAccessKeyID'], access_key_secret=os.environ['yourAccessKeySecret'] )Örnek başarılı istek:
config = open_api_models.Config( access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] )Notos.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] ve os.environ("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), AccessKey ID ve AccessKey secret değerlerinin ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenlerinden alındığını belirtir.
ÖnemliGüvenlik risklerini önlemek için AccessKey çiftini kaynak koduna doğrudan yazmayın.
SDK yüklenemediğinde ne yapmalıyım?
Python 3.x gibi geçerli bir Python sürümünün yüklü olduğundan emin olun.
SDK'yı pip komutuyla yüklerken
--upgradeseçeneğini ekleyin. Bu, en son sürümün yüklenmesini sağlar.
pip install --upgrade <SDK_NAME>
Yükleme işlemi sırasında izin sorunlarıyla karşılaşırsanız (örneğin, SDK'yı Python kitaplıklarının sistem dizinine yüklediğinizde) SDK'yı sistem dizini yerine kullanıcı dizinine yüklemek için
--userseçeneğini kullanabilirsiniz.
pip install --user <SDK_NAME>
Bilgisayarınızda birden fazla Python sürümü yüklüyse SDK'yı kullandığınız Python sürümüne yüklediğinizden emin olun. Örneğin, kodda
pythonyerinepython3kullanın vepip3komutlarını çalıştırın.
Bir modül içe aktarılamadığında ve ModuleNotFoundError hatası bildirildiğinde ne yapmalıyım?
SDK'nın düzgün yüklendiğinden emin olun. Ardından, Python ortamında bir modülü içe aktarmayı deneyin.
Python yorumlayıcısını başlatın.
python
Bir modülü içe aktarın.
import <SDK_NAME>
Hata oluşmazsa SDK düzgün yüklenmiş demektir. ModuleNotFoundError veya ImportError hatası oluşursa SDK düzgün yüklenmemiş demektir.
pip install <SDK_NAME>
"AttributeError: 'CredentialModel' object has no attribute 'provider_name'" hata mesajı döndürülürse ne yapmalıyım?
Bu hata mesajı, CredentialModel nesnesinin provider_name özelliğine erişilmeye çalışıldığını ancak provider_name özelliğinin mevcut olmadığını gösterir. Çoğu durumda bu hata, sınıf kitaplığı ile derleme API işlemleri arasında uyumsuzluğa neden olan eski bir alibabacloud_credentials paketinden kaynaklanır. Olası nedenler şunlardır:
Eski bağımlılık paketi:
alibabacloud_credentialspaketinin sürümü, kodda bulunanprovider_nameözelliği tarafından gereken sürümden daha eskidir.Bağımlılık çakışmaları: Projede birden fazla alibabacloud_credentials paketi bulunduğundan yanlış
alibabacloud_credentialssürümü yüklenir.Yanlış bağımlılık yükseltmesi: Yükseltmeden sonra bağımlılık yeniden yüklenmez veya önbellek temizlenmez. Sonuç olarak önceki bağımlılık sürümü kullanılmaya devam eder.
Çözümler:
-
requirements.txtdosyasında alibabacloud_credentials bağımlılık paketini en son sürüme ayarlayın. Örnek:alibabacloud_credentials=1.0.1Bağımlılık paketini yükseltmek için
pip install -r requirements.txt --upgradekomutunu çalıştırın.Notalibabacloud_credentials'in yayınlanan tüm sürümlerinin listesi için bkz. ChangeLog.txt.
-
Bağımlılık çakışmalarını kontrol edin.
pip list | grep alibabacloud # If multiple dependency versions exist, uninstall the existing versions and install the latest version. Example: pip uninstall alibabacloud_credentials pip install alibabacloud_credentials==1.0.1 -
Önbelleği temizleyin ve en son sürümü yeniden yükleyin.
pip cache purge pip install -r requirements.txt --force-reinstall
Aşağıdaki hata mesajı döndürülürse ne yapmalıyım: code: 400, The input parameter"AccesskeyId" that is mandatory for processing this request is not supplied?
Hata mesajı, ağ geçidine gönderilen bir isteğin AccessKey ID içermediği için döndürülür.
OpenAPI Explorer'dan indirilen tam örnek kodu kullanırken AccessKey ID'nizin düzgün yapılandırılıp yapılandırılmadığını kontrol edin. Ana yöntemi çağırırken AccessKey ID'nizi ve AccessKey secret değerinizi yapılandırın.
OpenAPI Explorer'daki SDK Sample sekmesinde, main yöntemindeki accessKeyId ve accessKeySecret değerlerini bulun ve yer tutucu değerleri kendi AccessKey bilginizle değiştirin.
Aşağıdaki hata mesajı döndürülürse ne yapmalıyım: Tea.exceptions.TeaException: Error: SignatureDoesNotMatch.MissingHeader code: 400, The specified signed header "accept;connection;content-type;host;user-agent;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version" is not found?
Hata mesajı, kendinden imzalı modda bir hizmeti çağırırken kısa ömürlü bağlantıları uygulamak amacıyla Connection üstbilgisi close olarak ayarlandığında döndürülür. Ancak V3 imzalama yöntemi bu ayarla uyumlu değildir ve bu durum hataya neden olur.
Bu hatayı şu ayarı kullanarak düzeltebilirsiniz: config.signature_algorithm = 'v2'.
Aşağıdaki hata mesajı döndürülürse ne yapmalıyım: Tea.exceptions.TeaException: Connection aborted?
Hata mesajı, istek aralığının beklenenden uzun olması nedeniyle döndürülür. Sunucu kalıcı bağlantıyı yalnızca 30 saniye boyunca açık tutar, istemci ise bağlantıyı kalıcı olarak sürdürür. Bu durumda sunucu 30 saniye sonra bağlantıyı kapatır. İstemci 30 saniye sonra bir istek başlatırsa istek başarısız olur.
Kısa ömürlü bağlantıları uygulamak için Connection üstbilgisini close olarak ayarlayın.
Çağrının 30 saniye içinde başlatılmasını sağlamak için bir yeniden deneme mekanizması yapılandırın.
Bir istek birden çok kez gönderilir ve işlenirse yeniden deneme mekanizması birden çok işleme neden olabilir. Bu nedenle, sorgu işlemlerini yürütmek üzere başlatılan istekler için yeniden deneme mekanizması yapılandırmanızı öneririz; ancak oluşturma, silme veya değiştirme işlemlerini yürütmek üzere başlatılan istekler için yeniden deneme mekanizması yapılandırmamanızı öneririz.
API çağrısı zaman aşımına uğradığında ve "requests.exceptions.Timeout" veya "requests.exceptions.ConnectionError" hata mesajı döndürüldüğünde ne yapmalıyım?
API çağrısı zaman aşımı çeşitli faktörlerden kaynaklanabilir. Aşağıdaki bölümde yaygın nedenler ve ilgili çözümler açıklanmaktadır.
Ağ bağlantısı sorunları
Neden: İstemci ve sunucu arasındaki ağ bağlantısı kesildiği veya ağ kararsız olduğu için istek sunucuya ulaşamaz.
Çözümler:
Yerel ana bilgisayar ile cloud hizmetinin uç noktası arasındaki bağlantıyı test etmek için ping veya curl komutunu çalıştırın. Örneğin, yerel ana bilgisayarınız ile Short Message Service (SMS) API'sinin uç noktası arasındaki bağlantıyı test etmek için ping dysmsapi.aliyuncs.com veya curl -v https://dysmsapi.aliyuncs.com komutunu çalıştırın.
Komut zaman aşımına uğrar veya yanıt almazsa yerel güvenlik duvarınızda veya yönlendiricilerinizde engelleme ilkelerini kontrol edin.
Yanıt döndürülürse yanlış zaman aşımı yapılandırmalarından kaynaklanan istek hatalarını önlemek için uygun bir zaman aşımı süresi belirtmenizi öneririz. Daha fazla bilgi için bkz. Zaman aşımı süresi yapılandırma. Örnek kod:
-
# The timeout period takes effect only for requests that use RuntimeOptions. runtimeOptions = RuntimeOptions( connect_timeout=5000 # Configure the timeout period for connection requests. Unit: milliseconds. )
Neden 2: İsteğin işlenmesinin uzun sürmesi
Neden: API isteğini işleme süresi belirtilen okuma zaman aşımı süresini aşıyor.
Çözüm: API yanıtı için zaman aşımı süresini uzatın. Daha fazla bilgi için bkz. Zaman aşımı süresi yapılandırma. Örneğin, okuma zaman aşımı süresini uzatmak için read timeout parametresini yapılandırabilirsiniz. Örnek kod:
# The timeout period takes effect only for requests that use RuntimeOptions.
runtimeOptions = RuntimeOptions(
read_timeout=10000, # Configure the timeout period for read requests. Unit: milliseconds.
)
Linux'ta "-bash: python3: command not found" hata mesajı döndürülürse ne yapmalıyım?
Python'u yüklediyseniz bu hata mesajı sembolik bağlantıların düzgün yapılandırılmamasından dolayı döndürülebilir.
Kullanıcı bir sembolik bağlantıya eriştiğinde aslında sembolik bağlantının işaret ettiği dosyaya erişir. Örneğin, Python 3'ü kullandığınızda aslında Python 3,12 yorumlayıcısını kullanırsınız.
Sistemde sembolik bağlantıların olup olmadığını kontrol etmek için
which python3 pip3komutunu çalıştırın. Sembolik bağlantılar varsa bunları silin.
rm -rf /usr/bin/python3 /usr/bin/pip3
Sembolik bağlantıları tekrar oluşturun. Python'un kurulum dizinini bulun, bin dizinine gidin ve ardından pip3.12 ile python3.12 dosyalarını bulun. Sembolik bağlantıları oluşturmak için aşağıdaki komutları çalıştırın:
sudo ln -s /usr/local/python3/bin/python3.12 /usr/bin/python3
sudo ln -s /usr/local/python3/bin/pip3.12 /usr/bin/pip3
API işlemi çağrılırken "Invalid parameters" veya "MissingRequiredParameter" hatası bildirilirse ne yapmalıyım?
Bu örnekte Short Message Service (SMS) hizmetinin SendSms işlemi kullanılmaktadır.
OpenAPI Explorer'daki API Debugging sayfasına gidin, ardından cloud ürününü ve API'yi seçin.
Oluşturulan istek nesnesinde PhoneNumbers ve SignName gibi tüm gerekli parametrelerin belirtilip belirtilmediğini kontrol edin. Bu örnekte
SendSmsRequestnesnesi kullanılır.API referansına göre tüm gerekli parametrelerin belirtildiğini doğrulayın.
Gerekli parametre değerlerinin geçerli olduğundan emin olun. Örneğin, cep telefonu numaralarının geçerli biçimlerde belirtilip belirtilmediğini kontrol edin.
SDK bir API isteği göndermeden önce parametreleri otomatik olarak doğrular. Bir veya daha fazla gerekli parametre belirtilmezse
MissingRequiredParametergibi bir hata bildirilir. Örneğin, PhoneNumbers parametresi belirtilmezse "MissingPhoneNumbers: code: 400" hatası bildirilir. Bu durumda parametreyi hata mesajına göre belirtin.
API'yi telefon numarası parametresi olmadan çağırmak konsolda MissingPhoneNumbers: code: 400 hatasını döndürür.
send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
# The mobile numbers to which you want to send a text message.
phone_numbers='<YOUR_VALUE>',
# The name of the SMS signature.
sign_name='<YOUR_VALUE>',
# The code of the SMS template.
template_code='<YOUR_VALUE>',
# The variables of the SMS template. Specify the value in the JSON format. Example: {"code":"1234","name":"1234","time":"1234"}.
template_param='{"code":"1234","name":"1234","time":"1234"}'
)
API işlemi çağrılamadığında ve "Tea.exceptions.UnretryableException" hatası bildirildiğinde ne yapmalıyım?
Seçtiğiniz bölgenin çağırdığınız hizmeti desteklediğinden emin olun. SMS'i örnek olarak alırsak hizmetin uç noktalarını OpenAPI Explorer üzerindeki ürün sayfasında bulabilirsiniz. Bölgeniz için doğru uç noktayı kullanın.
Ürün ana sayfasındaki Service Area List sekmesine tıklayın. Her bölge için doğru uç noktayı bulmak üzere Region ID ve Service Address sütunlarını kullanın. Örneğin, Çin anakarasındaki bölgeler için SMS uç noktası dysmsapi.aliyuncs.com şeklindedir.
Aşağıdaki hata mesajı döndürülürse ne yapmalıyım: File "/usr/local/python3/lib/python3.6/site-packages/alibabacloud_slb20140515/client.py", line 4, in <module> from Tea.core import TeaCore ModuleNotFoundError: No module named 'Tea'?
Hata mesajı, pip sürümünün eski olması nedeniyle döndürülür. Bu durumda yüklenen bağımlılıklar eksiktir veya belirli bağımlılıklar silinmiştir. Bu hatayı düzeltmek için pip'i güncelleyebilir ve pip install <Kurulum paketi> komutunu çalıştırabilirsiniz. Örneğin, Tea modülünü yüklemek için pip install alibabacloud-tea komutunu çalıştırın.
Bu hata oluştuğunda sistem alakasız bir paketi yüklemek için pip install tea komutunu çalıştırabilir. Python Package Index (PyPI) deposunda paketi yayınlayan kuruluşu veya kişiyi kontrol edebilir ve paketi silip silmeyeceğinizi değerlendirebilirsiniz.
Soru 13: Aşağıdaki hata mesajı döndürülürse ne yapmalıyım: Command "python setup.py egg_info" failed with error code 1 in xxx?
Hata mesajı, Python veya pip sürümünün eski olması ya da gerekli kitaplıkların veya paketlerin yüklü olmaması nedeniyle döndürülür. Sonuç olarak SDK beklendiği gibi çalışamaz.
Çözüm
-
Mevcut Python sürümünü kontrol edin.
Mevcut Python sürümünü kontrol etmek için
python -Vveyapython3 -Vkomutunu çalıştırın. Python sürümü 3,7'den önceyse Python'u güncellemek için aşağıdaki adımları uygulayın. En son Python sürümünün indirme URL'sini ve yükleme talimatlarını almak için Python resmi web sitesine gidebilirsiniz. Python sürümü 3,7 veya üzeriyse olası neden
pipsürümünün eski olmasıdır. Pip'i en son sürüme güncellemek içinpip3 install --upgrade pip setuptoolskomutunu çalıştırın. Ardından Python kodunu tekrar çalıştırmayı deneyin.-
Gerekli kitaplıkları kontrol edin ve yükleyin.
Python sürümü 3,7 veya üzeriyse ve
pipgüncellendikten sonra sorun devam ediyorsa olası neden ilgili kitaplıkların yüklü olmamasıdır. Bazı durumlarda, belirtilen kitaplıklar yüklenmezse diğer kitaplıklar yüklenemez. Örneğin,numpyyüklemek istiyorsanızblasvelapackgibi ilgili matematik kitaplıklarını yüklemeniz gerekir.lxmlyüklemek istiyorsanızlibxml2-devvelibxslt1-devyüklemeniz gerekir.Normal kitaplıkları yüklemek için aşağıdaki komutları çalıştırın. Bu örnekte
lxmlvenumpykullanılmaktadır.sudo yum install libxml2-dev libxslt1-dev -y sudo yum install blas-devel lapack-devel -yNotPython paketleri, Python'u geliştirmek ve genişletmek için tasarlanmış modüller veya kitaplıklardır. Python paketleri, geliştiricilerin belirli görevleri uygun ve verimli bir şekilde tamamlamasına yardımcı olacak ek araçlar ve yöntemler sağlar. Gerekli paketler, geliştirdiğiniz belirli projenin gereksinimlerine göre belirlenir.
Soru 14: Aşağıdaki hata mesajı döndürülürse ne yapmalıyım: HTTPSConnectionPool(host='ocr-api.cn-hangzhou.aliyuncs.com', port=443): Max retries exceeded with url: /?Country=Vietnam (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:2418)')))?
Çoğu durumda bu hata SSL/TLS el sıkışma hatalarından kaynaklanır. Olası nedenler şunlardır:
Sunucu ve istemci tarafından kullanılan SSL/TLS sürümleri uyumlu değildir.
Yerel cihazdaki SSL sertifikasında hatalar vardır. Örneğin, SSL sertifikasının süresi dolmuştur veya sertifika zinciri eksiktir.
SSL el sıkışmaları ağ yapılandırma hataları nedeniyle başarısız olur.
Çözümler:
-
SSL/TLS sürümlerini kontrol edin: Yerel cihazdaki Python ortamının sunucunun iletişim için kullandığı SSL/TLS sürümünü desteklediğinden emin olun. Bazı durumlarda sunucu yalnızca TLS 1.2'yi destekler.
import ssl import urllib3 # Create an SSL context that uses TLS 1.2. ssl_context = ssl.create_urllib3_context(ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv3, ssl.OP_NO_TLSv1, ssl.OP_NO_TLSv1_1) # Initialize the urllib3 pool manager. http = urllib3.PoolManager(context=ssl_context) # Send the request. response = http.request('GET', 'https://ocr-api.cn-hangzhou.aliyuncs.com/?Country=Vietnam') -
Pythonortamı sorunlarını kontrol edin:sslmodülünün veurllib3kitaplığının sürümünün Python sürümüyle uyumlu olduğundan emin olun.Python'u ve bağımlılıklarını yeniden yüklemek için sanal bir ortam kullanın.
python -m venv myenv source myenv/bin/activate pip install requests urllib3 pyOpenSSL -
Ağ yapılandırma hatalarını kontrol edin.
Yerel cihazdaki güvenlik duvarının HTTPS bağlantı noktasına (443 numaralı bağlantı noktası) trafiğe izin verdiğinden emin olun.
Proxy sunucusu kullanıyorsanız doğru yapılandırıldığından emin olun.
import requests # Use a proxy proxies = { 'http': 'http://your-proxy-server:port', 'https': 'https://your-proxy-server:port' } response = requests.get( 'https://ocr-api.cn-hangzhou.aliyuncs.com/?Country=Vietnam', proxies=proxies ) -
Sorunu çözmek için
requestsveurllib3kitaplıklarını güncelleyin.pip install --upgrade requests urllib3 -
Güncellemeden sonra sorun devam ederse sorun ortam sertifikasından kaynaklanıyor olabilir. Sertifikayı yoksaymak ve zaman aşımı süresini ayarlamak için aşağıdaki parametreleri yapılandırın:
# Ignore certificate verification. runtimeOptions = RuntimeOptions( ignore_ssl=True # Ignores SSL certificate verification. Verification is enabled by default. ) # Adjust the timeout. runtimeOptions = RuntimeOptions( read_timeout=xxx, # Read timeout in milliseconds (ms) connect_timeout=xxx # Connection timeout in milliseconds (ms) ) -
SSL sertifika doğrulaması devre dışı bırakıldıktan sonra sorun devam ederse SSL sertifika doğrulamasını devre dışı bırakmak için
PYTHONHTTPSVERIFYortam değişkenini0olarak ayarlayın.export PYTHONHTTPSVERIFY=0 # Disable HTTPS verification. -
Yerel makinedeki SSL sertifikasını kontrol edin: Yerel makinedeki SSL sertifikasının güncel ve eksiksiz olduğundan emin olun. Sertifikaları güncellemek ve yüklemek için
certbotgibi bir araç kullanabilirsiniz.sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --email yo**@email.com
Python'un temel hataları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Python SDK hataları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
En son SDK sürümünde bu hata, SDK.HttpError gibi belirli bir hatayla değiştirilmiştir. aliyun-python-sdk-core paketini en son sürüme güncelleyin. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. Belirtilen uç noktanın geçerli olup olmadığını kontrol edin. 2. Ağ bağlantısını kontrol etmek için ping veya curl komutunu çalıştırın. |
Teknik destek
Önceki sorunlara yönelik çözümler, Alibaba Cloud SDK'larını daha iyi kullanmanıza yardımcı olabilir. Alibaba Cloud SDK'larını kullanırken başka sorunlarla karşılaşırsanız aşağıdaki yöntemi kullanarak Alibaba Cloud teknik desteğiyle iletişime geçin: