前言
从大四开始接触Python,感觉这语言还行,但是其中的pip说实话折磨了我半天,不是下载有问题就是安装报错,反正当时看到一片红,非常烦躁,当时也没时间去好好了解下,现在稍微有点空闲打算来补一补。
什么是PIP
本质上pip仅仅是一个程序,它会随着你下载Python而一并安装到你的电脑上,默认的目录是Python安装目录下面的Scripts目录下面,所以你只需要把这个目录加入到环境变量,你就能使用它了。
在windows下面只需要在命令行输入where pip即可知道这个程序的绝对路径了。而在linux下只需要whereis pip 即可看到它的位置。
在windows下面这是一个可执行程序,而在linux下可以看到它仅仅是一个Python脚本,内容如下(会略微有出入):
1 | #!/usr/bin/python |
可以看到其实就是从pip这个包里面引入了它的main方法并且执行而已。
pip安装速度太慢
这个是很多人在使用pip遇到的第一个问题,pip安装第三方库的流程是这样的:首先去网站上找到目标库,下载下来,然后安装到你电脑的指定位置(可以用pip -V看到这个指定的位置)。(当然也是有缓存机制的,但是这里按下不表)
那这个问题的成因也非常简单,因为默认使用的是国外的源,所以速度就不太行,于是就有以下几种解决方案:
解决方法一:换源
从国外的源下载真的慢,还有可能甚至完全下载不了,但是好在国内有不少优秀的源,只需要你下载的时候指定一下就可以了,这里推荐几个不错的源:
- 阿里云 http://mirrors.aliyun.com/pypi/simple/
- 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
- 豆瓣(douban) http://pypi.douban.com/simple/
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
比如下载requests库的时候,只需要pip install requests -i http://pypi.douban.com/simple/ 指定一下即可。
至于https和http之间的区别,如果你用的是http,那么会出现警告,并且不让你下载,你需要根据它的提示在后面加上一个 --trusted-host pypi.douban.com这样即可。
解决方法二:使用代理
只需要下载的时候指定即可:pip install requests --proxy 127.0.0.1:1081,怕小白不清楚然后用了没效果,这里先声明:如果你不懂代理是什么,请不要使用这条。
解决方法三:手动下载
pip安装第三方库的原理就是它帮你从特定网站上下下来.whl文件,然后帮你安装上去而已,而为什么会慢就是因为下载的包的比较慢,所以我们完全可以自己去下载(或者直接问别人要),这里一般是去https://pypi.org/这个网站上搜索你要的,然后下载下来。但是下载的时候你会发现有非常多的文件,选哪一个呢?

第一个是软件包的名字和版本号,第二个是对应的python版本,上图中就是适合python2.7的,最后一个是适合的机器,照着自己的机器选就行了。
下载下来之后只需要定位到那个文件,然后在cmd中pip install xxx.whl即可安装。
pip安装权限问题
如果说上面仅仅是“慢”,还不算致命的错误的话,那接下来的问题就有点严重了,在你等待了半天的情况下,终于下载完了,然后突然给你来一波:

然后你心态就炸了。我那时候是为了爬虫下的Python,然后首先我下载requests就等了半天了,最后突然给我来这么一出,气得我直接把Python直接删了。(PS:如果你Python安装在C盘基本会出现这个问题,但是别的盘就不会)
好了我们这里来分析一下这是为什么。从提示上来看呢,说的是权限问题。那么我们就看看为什么会有权限问题,首先打开cmd,然后输入whoami 或者输入 echo %username% 就能知道当前的用户了。
接着我们输入pip -V,会显示出pip装在了你电脑的哪里,那个前面的目录就是pip默认下载的模块的位置了,我这里是C:\Program Files\Python38\Lib\site-packages,问题就出在这里了:

我们只有读取和执行的权限,却没有写入修改的权限。这也就是为什么会报错的原因。
理解了原因了,那么处理方式就很简单了:
- 使用管理员权限运行
cmd来执行pip命令,较为推荐 - 修改
site-packages的权限,让自己能够完全控制,很推荐,一劳永逸 重新安装Python到别的路径下面- 在安装的时候使用
--user选项
pip导出、导入第三方库
在你逛github上面的Python项目的时候,你可能会发现里面有一个叫requirements.txt的文件,打开来也很好理解,就是各种库和它们的版本,你只需要使用pip install -r requirements.txt就可以安装这个文件中所有的相对应的库了,然后你就可以愉快使用他们的项目了。
当然你也可以使用pip freeze requirements.txt来导出你当前使用的Python库的环境,非常方便。
pip配置
pip有一个自己的配置文件,默认是不存在的,需要自己创建,你可以在里面写上各种各样自定义的需求,比如定义好源,这样以后就可以不用每次都在命令行里面加入你需要的设置了。
不同平台下的配置文件位置不同:
- windows下:
%APPDATA%\pip\pip.ini - linux下:
$HOME/.config/pip/pip.conf - macOS下:
$HOME/Library/Application Support/pip/pip.conf,当前面那个不存在时,使用$HOME/.config/pip/pip.conf
我的配置文件内容:
1 | [global] |
只是简单设置了阿里云的镜像而已。当然是以命令行的为准,如果命令行里没写才以这个为准的。
ZSH下安装问题
因为需要使用socks代理来爬取一些东西,就需要安装requests库中的socks,在zsh下输入:pip install requests[socks],会提示zsh: no matches found: requests[socks],这是因为在zsh里方括号是用来glob模式匹配的。
解决方法也很简单,只需要单引号引起来就不要紧了。pip install 'requests[socks]' 即可。当然你也可以在你的命令前面加上noglob也可以。