运行Python脚本调用Biopython访问NCBI Blast时代理配置无效问题求助
问题原因和修复方案
你当前代码的核心遗漏点
- 只配置了HTTP代理,未配置HTTPS代理:NCBI Blast的接口走HTTPS协议,仅设置http_proxy无法生效
- 未兼容不同库对代理环境变量大小写的要求:部分底层库读取的是大写的
HTTP_PROXY/HTTPS_PROXY变量 - 没有使用Biopython原生提供的代理参数,依赖环境变量的配置方式稳定性不足
修正后的可用代码
def main(seq, proxy_addr): from Bio.Blast import NCBIWWW import time start_time = time.time() try: print('Connecting to NCBI...') # 直接通过qblast的proxy参数传入代理,优先级高于环境变量,稳定性更高 blast_handle = NCBIWWW.qblast( 'blastn','nt', sequence = seq, format_type = 'Text', megablast=True, proxy=proxy_addr ) text = blast_handle.read() print(text) print("--- %s seconds ---" % (time.time() - start_time)) except Exception as e: print(e) if __name__ == '__main__': import os # 替换为IT提供的真实代理地址,如果需要认证格式为 http://用户名:密码@IP:端口 PROXY = 'http://123.456.78.90:80' # 同时设置大小写的HTTP/HTTPS代理环境变量,兼容所有依赖库 os.environ['http_proxy'] = PROXY os.environ['HTTP_PROXY'] = PROXY os.environ['https_proxy'] = PROXY os.environ['HTTPS_PROXY'] = PROXY seq = 'CAACTTTTTTTTTTATTACAGACAATCAAGAAATTTTCTATTGAAATAAAATATTTTAAA\ ACTTTCAACAACGGATCTCTTGGTTCTCGCATCGATGAAGAACGTAGCGAATTGCGATAA\ GTAATGTGAATTGCAGATTCTCGTGAATCATTGAATTTTTGAACGCACATTGCGCCCTCT\ GGTATTCCAGAGGGCATGCCTGTTTGAGCGTCATTTCCTTCTCAAAAACCCAGTTTTTGG\ TTGTGAGTGATACTCTGCTTCAGGGTTAACTTGAAAATGCTATGCCCCTTTGGCTGCCCT\ TCTTTGAGGGGACTGCGCGTCTGTGCAGGATGTAACCAATGTATTTAGGTATTCATACCA\ ACTTTCATTGTGCGCGTCTTATGCAGTTGTAGTCCACCCAACCTCAGACACACAGGCTGG\ CTGGGCCAACAGTATTCATAAAGTTTGACCTCA' main(seq, PROXY)
额外排查点
- 确认IT提供的代理地址可以正常访问
https://blast.ncbi.nlm.nih.gov,可通过浏览器配置该代理后访问NCBI Blast官网验证连通性 - 如果代理需要身份认证,必须在代理地址中加入用户名和密码,格式参考代码注释
- 如果你使用的Biopython版本低于1.77,
qblast方法没有proxy参数,建议先升级Biopython到最新版本,执行命令pip install --upgrade biopython即可
内容的提问来源于stack exchange,提问作者avron
相关产品推荐
相关产品推荐

