2、Python包管理工具:pip的基本使用、pip的配置文件、pip的源配置
说到Python,就绕不开pip。我刚开始做网络自动化的时候,第一个碰到的坑就是包依赖问题。你想想看,写好的脚本拿到另一台机器上跑,结果报错说缺少这个模块、那个库——这种体验,干过运维的都懂。
pip就是Python的包管理工具。说白了,它帮你下载、安装、卸载那些第三方的Python库。没有它,你连个requests库都得手动去官网扒源码,那效率就太低了。
2.1 pip的基本使用
先看看最常用的几个命令。我平时在服务器上配环境,基本就靠这几条指令活着。
# 安装包
pip install requests
# 指定版本安装
pip install requests==2.28.1
# 升级包
pip install --upgrade requests
# 卸载包
pip uninstall requests
# 查看已安装的包
pip list
# 查看某个包的详细信息
pip show requests
# 查看哪些包需要升级
pip list --outdated
嗯,这里要注意一个细节。很多新手喜欢直接 pip install 一把梭,结果装了一堆乱七八糟的版本。我在项目中遇到过好几次,因为某个包的版本冲突,导致整个自动化脚本跑不起来。
pip list 看看当前环境里已经装了哪些。尤其是那些核心库,比如 paramiko、netmiko、napalm,它们的版本兼容性有时候挺坑的。
2.2 pip的配置文件
pip的配置文件,很多人可能都没碰过。但说实话,搞运维的要是不会配这个,那效率至少打五折。
配置文件的位置,不同系统不一样:
| 操作系统 | 配置文件路径 |
|---|---|
| Linux / macOS | ~/.pip/pip.conf 或 ~/.config/pip/pip.conf |
| Windows | %APPDATA%\pip\pip.ini |
| 全局配置 | /etc/pip.conf |
配置文件长什么样?我给你看个例子:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
[install]
timeout = 60
no-cache-dir = false
为什么要有配置文件?我举个例子你就明白了。你在公司内网装包,外网访问不了PyPI官方源,每次都得手动指定 -i 参数。配好配置文件之后,一劳永逸。
pip.conf 里,问题就解决了。所以,去客户现场之前,先问问他们有没有内部源。
2.3 pip的源配置
源配置,说白了就是告诉pip去哪里下载包。默认的源是PyPI官方源,地址是 https://pypi.org/simple/。但这个源在国外,国内访问速度慢得让人抓狂。
常用的国内镜像源:
| 镜像源名称 | 地址 |
|---|---|
| 清华大学 | https://pypi.tuna.tsinghua.edu.cn/simple |
| 阿里云 | https://mirrors.aliyun.com/pypi/simple/ |
| 中国科技大学 | https://pypi.mirrors.ustc.edu.cn/simple/ |
| 豆瓣 | https://pypi.douban.com/simple/ |
临时指定源,用 -i 参数:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
永久配置源,写进配置文件:
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
我个人习惯用清华的源,稳定、更新也及时。但有一次,清华源挂了几个小时,我临时切到阿里云才把包装完。所以,建议你手头备两三个源的地址,以防万一。
- pip是Python的包管理工具,核心命令就那几个:install、uninstall、list、show
- 配置文件可以帮你省去每次手动指定参数的麻烦
- 国内用户一定要配镜像源,不然下载速度会让你怀疑人生
- trusted-host这个参数别忘了,有些源需要显式声明信任
为什么会强调源配置?你想想看,网络运维脚本里经常用到 netmiko、paramiko、ncclient 这些库。如果pip下载慢,或者干脆连不上,你的自动化工作就卡在第一步了。我见过不少同事,因为源没配好,装个包花了半小时,最后发现是网络问题。
嗯,关于pip的基本使用、配置文件和源配置,就聊这么多。这些东西看着简单,但用好了,能帮你省下大把时间。下一节我们聊聊虚拟环境,那才是真正解决包依赖问题的利器。