使用IBM Watson执行翻译任务时遇SSL.TLSVersion属性错误
问题描述
我是Python新手,正在完成Coursera课程作业,需编写代码调用IBM Watson翻译服务。已按步骤创建包含apikey和url的.env文件、编写翻译代码,并安装了python-dotenv、ibm_watson、Flask库,但运行代码时出现错误:AttributeError: module 'ssl' has no attribute 'TLSVersion'
错误栈信息:
Traceback (most recent call last): File "translator.py", line 14, in <module> lt = LanguageTranslatorV3(version='2018-05-01', authenticator=authenticator) File "/home/theia/.local/lib/python3.6/site-packages/ibm_watson/language_translator_v3.py", line 76, in __init__ authenticator=authenticator) File "/home/theia/.local/lib/python3.6/site-packages/ibm_cloud_sdk_core/base_service.py", line 97, in __init__ self.http_adapter = SSLHTTPAdapter() File "/home/theia/.local/lib/python3.6/site-packages/ibm_cloud_sdk_core/utils.py", line 35, in __init__ super().__init__(*args, **kwargs) File "/home/theia/.local/lib/python3.6/site-packages/requests/adapters.py", line 130, in __init__ self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) File "/home/theia/.local/lib/python3.6/site-packages/ibm_cloud_sdk_core/utils.py", line 42, in init_poolmanager ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2 AttributeError: module 'ssl' has no attribute 'TLSVersion'
使用的翻译代码:
import json from ibm_watson import LanguageTranslatorV3 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator import os from dotenv import load_dotenv load_dotenv() apikey = os.environ['apikey'] url = os.environ['url'] # Setup service authenticator = IAMAuthenticator(apikey) lt = LanguageTranslatorV3(version='2018-05-01', authenticator=authenticator) lt.set_service_url(url) translation = lt.translate(text='We are sinking.', model_id='en-de').get_result() translation translation['translations'][0]['translation']
解决方案
- 升级Python版本:将Python升级到3.7或更高版本,
ssl.TLSVersion是Python 3.7及以上才新增的属性,新版IBM Cloud SDK依赖该属性配置TLS版本,升级后可直接解决问题。 - 降级SDK版本:如果暂时无法升级Python,安装兼容Python 3.6的旧版SDK,执行命令:
这两个版本的SDK不依赖pip install ibm-cloud-sdk-core==3.10.1 ibm-watson==5.3.1ssl.TLSVersion,能在Python 3.6环境下正常运行。 - 临时修改SDK源码(不推荐):找到报错的
ibm_cloud_sdk_core/utils.py文件,将ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2替换为Python 3.6支持的写法:
该方法仅作应急,后续更新SDK会覆盖修改,不建议长期使用。ssl_context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
内容的提问来源于stack exchange,提问作者S. R.
相关产品推荐
相关产品推荐

