2. pip基础使用:安装、卸载、升级包,以及list与freeze的区别
好,咱们正式开始聊pip。说实话,pip这东西太基础了,基础到很多人用了好几年都没仔细琢磨过。我见过不少同事,装包只会pip install xxx,卸载就靠猜。嗯,今天咱们把它彻底捋一遍。
2.1 安装包:不只是pip install
最基础的安装命令,大家都会:
pip install requests
但实际项目中,我强烈建议你指定版本号。为什么?因为不指定版本,今天装的是1.0,明天可能就是2.0了。我曾经在一个项目里吃过这个亏——同事的机器上装了个新版库,接口变了,代码直接崩了。
所以,我个人的习惯是:
pip install requests==2.28.1
如果你想要某个范围内的版本,也可以这样:
pip install "requests>=2.20, <3.0"
还有几个常用选项,我列一下:
| 选项 | 说明 | 示例 |
|---|---|---|
-U |
升级到最新版 | pip install -U requests |
--user |
安装到用户目录(不需要sudo) | pip install --user requests |
-i |
指定镜像源(国内必备) | pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests |
-r |
从requirements文件安装 | pip install -r requirements.txt |
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
2.2 卸载包:干净利落
卸载命令很简单:
pip uninstall requests
但这里有个坑——pip默认会问你是否确认删除。如果你在脚本里批量卸载,记得加个-y参数:
pip uninstall requests -y
我曾经在CI脚本里忘了加-y,结果构建卡在那等人工确认……嗯,那次之后我就长记性了。
pip show 包名先看看依赖关系。
2.3 升级包:保持新鲜度
升级单个包:
pip install --upgrade requests
或者简写:
pip install -U requests
升级pip本身:
pip install --upgrade pip
这里说个我踩过的坑。有一次我升级了某个核心库,结果项目里三个模块同时报错。后来我养成了一个习惯——升级前先看看changelog,或者先在测试环境试一下。
2.4 pip list vs pip freeze:到底有啥区别?
这个问题我面试时经常问。很多人答不上来,或者觉得差不多。其实区别很明显。
pip list:显示当前环境中所有已安装的包,包括pip本身、setuptools这些基础工具。
$ pip list
Package Version
------------------ ---------
certifi 2022.12.7
charset-normalizer 3.1.0
idna 3.4
pip 23.0.1
requests 2.28.1
setuptools 67.6.0
urllib3 1.26.15
pip freeze:只显示你用pip install安装的包,而且输出格式可以直接扔进requirements.txt。
$ pip freeze
certifi==2022.12.7
charset-normalizer==3.1.0
idna==3.4
requests==2.28.1
urllib3==1.26.15
看出来了吗?pip freeze不会输出pip和setuptools。而且它的输出格式是包名==版本号,可以直接拿来用。
我个人的习惯是:
- 查看环境里装了啥,用
pip list - 生成依赖文件,用
pip freeze > requirements.txt
pip list的输出直接当requirements.txt!格式不对,而且会带上你不需要的基础包。
2.5 实战:用pip freeze管理项目依赖
假设你接手了一个项目,第一件事就是生成依赖文件:
pip freeze > requirements.txt
然后别人拿到项目,直接:
pip install -r requirements.txt
这样所有人的环境就一致了。我在团队里推行这个做法后,再也没出现过「我机器上能跑啊」这种鬼话。
不过要注意一点——pip freeze会输出当前环境所有的包。如果你在虚拟环境里用,那没问题。但如果你在全局环境里用,可能会把一堆不相干的包也列进去。所以,我建议每个项目都用虚拟环境。
2.6 常用命令速查表
| 命令 | 作用 |
|---|---|
pip install 包名 |
安装包 |
pip uninstall 包名 |
卸载包 |
pip list |
列出所有包 |
pip freeze |
列出项目依赖包 |
pip show 包名 |
查看包详情 |
pip search 关键词 |
搜索包(已废弃,建议去PyPI网站搜) |
pip check |
检查依赖冲突 |
pip check扫一下环境。我每周都会跑一次,看看有没有依赖冲突。早发现早解决,别等到上线前才炸。
好了,pip的基础操作就这些。说白了,日常开发中80%的时间你只会用到install、freeze和list这三个命令。但把这几个用熟了,能省不少事。下一章咱们聊聊虚拟环境,那才是真正让pip发挥威力的地方。