内网环境下 Python 自动下载模型的代理配置方案
大家在开发过程中应该都遇到过这种情况:在内网跑 Python 代码,一旦涉及下载模型或者调用外部 API,立马就报错。最常见的就是 urllib3.exceptions.MaxRetryError,看着挺吓人,其实本质就是网络不通,需要走代理。
针对这个问题,我有两个常用的处理思路,一个是全局环境变量,一个是代码级显式配置。
为什么需要配置代理?
内网环境通常被隔离,无法直接访问互联网上的资源(比如百度 BaiduBOS 或者 HuggingFace)。这时候就需要一个'网关'来转发请求。如果不配代理,程序会一直尝试直连直到超时。
方案一:设置环境变量(推荐)
这是最省事的方法。很多第三方库(包括 PaddleNLP)底层都是调用的 urllib 或 requests,只要设置了系统环境变量,它们就会自动识别。
在脚本最开始加上这几行:
import os
# 记得把这里的 xxxx 换成实际的账号密码和代理地址
proxy_addr = "http://xxxx:[email protected]:8080"
os.environ["HTTP_PROXY"] = proxy_addr
os.environ["HTTPS_PROXY"] = proxy_addr
注意,这两行代码要放在导入其他库之前执行,否则部分已经初始化的连接池可能不会生效。
方案二:Requests 显式指定
如果是自己写的爬虫或者直接用 requests 库,可以直接传参。这种方式更灵活,适合做连通性测试。
import requests
proxies = {
"http": "http://xxxx:[email protected]:8080",
"https": "http://xxxx:[email protected]:8080"
}
try:
# 试着连一下模型源站
resp = requests.get("https://bj.bcebos.com", proxies=proxies, timeout=3000)
print(f"代理连接成功,状态码:{resp.status_code}")
except Exception as e:
print(f"代理连接失败:{e}")
实战:PaddleNLP 模型加载
搞定网络之后,再来看具体的业务场景。假设我们要用 PaddleNLP 做个文本纠错,代码逻辑很简单,但前提是网络得通。
from paddlenlp import Taskflow
# 此时环境变量已生效
corrector = Taskflow("text_correction", timeout=3000)
res = corrector()
(res)

