Python内置小工具(http.server,JSON,检查第三方库,pip高级用法)

Python内置小工具(http.server,JSON,检查第三方库,pip高级用法)

一、1秒钟启动一个下载服务器

在实际工作中,时常会有这样的一个需求:将文件传给其他同事。将文件传给同事本身并不是一个很繁 琐的工作,现在的聊天工具一般都支持文件传输。但是,如果需要传送的文件较多,操作起来就会比较 麻烦。此外,如果文件在远程的服务器上,则需要先将远程服务器的文件下载到本地,然后再通过聊天 工具传给同事。再或者,你并不是特别清楚要传哪几个文件给同事,所以,你们需要进行交流,而交流 的时间成本是比较高的,会降低办事效率。

此时,如果你知道Python内置了一个下载服务器就能够显著提升效率了。例如,你的同事要让你传的文 件位于某一个目录下,那么,你可以进入这个目录,然后执行下面的命令启动一个下载服务器:

python -m SimpleHTTPServer

在Python 3中,由于对系统库进行了重新整理,因此,使用方式会有不同:

python -m http.server

执行上面的命令就会在当前目录下启动一个文件下载服务器,默认打开8000端口。完成以后,只需要将 IP和端口告诉同事,让同事自己去操作即可,非常方便高效。

使用浏览器访问Python启动的下载服务器,可以看到一个类似于FTP下载的界面,这个时候单击文件下 载即可。通过这种方式传输文件,可以降低大家的沟通成本,提高文件传输的效率。

上面使用的Python语句,从工作原理来说,仅仅是启动了一个Python内置的Web服务器。如果当前目 录下存在一个名为index.html的文件,则默认显示该文件的内容。如果当前目录下不存在这样一个文 件,则默认显示当前目录下的文件列表,也就是大家看到的下载服务器。

测试

进入cmd进入一个目录输入python -m http.server即可

Python内置小工具(http.server,JSON,检查第三方库,pip高级用法)

Python内置小工具(http.server,JSON,检查第三方库,pip高级用法)

二、字符串转换为JSON

JSON是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。由于JSON的 诸多优点,已被广泛使用在各个系统中。JSON使用越广泛,需要将JSON字符串转换为JSON对象的需求 就越频繁。

例如,在工作过程中,我们的系统会调用底层服务的API。底层服务的API一般都是以JSON的格式返 回,为了便于问题追踪,我们会将API返回的JSON转换为字符串记录到日志文件中。当需要分析问题 时,就需要将日志文件中的JSON字符串拿出来进行分析。这个时候,需要将一个JSON字符串转换为 JSON对象,以提高日志的可读性。

这个需求十分常见,以至于使用搜索引擎搜索"JSON",处于搜索结果的第一项便是“在线JSON格式化工 具”。除了打开浏览器,使用在线JSON格式化工具以外,我们也可以使用命令行终端的Python解释器来 解析JSON串,如下所示:

[ ~]# echo ‘{"job": "developer", "name": "lmx", "sex": "male"}‘ | python -m json.tool ? 
{ ? ?
    "job": "developer",
    "name": "lmx",
    "sex": "male" 
}

使用命令行解释器解析JSON串非常方便,而且,为了便于阅读,该工具还会自动将转换的结果进行对齐和格式化。如下所示:

[ ~]# echo ‘{"address": {"province": "zhejiang", "city": "hangzhou"}, "name": "lmx", "sex": "male"}‘ | python -m json.tool 
{ ? ?
    "address": {
    "city": "hangzhou",
    "province": "zhejiang"
    },
    "name": "lmx",
    "sex": "male"
}

三、检查第三方库是否正确安装

安装完Python的第三方库以后,如何确认这个库已经正确安装了呢?答案很简单,只需要尝试进行 import导入即可。如果导入没有任何错误,则认为安装成功;如果导入失败,则认为安装失败。

[ ~]# python 
Python 2.7.5 (default, Oct 30 2018, 23:45:53) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>>

验证Python的第三方库是否安装成功,本身也是一件很简单的事情,但是,如果我们使用脚本对大批量 的服务器进行自动部署,又应该如何验证第三方库安装成功了呢?肯定不能登录每一台服务器进行验 证。这个时候,我们可以使用Python解释器的-c参数快速地执行import语句,如下所示:

[ ~]# python -c "import paramiko" 
Traceback (most recent call last):  
File "<string>", line 1, in <module> 
ImportError: No module named paramiko 
[ ~]#

四、pip高级用法

为了便于用户安装和管理第三方库和软件,越来越多的编程语言拥有自己的包管理工具,如nodejs的 npm,ruby的gem。Python也不例外,现在Python生态主流的包管理工具是pip。

1、pip介绍

pip是一个用来安装和管理Python包的工具,是easy_install的替代品,如果读者使用的是Python 2.7.9+或Python 3.4+版本的Python,则已经内置了pip,无须安装直接使用即可。如果系统中没有安装 pip,也可以手动安装。

2、python3安装pip

方法1:python3安装完成后默认已经带有pip3

[ bin]# pip3 -V pip 19.2.3 from /usr/local/python38/lib/python3.8/site-packages/pip (python 3.8) 
[ bin]# pwd 
/usr/local/python38/bin 
[ bin]#

你可以用以下命令,创建软链接

ln -s /usr/local/python38/bin/pip3 /usr/bin/pip

方法2:使用以下方法重新安装pip插件

下载get-pip.py脚本

wget https://bootstrap.pypa.io/3.2/get-pip.py

运行脚本

python3 get-pip.py

python3创建pip3索引

ln -s /usr/python3.6.1/bin/pip /usr/bin/pip3

测试是否安装成功

pip3 install request

pip之所以能够成为流行的包管理工具,并不是因为它被Python官方作为默认的包管理器,而是因为 它自身的诸多优点。pip的优点有:

  • pip提供了丰富的功能,其竞争对手easy_install则只支持安装,没有提供卸载和显示已安装列表的功 能;
  • pip能够很好地支持虚拟环境;
  • pip可以通过requirements.txt集中管理依赖;
  • pip能够处理二进制格式(.whl);
  • pip是先下载后安装,如果安装失败,也会清理干净,不会留下一个中间状态。

如果用户没有将软件打包上传到pypi.python.org,则无法使用pip进行安装。对于这种情况,Python生 态也有标准的做法,例如,我们尝试从源码安装paramiko。需要注意的是,我们也可以通过pip安装 paramiko的,这里只是为了演示Python生态中源码安装:

$ git clone https://github.com/paramiko/paramiko.git ? 
$ cd paramiko ? 
$ python setup.py install

3、给pip3重命名

切换至家目录,通过.bashrc添加别名

[ bin]# cd ~ 
[ ~]# vim .bashrc alias pip=pip3 
[ ~]# source .bashrc 
[ ~]# pip -V 
pip 19.2.3 from /usr/local/python38/lib/python3.8/site-packages/pip (python 3.8)

4、pip3常用命令

子命令解释说明
install安装软件包
download下载软件包
uninstall卸载安装包
freeze按照requirements格式输出安装包,可以到其他服务器上执行pip install -r requirements.txt直接安装软件
list列出当前系统中的安装包
show查看安装包的信息,包括版本、依赖、许可证、作者、主页等信息
check检查安装包依赖是否完整
search查找安装包
wheel打包软件到wheel格式
hash计算安装包的hash值
completion生成命令补全配置
help获取pip和子命令的帮助信息

5、加速pip安装的技巧(linux)

如果大家使用Python的时间比较长的话,会发现Python安装的一个问题,即pypi.python.org不是特别 稳定,有时候会很慢,甚至处于完全不可用的状态。这个问题有什么好办法可以解决呢?根据笔者的经 验,至少有两种不同的方法。

(1)使用豆瓣或阿里云的源加速软件安装

访问pypi.python.org不稳定的主要原因是因为网络不稳定,如果我们从网络稳定的服务器下载安装 包,问题就迎刃而解了。我们国内目前有多个pypi镜像,推荐使用豆瓣的镜像源或阿里的镜像源。如果 要使用第三方的源,只需要在安装时,通过pip命令的-i选项指定镜像源即可。如下所示:

pip install -i https://pypi.douban.com/simple/ flask

每次都要指定镜像源的地址比较麻烦,我们也可以修改pip的配置文件,将镜像源写入配置文件中。对 于Linux系统来说,需要创建~/.pip/pip.conf文件,然后在文件中保存如下内容:

[ ~]# mkdir .pip 
[ ~]# cd .pip 
[ .pip]# touch pip.conf 
[ .pip]# vim pip.conf 
[global] ? 
index-url = https://pypi.douban.com/simple/ 
[ .pip]#

(2)将软件下载到本地部署

如果需要对大批量的服务器安装软件包,并且安装包比较多或者比较大,则可以考虑将软件包下载到本 地,然后从本地安装。这对于使用脚本部署大量的服务器非常有用,此外,对于服务器无法连接外网的 情况,也可以使用这种方法。如下所示:

# 下载到本地 ? 
pip install --download=‘pwd‘ -r requirements.txt ?

# 本地安装 ? 
pip install --no-index -f file://‘pwd‘ ?-r requirements.txt

使用这种方式,只需要下载一次,就可以多处安装,不用担心网络不稳定的问题。并且,pip能够自动 处理软件依赖问题。例如,我们通过这种方式下载Flask到当前目录下,则Flask的依赖click、 itsdangerous、Jinja2、MarkupSafe和Werkzeug也会被下载到本地,如下所示:

pip install --download=‘pwd‘ flask ?

$ ls ? 
click-6.7-py2.py3-none-any.whl ? itsdangerous-0.24.tar.gz ? 
MarkupSafe-0.23.tar.gz  Flask-0.12-py2.py3-none-any.whl ? 
Jinja2-2.9.5-py2.py3-none-any.whl  Werkzeug-0.11.15-py2.py3-none-any.whl

6、在windows环境下修改pip镜像源的方法(以python3.5为例)

(1):在windows文件管理器中,输入 %APPDATA%``

(2):会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件

(3):在新建的pip.ini文件中输入以下内容,搞定文件路径:"C:\Users\Administrator\AppData\Roaming\pip\pip.ini"

[global]
timeout = 6000
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
设置完成测试:

Python内置小工具(http.server,JSON,检查第三方库,pip高级用法)