导入SeqVecEmbedder时触发HTTP Error 406: Not Acceptable错误求助
问题描述
使用bio_embeddings处理蛋白质序列时,初始化SeqVecEmbedder触发HTTP Error 406: Not Acceptable错误,该错误源于自动下载SeqVec模型文件时请求被服务器拒绝。
报错堆栈信息:
File "C:\ProgramData\Miniconda3\envs\bio_e\lib\site-packages\bio_embeddings\embed\__init__.py", line 31, in __init__ get_model_file(path=f.name, model='seqvecv{}'.format(str(kwargs.get('seqvec_version', 1))), file=file) File "C:\ProgramData\Miniconda3\envs\bio_e\lib\site-packages\bio_embeddings\utilities\remote_file_retriever.py", line 72, in get_model_file request.urlretrieve(url, filename=path, reporthook=t.update_to) File "C:\ProgramData\Miniconda3\envs\bio_e\lib\urllib\request.py", line 247, in urlretrieve with contextlib.closing(urlopen(url, data)) as fp: File "C:\ProgramData\Miniconda3\envs\bio_e\lib\urllib\request.py", line 222, in urlopen return opener.open(url, data, timeout) File "C:\ProgramData\Miniconda3\envs\bio_e\lib\urllib\request.py", line 531, in open response = meth(req, response) File "C:\ProgramData\Miniconda3\envs\bio_e\lib\urllib\request.py", line 641, in http_response 'http', request, response, code, msg, hdrs) File "C:\ProgramData\Miniconda3\envs\bio_e\lib\urllib\request.py", line 569, in error return self._call_chain(*args) File "C:\ProgramData\Miniconda3\envs\bio_e\lib\urllib\request.py", line 503, in _call_chain result = func(*args) File "C:\ProgramData\Miniconda3\envs\bio_e\lib\urllib\request.py", line 649, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 406: Not Acceptable
测试代码:
from bio_embeddings.embed import SeqVecEmbedder import torch seq = 'MVTYDFGSDEMHD' embedder = SeqVecEmbedder() embedding = embedder.embed(seq)
解决方案
手动下载模型文件
- 定位
bio_embeddings的模型缓存路径(通常为~/.cache/bio_embeddings/或conda环境对应的缓存目录)。 - 手动获取对应版本的SeqVec模型文件(版本1对应
seqvecv1系列文件),放入上述缓存目录。 - 重新运行代码,此时
SeqVecEmbedder会直接读取本地模型,无需发起网络请求。
- 定位
修改请求头适配服务器要求
找到bio_embeddings/utilities/remote_file_retriever.py文件,替换原urlretrieve逻辑,添加符合服务器要求的请求头:# 替换原request.urlretrieve行的代码 import urllib.request req = urllib.request.Request(url, headers={'Accept': '*/*'}) with urllib.request.urlopen(req) as response, open(path, 'wb') as out_file: data = response.read() out_file.write(data)升级bio_embeddings库
执行命令升级到最新版本,新版本可能已修复请求头适配问题:pip install --upgrade bio_embeddings
内容的提问来源于stack exchange,提问作者Bo Zhong
相关产品推荐
相关产品推荐

