pip换源,解决pip下载超时,连接失败等问题

前言

做python开发的时候,我们需要用到很多第三方提供的包作为支撑,由于这些包很多都是来自国外,导致经常可能下载失败,甚至连接超时等问题发生,这些都是非常可恼的,严重影响了我们codeing的正常水平。正对这一问题,后来就出现了换源的概念,就是把第三方包的下载地址放在国内镜像源。这样速度就有了质的提升。下面就看看国内常用换源网站,以及如何换源的。

常见换源网站

  1. 清华:https://pypi.tuna.tsinghua.edu.cn/simple
  2. 阿里云:http://mirrors.aliyun.com/pypi/simple/
  3. 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  4. 华中理工大学:http://pypi.hustunique.com/
  5. 山东理工大学:http://pypi.sdutlinux.org/
  6. 豆瓣:http://pypi.douban.com/simple/

亲自测试下载TensorFlow,342.5 MB的TF10分钟就下载完毕。每个网站的下载快慢未曾试过,可以自己亲试,本人习惯用清华源。

使用换源实现快速下载方法

换源方法很简单,只需在终端程序执行如下命令即可,这里已下载tensorflow 为例(使用的是清华源)
如果你使用的是python3.0以上版本使用一下命令:

pip3 install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/

如果你使用的是python3.0以下版本使用一下命令:

pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/

好了,这样这样操作换源的目的就达到了。是不是非常简单。

是否百分百解决问题了

但是这样就非常完美了吗,其实这样也不一定成功,只不过相对于没有换源而言,成功率要高出很多,但是也会失败。如下所示:

(base) PS C:\Users\Administrator> pip3 install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/
Collecting tensorflow
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/61/e1/1e713485caee272e7be779ac10bb0cec36ace3d9f981e067a9105a736791/tensorflow-2.3.1-cp38-cp38-win_amd64.whl (342.5 MB)
     || 5.8 MB 36 kB/s eta 2:32:24ERROR: Exception:
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_vendor\urllib3\response.py", line 425, in _error_catcher
    yield
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_vendor\urllib3\response.py", line 507, in read
    data = self._fp.read(amt) if not fp_closed else b""
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_vendor\cachecontrol\filewrapper.py", line 62, in read
    data = self.__fp.read(amt)
  File "C:\ProgramData\Anaconda3\lib\http\client.py", line 454, in read
    n = self.readinto(b)
  File "C:\ProgramData\Anaconda3\lib\http\client.py", line 498, in readinto
    n = self.fp.readinto(b)
  File "C:\ProgramData\Anaconda3\lib\socket.py", line 669, in readinto
    return self._sock.recv_into(b)
  File "C:\ProgramData\Anaconda3\lib\ssl.py", line 1241, in recv_into
    return self.read(nbytes, buffer)
  File "C:\ProgramData\Anaconda3\lib\ssl.py", line 1099, in read
    return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\cli\base_command.py", line 188, in _main
    status = self.run(options, args)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\cli\req_command.py", line 185, in wrapper
    return func(self, options, args)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\commands\install.py", line 332, in run
    requirement_set = resolver.resolve(
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\resolution\legacy\resolver.py", line 179, in resolve
    discovered_reqs.extend(self._resolve_one(requirement_set, req))
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\resolution\legacy\resolver.py", line 362, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\resolution\legacy\resolver.py", line 314, in _get_abstract_dist_for
    abstract_dist = self.preparer.prepare_linked_requirement(req)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\operations\prepare.py", line 467, in prepare_linked_requirement
    local_file = unpack_url(
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\operations\prepare.py", line 255, in unpack_url
    file = get_http_url(
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\operations\prepare.py", line 129, in get_http_url
    from_path, content_type = _download_http_url(
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\operations\prepare.py", line 281, in _download_http_url
    for chunk in download.chunks:
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\cli\progress_bars.py", line 166, in iter
    for x in it:
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_internal\network\utils.py", line 15, in response_chunks
    for chunk in response.raw.stream(
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_vendor\urllib3\response.py", line 564, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_vendor\urllib3\response.py", line 529, in read
    raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
  File "C:\ProgramData\Anaconda3\lib\contextlib.py", line 131, in __exit__
    self.gen.throw(type, value, traceback)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pip\_vendor\urllib3\response.py", line 430, in _error_catcher
    raise ReadTimeoutError(self._pool, None, "Read timed out.")
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='pypi.tuna.tsinghua.edu.cn', port=443): Read timed out.

你会看见,我们意见使用了换源命令,但是下载了一半还是失败,我们仔细看一下报错信息,你会发现这样一条信息,如下所示:

_error_catcher
    raise ReadTimeoutError(self._pool, None, "Read timed out.")
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='pypi.tuna.tsinghua.edu.cn', port=443): Read timed out.

这是什么意思了,明细就是在读取的实时出现了远程主机读取超时问题,至于为什会超时,问题有很多,比如服务稳定性不好,导致请求长时间没有响应;又或者网络不好,出现了波动,这些都是有可能的,那么如何解决这种问题,我想到了比较好的解决方案。

大家都做过http网络请求,知道客户端在连接服务器端时,请求是可以设置超时时长的,比如读写超时,请求超时等,最常用的就是如下三种超时配置:

 .connectTimeout(20, TimeUnit.SECONDS)
 .readTimeout(20, TimeUnit.SECONDS)
 .writeTimeout(20, TimeUnit.SECONDS)

在这里,我们就把pip果冻工具当做clent端,也给他做一个超时设置即可。下面就介绍一下如何在Windows和linux系统设置pip换源超时问题。

Linux换源超时解决方案

Linux系统处理比较简单,这里先讲解Linux,这里以Linux下修改pip源(CentOS为例)

  1. 首先进入到root目录下的pip隐藏文件目录中(没有就创建)
  2. 在pip目录中新建pip.conf文件
  3. 在pip.conf文件中配置如下配置即可:
[global]
timeout = 60
index-url = http://pypi.douban.com/simple/
[install]
trusted-host = pypi.douban.com

4:执行换源命令进行下载:

 pip3 install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/

是不是很简单,只要三步简单的配置就可以搞定,下面介绍一下Windows。

Windows换源超时解决方案

Windows相对linux比较复杂一点,好了,接下来是配置方法:

  1. 按住 Win+R 键,打开运行窗口:输入
%APPDATA%

如下图所示:
在这里插入图片描述
然后回车,会打开一个文件(C:\Users\Administrator\AppData\Roaming),打开后找到pip文件夹,如果没有就新建一个,如下图所示:

2. 进入pip文件,新建一个pip.ini的配置文件(新建文本文件将后缀名改成 .ini)
3. 配置pip.ini配置文件,配置内容如下:

[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

配置参数说明

参数 说明
timeout 设置超时时间
index-url 换源的url地址,可以是清华源,也可以是阿里云,具体自定
trusted-host 主机host地址
  1. 输入换源命令,实现换源下载。
 pip3 install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/

好了,只要你按照以上方法实现换源配置,那么pip换源命令使用起来将非常的快速,真的是飕飕的感觉。

猜你喜欢

转载自blog.csdn.net/ljx1400052550/article/details/110040153
今日推荐