
python实用工具及pip高级用法
python实用小工具及pip高级用法
一、Python实用小工具
1. 1秒钟启动一个下载服务器
在实际工作中,时常会有这样的一个需求:将文件传给其他同事。传输文件并不是一个很繁琐的工作,现在的聊天工具一般都支持文件传输。但是,如果需要的文件较多,操作起来就会比较麻烦。此外,如果文件在远程的服务器上,则需要先把远程服务器的文件下载到本地,然后再通过聊天工具传给同事。再或者,你并不是特别确定要传哪几个文件给同事,所以,你们需要进行交流,而交流又需要时间。
此时,如果你知道 Python内置了一个下载服务器就能够显著提升效率了。例如,你确定同事要让你传的文件位于某一个目录下,那么,你可以进入这个目录,然后执行下面的命令:
如果是python2:
1 | python -m SimpleHTTPServer |
如果是python3:
1 | python -m http.server |
执行上面的命令就会在当前目录下启动一个文件下载服务器,默认打开8000端口。这时就可以把本机ip和端口告诉同事,让同事使用浏览器访问Python启动的下载服务器,可以看到一个类似于FTP下载的界面。这个时候,同事就可以自己根据需要去下载了,省心省事,节约时间
2.字符串转换为JSON
JSON是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析生成。由于JSON的诸多优点,已被广泛使用在各个系统中。JSON使用越广泛,需要JSON字符串转换为JSON对象的需求就越频繁。这个需求十分常见,以至于使用搜索引擎搜索”JSON”,处于搜索结果的第一项便是“在线JSON格式化工具”。除了打开浏览器,使用在线JSON格式化工具以外,其实完全可以使用命令行终端的Python解释器来解析JSON串,如下所示:
1 | $ echo '{"job": "developer", "name": "nanyuzuo", "sex": "male"}' | python -m json.tool |
使用命令行解释器解析JSON串非常方便,而且,为了便于阅读,该工具还会自动将转换的结果进行对齐和格式化。如下所示:
1 | $ echo '{"address": {"province": "guangdong", "city": "huizhou"}, "name": "nanyuzuo", "sex": "male"}' | python -m json.tool |
3.检查第三方库是否安装
安装完Python的第三方库以后,如何确认这个库已经正确安装了呢?答案很简单,只需要尝试进行import导入即可。如果导入没有任何错误,则认为安装成功;如果导入失败,则认为安装失败。
验证 Python的第三方库是否安装成功,本身也是一件很简单的事情,但是,如果使用脚本对大批量的服务器进行自动部署,又应该如何验证第三方库安装成功了呢?肯定不能登录每一台服务器进行验证。这个时候,我们可以使用Python解释器的-c参数快速执行import语句,如下所示:
1 | python -c "import paramiko" |
使用这种验证方式,不但比交互式的验证更加高效,更重要的是,能够在脚本中实现对于远程服务器的验证操作。
二、pip高级用法
1.pip介绍
pip之所以能够成为最流行的包管理工具,并不是因为它被Python官方作为默认的包管理器,而是因为它自身的诸多优点。pip的优点有:
- pip提供了丰富的功能,其竞争对手easy_install则只支持安装,没有提供卸载和显示已安装列表的功能
- pip能够很好地支持虚拟环境
- pip可以 requirements.txt集中管理依赖
- pip能够处理二进制格式(.whl)
- pip是先下载后安装,如果安装失败,也会清理干净,不会留下一个中间状态。
如果用户没有将软件打包上传到pypi.python.org,则无法使用pip进行安装。对于这种情况,Python生态也有标准的做法,例如,我们尝试从源码安装 paramiko。需要注意的是,是可以通过pip安装 paramiko的,这里只是为了演示 Python生态中源码安装:
1 | $ git clone https: //github.com/paramiko/paramiko.git |
2.pip常用命令
2.1 pip命令
查看pip版本 pip -V(注意V要大写)
pip升级:
1
pip install --upgrade pip
如果pip升级失败,可以先重新安装回pip:
1
python -m ensurepip
再进行升级
1
python -m pip install –upgrade pip
2.2 pip子命令,详见下表:
子命令 | 解释说明 |
---|---|
install | 安装软件包 |
download | 下载软件包 |
uninstall | 卸载软件包 |
freeze | 按照requirements格式输出安装包,可到其他服务器上使用pip install -r requirements.txt直接安装 |
list | 列出当前系统中的安装包 |
show | 查看安装包的信息,包括版本、依赖、许可证、作者、主页等信息 |
check | 检查安装包的依赖是否完整 |
pip_search | 查找安装包,原来的search已经不支持了,需要先用pip install pip_search安装,之后用pip_search代替 |
wheel | 打包软件到whell格式 |
hash | 计算安装包的hash值 |
completion | 生成命令补全配置 |
help | 获取pip和子命令的帮助信息 |
pip 常用子命令:
查找安装包:
1
pip_search SomePackage
安装包
1
2
3pip install SomePackage # 最新版本
pip install SomePackage==1.0.4 # 指定版本
pip install SomePackage>=1.0.4 # 最小版本删除安装包
1
pip uninstall SomePackage
查看安装包信息
1
2
3
4
5
6
7
8
9
10
11$ pip show SomePackage
Name: openpyxl
Version: 3.1.1
Summary: A Python library to read/write Excel 2010 xlsx/xlsm files
Home-page: https://openpyxl.readthedocs.io
Author: See AUTHORS
Author-email: charlie.clark@clark-consulting.eu
License: MIT
Location: C:\Users\nanyu\AppData\Local\Programs\Python\Python311\Lib\site-packages
Requires: et-xmlfile
Required-by:升级包
1
pip install --upgrade SomePackage
升级指定的包,通过使用==, >=, <=, >, < 来指定一个版本号
查看安装包依赖是否完整
1
2$ pip check SomePackage
No broken requirements found.查看已安装的软件包列表
1
2
3$ pip list
# 查看当前可供升级的包
$ pip list --outdated导出系统已安装的安装列表
1
$ pip freeze > requirements.txt
从requirements文件安装
1
$ pip install -r requirements.txt
使用pip命令补全(使用命令补全以后,通过键入’pip i
‘,将会自动输入’pip install’。)
1 | $ pip completion --bash >> ~/.profile |
3.加速pip安装的技巧
由于众所周知的原因,pypi.python.org不是特别稳定,有时候会很慢,甚至处于完全不可用的状态。解决这个问题,有以下办法:
3.1 使用清华、豆瓣或阿里云的源加速软件安装
访问 pypi.python.org不稳定的主要原因是因为网络不稳定,如果我们从网络稳定的服务器下载安装包,问题就迎刃而解了。我们国内目前有多个pypi镜像,推荐使用清华、豆瓣的镜像源或阿里的镜像源。如果要使用第三方的源,只需要在安装时,通过pip命令的-i选项指定镜像源即可。如下所示:
以清华的镜像源安装flask为例:
1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
其他镜像源列表如下,使用方法相同
- 阿里云:http://mirrors.aliyun.com/pypi/simple/
- 中国科学技术大学 :http://pypi.mirrors.ustc.edu.cn/simple/
- 华中科技大学:http://pypi.hustunique.com/
- 豆瓣源:http://pypi.douban.com/simple/
- 腾讯源:http://mirrors.cloud.tencent.com/pypi/simple
- 华为镜像源:https://repo.huaweicloud.com/repository/pypi/simple/
每次都要指定镜像源的地址比较麻烦,也可以修改pip的配置文件,将镜像源写人配置文件中。对于Linux系统来说,需要创建~/.pip/pip.conf文件,然后在文件中写入以下内容:
1 | [global] |
3.2 将软件下载到本地部署
如果需要对大批量的服务器安装软件包,并且安装包比较多或者比较大,则可以考虑将软件包下载到本地,然后从本地安装。这对于使用脚本部署大量的服务器非常有用,此外,对于服务器无法连接外网的情况,也可以使用这种方法。如下所示:
在有网络的环境下,先将包下载到本地
1
2
3
4# 从清华源批量下载所需包,下载目录为offline_packages(没有会自动创建)
pip download -d offline_packages -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 从清华源批量下载所需单个包,下载目录为offline_packages(没有会自动创建)
pip download -d offline_packages flask -i https://pypi.tuna.tsinghua.edu.cn/simple/在没网络的环境下进行本地安装,offline_packages为包所在的目录
1
2
3
4#批量安装
pip install --no-index --find-links=./offline_packages/ -r requirements.txt
#单个包安装
pip install --no-index --find-links=./offline_packages/ flask