你盯着屏幕上那句“Read timed out”,心里一阵烦躁。安装包下载到一半就卡住,进度条纹丝不动。这种事遇到一次就算了,次次都这样。其实不是你网络不行,是pip默认去国外下载东西,跨国传输本来就慢。换几个国内镜像源,事情就简单了。
国内有很多镜像站,清华的,阿里云的,中科大的,豆瓣的。选一个离你物理距离近的就成。比如你在南方,用阿里云的镜像往往更快。不用管什么原理,记住一句命令就行。永久设置源只要一行代码,不用每次安装都敲一遍。
打开终端或者命令行窗口。输入 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple。回车。等你再敲 pip install 包名的时候,下载速度从几十KB变成几MB。一键安装,几秒钟完事。这就是镜像源的功劳。
如果你不想永久改,偶尔用一次也行。临时指定一次源,命令是 pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple。这条命令只对当前这次安装生效,不会改动你的pip全局设置。适合偶尔用一次的场景。
要是你发现某个源偶尔也不稳定,可以同时加几个备用源。方法是创建一个配置文件。Windows用户在 C:\Users\你的用户名\pip 目录下建一个 pip.ini 文件。Mac或Linux用户在 ~/.pip 目录下建一个 pip.conf 文件。文件内容写这几行:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
extra-index-url = https://mirrors.aliyun.com/pypi/simple/
https://pypi.doubanio.com/simple/
这个写法意思是,优先从清华源下载,清华源下载失败就自动换阿里云,再失败换豆瓣。平时用不上这么复杂,但碰到冷门包的时候省心很多。
还有一个实用技巧。如果你用的包比较大,比如numpy或者pandas,经常超时,加一个超时时间限制也有用。在安装命令后面加上 --default-timeout=1000。比如 pip install numpy --default-timeout=1000 -i https://pypi.tuna.tsinghua.edu.cn/simple。这样命令不会因为几秒没反应就断开。
每次配置完镜像源,测试一下就知道有没有生效。随便安装一个小包,比如 pip install requests。看输出信息里的下载速度,从几百KB跳到几MB,那就对了。如果还是慢,检查一下你配置的地址拼写有没有错,不要多了空格或者少了斜杠。
做了这么多年开发,我见过太多人在pip上耗掉一个小时。其实解决超时的问题就这么简单。选一个国内镜像源配好,以后下载包就跟去邻居家拿工具一样快。别再让那串英文报错拦住你了。
夜雨聆风