Python内置小工具

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

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

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

python -m SimpleHTTPServer 

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

python -m http.server 

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

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

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

字符串转换为JSON

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

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

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

[root@oracle ~]# echo '{"job": "developer", "name": "lmx", "sex": "male"}' | python -m json.tool  
{
   "job": "developer",
   "name": "lmx",
   "sex": "male"
}

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

[root@oracle ~]# 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导入即可。如果导入没有任何错误,则认为安装成功;如果导入失败,则认为安装失败。

[root@oracle ~]# 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语句,如下所示:

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

pip高级用法

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

pip介绍

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

python3安装pip

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

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

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

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

方法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 requests

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

给pip3重命名

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

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

pip3常用命令

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

加速pip安装的技巧

如果大家使用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文件,然后在文件中保存如下内容:

[root@localhost ~]# mkdir .pip
[root@localhost ~]# cd .pip
[root@localhost .pip]# touch pip.conf
[root@localhost .pip]# vim pip.conf
[global]  
index-url = https://pypi.douban.com/simple/
[root@localhost .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

Python生态工具的更多相关文章

  1. Python生态工具、文本处理和系统管理(虚拟)

    一.Python生态工具 一.Python内置小工具 1.秒级启动一个下载服务器 Python 内置了一个下载服务器就能够显著提升效率了 . 例如, 你的同事要让你传的文件位于某一个目录下,那么,你可 ...

  2. 第2章:Python生态工具

    1.Python内置小工具 1).1秒钟启动一个下载服务器: python -m SimpleHTTPServer python3 -m http.server 会在当前目录下启动一个文件下载服务器, ...

  3. Python生态环境简介[转]

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  4. (转)python生态环境简介

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  5. Python 开发工具链全解

    可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码.在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意.有些人在 ...

  6. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  7. Python开发工具PyCharm个性化设置(图解)

    Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...

  8. 下破解安装Python开发工具WingIDE4.1

    步骤: 1.将系统时间调整到一个月之前,然后执行安装. 可以使用date命令调整系统时间,如:date -s '2012-08-14 10:00:00' 2.安装成功后,打开程序,按照提示信息,申请一 ...

  9. Python小工具--删除svn文件

    有的时候我们需要删除项目下的svn相关文件,但是SVN会在所有的目录下都创建隐藏文件.svn,手工一个个目录查找然后删除显然比较麻烦.所以这里提供了一个Python小工具用于批量删除svn的相关文件: ...

  10. arcgis通过 Python 使用工具 获得结果信息

    通过 Python 使用工具 ArcGIS 10 每个地理处理工具都具有一组固定的参数,这些参数为工具提供执行所需的信息.工具通常具有定义一个或多个数据集的输入参数,这些数据集一般用于生成新的输出数据 ...

随机推荐

  1. 2.9 系统IO

    iostream: 输入流 cin; c 指代 character 输出流 cout, cerr(立即刷新缓冲区), clog(缓冲区满后刷新) 命名空间 访问方式 namespace NameSpa ...

  2. 安装fearch

    sudo add-apt-repository ppa:christian-boxdoerfer/fsearch-daily sudo apt-get update sudo apt-get inst ...

  3. idea2023最新激活方式

    激活文件下载https://wwtg.lanzouo.com/iAZ1W0kwkgpe 激活教程https://www.666bear.com/244.html

  4. python爬虫--房产数据爬取并保存本地

    import requestsimport csvfrom bs4 import BeautifulSoupheaders={'user-agent':'Mozilla/5.0 (Windows NT ...

  5. Java-面向对象基础 构造方法

    public class Dog {// 定义属性 String nick; String color; int age; // 定义构造方法 public Dog(String nick,Strin ...

  6. YYYY-MM-dd

    Calendar calendar = Calendar.getInstance();  calendar.set(2019, Calendar.DECEMBER, 31); Date strDate ...

  7. JAVASCRIPT 对有符号整型、无符号整型、浮点型、十六进制、二进制的数据处理

    1.十六进制字符串转有符号整型,支持S8.S16.S32: function hexToInt(hex) { if(hex.length % 2 != 0) { hex = "0" ...

  8. django:django同步数据库的时候app models表没有成功创建

    解决方式: python3 manage.py makemigrations --empty managerbook  # managerbook就是你的app名字,此处要写成自己的app名字 pyt ...

  9. docker从C盘迁移到D盘

    docker镜像在C盘占据大量的空间,将.docker从C:\Users\Administrator迁移到E:\.docker. 一.关闭virtual Box 使virtual Box处于关闭.停止 ...

  10. jquery 页面追加换行等等操作备份

    var str= "a<br/>b<br/>c<br/>"; var Newstr = str.replace("<br/> ...