升级Spacy时,如何为python -m spacy download配置代理?
看起来你的pip能正常通过代理升级Spacy,但spacy download命令却卡在了代理认证上——这大概率是因为Spacy的下载命令在处理代理配置时和pip的逻辑略有差异,尤其是当代理需要用户名密码认证时,很容易出现参数传递不到位的情况。下面给你几个可行的解决方案:
直接在代理URL中包含认证信息
407错误明确提示需要代理认证,如果你之前的代理URL没带用户名和密码,肯定会失败。不管是用--proxy参数还是环境变量,都要把认证信息嵌入URL:# 使用--proxy参数的命令 python -m spacy download en_core_web_sm --proxy http://your_username:your_password@myproxy:proxyport如果用环境变量,确保同时设置大小写(避免某些工具只认特定大小写):
# Linux/macOS终端 export http_proxy=http://your_username:your_password@myproxy:proxyport export https_proxy=http://your_username:your_password@myproxy:proxyport export HTTP_PROXY=http://your_username:your_password@myproxy:proxyport export HTTPS_PROXY=http://your_username:your_password@myproxy:proxyport # 然后执行下载命令 python -m spacy download en_core_web_sm绕过spacy download,直接用pip安装模型
其实spacy download本质上就是调用pip安装对应的模型包,所以你可以直接用pip来安装,这样就能复用你升级Spacy时的代理配置了。从你给出的错误信息里,模型的下载链接是https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.3.1/en_core_web_sm-2.3.1.tar.gz,直接执行:pip3 install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.3.1/en_core_web_sm-2.3.1.tar.gz --proxy http://your_username:your_password@myproxy:proxyport这个方法几乎肯定能行,因为和你升级Spacy的命令逻辑完全一致。
配置pip全局代理,让spacy自动复用
如果你平时pip用代理没问题,可能是因为pip有单独的配置文件,而spacy download调用pip时会自动读取这个配置。你可以检查或创建pip的配置文件:- Linux/macOS:
~/.pip/pip.conf - Windows:
%APPDATA%\pip\pip.ini
在文件中添加代理配置:
[global] proxy = http://your_username:your_password@myproxy:proxyport保存后再执行
spacy download命令,就不需要额外加代理参数了。- Linux/macOS:
临时在命令前设置环境变量
有时候环境变量设置后需要重新打开终端才生效,或者你不想永久修改环境变量,可以在执行下载命令前临时设置:# Linux/macOS http_proxy=http://your_username:your_password@myproxy:proxyport https_proxy=http://your_username:your_password@myproxy:proxyport python -m spacy download en_core_web_sm# Windows CMD set http_proxy=http://your_username:your_password@myproxy:proxyport && set https_proxy=http://your_username:your_password@myproxy:proxyport && python -m spacy download en_core_web_sm# Windows PowerShell $env:http_proxy="http://your_username:your_password@myproxy:proxyport"; $env:https_proxy="http://your_username:your_password@myproxy:proxyport"; python -m spacy download en_core_web_sm
内容的提问来源于stack exchange,提问作者skyleguy

