第2章 Python生态工具

2021-03-15  本文已影响0人  super_pcm

2.1 python内置小工具

2.1.1 快速启动一个下载服务器

python -m SimpleHTTPServer
python -m http.server

2.1.2 字符串转为json

利用json.tool模块,能够格式化json字符串,如:

echo '{"job": "dev", "name": "pcm", "sex": "male"}' |python -m json.tool

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

确认第三方库是否正常安装,不可能每次都进入到python命令行中使用import语句导入观察结果来判断,可以使用下面的方式进行判断:

python -c "import paramiko"

2.2 pip的高级用法

2.2.2 pip常用命令

pip的子命令

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

2.2.3 加速pip安装的技巧

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

可以直接指定镜像地址

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

也可以把镜像源写入配置文件中,在linux系统中创建 ~/.pip/pip.conf文件,内容如下(清华源):

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
  1. 将软件下载到本地部署

下载到本地

pip install --download=`pwd` -r requirements.txt

本地安装

pip install --no-index -f file://`pwd` -r requirements.txt

2.3 Python编辑器

Linux下推荐使用vim编辑器,但是需要做比较多的修改才能方便地用来编写python程序。windows下推荐使用PyCharm编辑器,有语法高亮等高级功能。

2.4 Python编程辅助工具

2.4.1 Python交互式编程

最简单的python的交互式编程的方法就是使用标准的python shell,在命令行中直接输入python即可。
虽然很方便,但是标准的python shell没有语法高亮,不支持tab自动补全,也没有自动缩进的功能。
所以我们更加推荐使用IPython来进行交互式的编程学习,IPython是增强型的Python shell,除了解决上面说的问题外,还可以方便地进行交互式编程和数据分析。

2.4.2 使用IPython交互式编程

Linux下可以使用yum或者apt命令直接安装

yum install ipython

具体使用方法略过,忘记的可以上网查找教程。

2.4.3 jupyter的使用

jupyter就是以前的IPython Notebook,是一种新兴的交互式数据分析与记录工具,它可以通过浏览器访问本地或者远程的IPython进程,并利用浏览器的图形界面,增强IPython的可视化输出。
安装方法如下:

pip install jupyter

启动方法如下:

jupyter notebook --no-browser --ip=0.0.0.0

具体使用方法略过,可以上网找对应的教程。

2.5 Python调试器

在编写较大的程序的时候,调试器的使用是必不可少的。这里我们介绍两种调试器,分别是Python标准库自带的pdb和开源的ipdb。

2.5.1 标准库pdb

pdb的部分调试命令

命令 缩写 说明 命令 缩写 说明
break b 设置断点 list I 根据参数打印源码
continue cont/c 继续执行至下一个断点 up u 移动到上一层堆栈
next n 执行下一行,如果下一行是子程序,不会进入子程序 down d 移动到下一层堆栈
step s 执行下一行,如果下一行是子程序,会进入子程序 restart run 重新开始调试
where bt/w 打印堆栈轨迹 args a 打印函数参数
enable - 启用禁用的断点 clear cl 清除所有的断点
disable - 禁用启用的断点 return r 执行到当前函数结束
pp/p - 打印变量或表达式

有两种方法启动Python调试器,一种是在命令行参数中指定使用,如下所示:

python -m pdb test_db.py

另外一种实在python代码中调试pdb模块的set_strace方法设置一个断点。当程序运行至断点时,将会暂停执行并打开调试器。

#!/usr/bin/python

from __future__ import print_function
import pdb

def sum_nums(n):
    s=0
    for i in range(n):
        pdb.set_trace()
        s += i
        print(s)

if __name__ == '__main__':
    sum_nums(5)

这两种方法没什么本质的区别,通常是较小的程序我们可以直接通过命令行去启动调试,这样从程序的第一行开始进行调试;如果程序较大,我们会在需要调试的地方设置 set_trace 方法设置断点,这样只有在执行到设置断点的地方才开始启动调试器。

2.52 开源的ipdb

ipdb之于pdb,就相当于IPython之于python。虽然实现同样的功能,但是在易用性方面做了很多改进。

由于ipdb是一个第三方库,我们需要先安装才能使用。

pip install ipdb

前面的例子用ipdb进行改造的话,就会变成这样:

#!/usr/bin/python

from __future__ import print_function
import pdb

def sum_nums(n):
    s=0
    for i in range(n):
        ipdb.set_trace()
        s += i
        print(s)

if __name__ == '__main__':
    sum_nums(5)

除了使用pdb和ipdb之外,我们还可以使用PyCharm的图形化界面进行调试。

2.6 Python代码规范检查

2.6.1 PEP8 编码规范介绍

PEP8是事实上的代码风格标准,由于内容比较多就举个简单的例子进行介绍。
在Python中,包的导入在使用import时应该一次只导入一个模块,不同的模块应该独立一行,例如

#正确的示例
import os
import sys

#反面的示例
import os, sys

并且在导入模块的顺序也是有要求的,先是导入标准模块,其次导入第三方模块,最后导入当前应用程序,各个分组之间以空行分割。

import time
import json

import yaml
import psutil

from mango_agent.cation.common import kill_mongod,start_mogo_node

2.6.2 使用pycodestyle检查代码规范

遵循相同标准的代码风格非常重要,为了帮助大家形成统一的代码风格,Python官方提供了同名的命令行工具,该工具能够检查Python代码是否违反PEP8规范,并对违反的位置做出相应的提示.

pip install pep8

为了避免检查工具和代码风格名称一样带来的困惑,这个工具已经重命名为pycodestyle,安装方法同上。

pip install pycodestyle

使用方法

pycodestyle --first test.py

2.6.3 使用autopep8将代码格式化

autopep8是一个开源的命令行工具,它能够将Python代码自动格式化为PEP8风格。autopep8使用pycodestyle工具来决定代码中哪部分需要被格式化。安装和使用非常简单。

#安装
pip install autopep8

#使用--in-place直接修改文件,否则不会修改文件,会把结果输出到命令行
autopep8 --in-place test.py

2.7 Python工作环境管理

因为Python2和Python3之间存在着较大的差异,然后在很多场景下我们都需要同时用到Python2和Python3.所以,对Python的版本进行管理就很有必要了。
在这一节里,我们将会介绍两个工具,即pyenv和virtualenv。前者用于管理不同的Python版本,后者用下管理不同的工作环境。有了这两个工具,Python相关版本问题将不再是问题。

2.7.1 使用pyenv管理不同的Python版本

pyenv是一个python版本管理工具,它能够进行全局的Python版本切换,也可以为单个项目提供对应的Python版本。使用pyenv后,可以在服务器上安装多个不同的Python版本,也可以安装不同的Python实现。不同的Python版本之间的切换也非常简单。

  1. pyenv的安装

  2. pyenv的使用
    我们通过pyenv的instal命令,可以查看pyenv当前支持哪些Python版本,如下:

pyenv install --list

使用pyenv安装不同版本的Python版本:

pyenv install -v 3.6.0
pyenv install -v 2.7.13

查看当前系统中包含的Python版本:

pyenv versions

通过pyenv选择不用版本的Python版本,如下

pyenv global 3.6.0

切换Python版本以后,与版本相关的依赖也会一起切换。因此,我们不用担心不同的版本在系统是否会相互干扰。

如果要删除某个Python版本,使用uninstall命令即可。

pyenv uninstall 2.7.10

2.7.2 使用virtualenv管理不同的项目

virtualenv本身是一个独立的项目,用以隔离不同项目的工作环境。例如,用户pcm希望在项目A中使用flask0.8这个版本,与此同时,又想在项目B中使用Flask0.9这个版本。如果我们全局安装flask,必然无法满足用户的需求。这个使用我们就可以使用virtualenv。
读者需要注意pyenv和virtualenv的区别。pyenv用以管理不同的Python版本,例如,你的系统工作时使用Python2,学习的时候使用Python3.virtualenv用以隔离项目的工作环境,如同上面的举例。我们只要组合pyenv和virtualenv这两个工具,就能够构造Python和第三方库的任意版本组合,拥有很好的灵活性,也避免了项目之间的相互干扰。
virtualenv本身是一个独立的工具,用户 可以不使用pyenv而单独使用virtualenv。但是,如果你使用了pyenv,就需要安装pyenv-virtualenv插件,而不是通过virtualenv软件使用virtualenv的功能。

  1. pyenv-virtualenv的安装
    略过
  2. pyenv-virtualenv的使用
#创建项目A的工作环境
pyenv virtualenv 2.7.13 first_project

#创建项目B的工作环境
pyenv virtualenv 2.7.13 second_project

#激活项目A的工作环境
pyenv activete first_project
#关闭项目A的工作环境
pyenv deactivate

如果要删除虚拟环境,则使用

pyevn virtualenv-delete first_project
上一篇下一篇

猜你喜欢

热点阅读