赞
踩
做python开发的时候,我们需要用到很多第三方提供的包作为支撑,由于这些包很多都是来自国外,导致经常可能下载失败,甚至连接超时等问题发生,这些都是非常可恼的,严重影响了我们codeing的正常水平。正对这一问题,后来就出现了换源的概念,就是把第三方包的下载地址放在国内镜像源。这样速度就有了质的提升。下面就看看国内常用换源网站,以及如何换源的。
亲自测试下载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下修改pip源(CentOS为例)
[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相对linux比较复杂一点,好了,接下来是配置方法:
%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地址 |
pip3 install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/
好了,只要你按照以上方法实现换源配置,那么pip换源命令使用起来将非常的快速,真的是飕飕的感觉。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。