python中使用比较多的包

现如今全世界每个制造行业内Python的应用情况如何呢?

这个问题是我写本文的初心。我找到了22个最常见的Python包,期待能让你一些启迪。

最先我列举了近期一年内PyPI上注册量最大的Python包。大家讨论一下这种包的功效,他们的中间的关联,及其怎么会这般时兴。

1.Urllib3

8.93亿个免费下载

Urllib3是Python的HTTP手机客户端,它出示了很多Python标准库沒有的作用。

线程安全

数据库连接池

手机客户端SSL/TLS认证

应用multipart编号开展上传文件

用以重新传输恳求并解决HTTP跳转的功能

适用gzip和deflate编号

适用HTTP和SOCKS代理商

虽然姓名称为Urllib3,但它并并不是Python内置的urllib2的后续版本号。假如你要尽量应用Python的关键作用(例如因为一些限定造成 不可以安裝),那麼能够 看一下urllib.request。

针对终端用户,我极力推荐requests包(参照目录中的第六项)。Urllib3往往排名第一是由于基本上1200个程序包都依靠它,很多这种程序包也都会目录中遥遥领先。

2. Six

7.32亿个免费下载

Six是Python2和Python3兼容模式专用工具。此项目地目地是让编码可以另外在Python2和 Python3上运作。

它出示了很多涵数,遮盖了Python2和 Python3中间的英语的语法差别。最非常容易了解的事例便是six.print_()。在Python3中,輸出时必须应用print()涵数,而Python2中是应用没有括弧的print。因而,应用six.print_()能够 另外适用二种語言。重中之重:

包的姓名six来自于2x3=6

相近的库也有future

假如想将代码转换成Python3(另外已不适用Python2),能够 看一下2to3

虽然我了解该包这般时兴,但還是期待大家尽早抛下Python2,非常是以今年一月一日起官方网早已已不适用Python2了。

3.botocore,boto3,s3transfer,awscli

这好多个新项目放到一起说:

botocore:第三名,6.六亿次免费下载

s3transfer:第7名,5.84亿个免费下载

awscli:第17名,3.94亿个免费下载

boto3:第二十二名,3.29亿个免费下载

Botocore是AWS的最底层插口。botocore是boto3(第二十二名)库的基本,后面一种能够 给你浏览亚马逊的S3、EC2等服务项目。

Botocore也是AWS-CLI的基本,后面一种是AWS的命令行界面。

s3transfer(第七名)是用以管理方法S3传送的Python库。该库仍在开发设计中,它的首页仍然不建议应用,或是应用时最少要固定不动版本号,由于即便在小版本信息中间它的API也将会会产生变化。boto3、AWS-CLI和很多别的新项目都取决于s3transfer。

AWS有关的库的排行这般高,正表明了AWS的服务项目是多么的时兴。

4.Pip

6.27亿次免费下载

我想很多人 都了解而且钟爱pip(Python的包安裝专用工具)。应用pip从PythonPackageIndex和别的库房(如当地镜像系统或包括独享手机软件的自定库房等)安裝程序包不费吹灰之力。

有关pip的有趣的事:

Pip的姓名是个递归界定:PipInstallsPackages

Pip很容易应用。安裝一个程序包只必须实行pipinstall。删掉只必须实行pipuninstall。

Pip较大 的益处便是它能够 安裝一系列包,一般 会放到requirements.txt文件中。该文件还能够特定每一个包的详尽版本信息。绝大部分Python新项目都是包括这一文档。

与virtualenv(第57名)融合应用pip,能够 建立可预测分析的、单独的自然环境,而不容易与系统软件自身的自然环境相互之间危害。

5.python-dateutil

6.17亿个免费下载

Python-dateutil控制模块为规范的datetime控制模块出示了强劲的作用拓展。一般的Pythondatetime没法保证的事儿都能够应用python-dateutil进行。用这一库能够 进行很多十分酷的作用。我只举一个十分有效的事例:从日志文件中模糊不清分析时间字符串数组:

from dateutil.parser import parselogline = 'INFO 2020-01-01T00:00:01 Happy new year, human.'timestamp = parse(log_line, fuzzy=True)print(timestamp)# 2020-01-01 00:00:01

6.requests

6.11亿个免费下载

Requests根据注册量第一的库urllib3。拥有它,推送恳求越来越极为简易。很多人 对requests的钟爱超出了urllib3,因而requets的终端用户将会比urllib3也要多。后面一种更最底层,一般 做为别的新项目的依靠出現。

下边的事例演试了requests有多么的非常容易应用:

import requestsr = requests.get('https://api.github.com/user', auth=('user', 'pass'))r.status_code# 200r.headers['content-type']# 'application/json; charset=utf8'r.encoding# 'utf-8'r.text# u'{"type":"User"...'r.json()# {u'disk_usage': 368627, u'private_gists': 484, ...}

7.s3transfer

第三、7、17和22名相互之间关系,因此请参照第三名的详细介绍。

8.Certifi

5.52亿个免费下载

近些年,基本上所有网页都刚开始应用SSL,这一点能够 从地址栏中的锁标志看出去,该标志的意思是网址是安全性的、数据加密的,能够 防止监听。

数据加密根据SSL证书,SSL证书由可靠的企业或非营利性组织承担审签,如LetsEncrypt。这种机构会对运用他们的资格证书对审签的资格证书开展电子签名。

运用这种资格证书的公布一部分,电脑浏览器就可以认证网址的签字,进而证实你浏览的是真实的网址,并且他人沒有在监听数据信息。

Python还可以保证一样的作用,这就必须采用certifi。它和Chrome、Firefox和Edge等Web电脑浏览器中包括的根证书结合没什么差别。

Certifi是一个根证书结合,那样Python编码就可以认证SSL证书的真实度。

很多新项目都信任并依靠certifi,能够 这里见到这种新项目。这也是为什么该新项目排行这般高的缘故。

 

9.Idna

5.27亿次免费下载

依据PyPI的网页页面,idna出示“针对RFC5891中界定的IDNA协议书(InternationalisedDomainNamesinApplications)的适用”。

大家讨论一下idna代表什么意思:

IDNA是解决包括非ASCII标识符的网站域名的标准。但初始的网站域名并不是早已适用非ASCII标识符了没有?那麼难题在哪?

难题是很多程序运行(如Email手机客户端和Web电脑浏览器等)并不兼容非ASCII标识符。或是更具体地说,Email和HTTP协议书并不兼容这种标识符。

在很多國家这并并不是难题,但像中国、俄罗斯、德国、印尼等國家就很不方便。因而,这种國家的一些聪明的人协同起來明确提出了IDNA,也并不是彻底不经意。

IDNA的关键是2个涵数:ToASCII和ToUnicode。ToASCCI会将现代化的Unicode网站域名转化成ASCII字符串数组,而ToUnicode会做反过来的解决。在IDNA包中,这两个涵数称为idna.encode()和idna.decode(),参照下边的事例:

import idnaidna.encode('ドメイン.テスト')# b'xn--eckwd4c7c.xn--zckzah'print(idna.decode('xn--eckwd4c7c.xn--zckzah'))# ドメイン.テスト

该编号的详尽內容能够 参照RFC3490。

10.PyYAML

5.25亿个免费下载

YAML是一种数据信息实例化文件格式。它的设计方案总体目标是另外便捷人们和设备阅读文章——人们非常容易了解,电子计算机分析也不会太难。

PyYAML是Python的YAM在线解析和伺服电机,换句话说它能够 读写能力YAML文件格式。它能够 将一切Python目标编号为YAML:目录,词典,乃至类案例都能够。

Python出示了自身的配置管理器,但YAML出示的作用远超于Python内置的ConfigParser(只有应用最基础的.ini文件)。

比如,YAML能储存一切基本数据类型:boolean,list,float等。ConfigParse的內部一切都储存为字符串数组。假如你可以用ConfigParser来载入资格证书,就必须指出你需要的是整数金额:

config.getint(“section”, “my_int”)

而pyyaml可以自动检索种类,因而只需那样就能得到int:

config[“section”][“my_int”]

YAML还容许随意深层的嵌套循环,虽然并不是每一个新项目都必须,但十分便捷。

你能自行决定应用哪一个,但很多新项目都应用YAML做为环境变量,因而此项目地时兴度十分高。

11.pyasn1

5.12亿个免费下载

像IDNA一样,这一新项目的叙述的数据量也十分大: 

ASN.1种类和DER/BER/CER编号(X.208)的纯Python完成。

幸运的是,大家仍然能寻找这一几十年的历程的规范的很多材料。ASN.1是AbstractSyntaxNotationOne(抽象性英语的语法记法一)的简称,是数据信息实例化的开山鼻祖。它来自于通讯业。或许你了解protocolbuffer或是ApacheThrift吧?ASN.1更是他们的1984年版本号。

ASN.1叙述了一种不一样系统软件中间的混合开发的插口,能够 根据该插口传送数据构造。

你是否还记得第八名的certifi吗?ASN.1用以界定HTTPS协议书及其很多别的系统加密中应用的资格证书的文件格式。ASN.1还普遍用以SNMP、LDAP、Kerberos、UMTS、LTE和VOIP等协议书中。

它是个比较复杂的规范,大家早已发觉一些完成充满了易损性。你能看一下Reddit上的这一有关ASN.1的探讨(https://www.reddit.com/r/programming/comments/1hf7ds/useful_old_technologies_asn1/)。

除非是真实必需,不然我建议不必应用它。但因为很多地区都会应用该协议书,因而很多包都取决于它。

12.docutils

5.08亿个免费下载

Docutils是一个模块化设计系统软件,用以将纯文本文档转化成别的文件格式,如HTML、XML和LaTeX等。docutils能够 载入reStructuredText文件格式(一种类似MarkDown的非常容易阅读文章的文件格式)的纯文本文档。

我想你一定据说过PEP文本文档,乃至将会阅读文章过。PEP文档是什么?

PEP的意思是PythonEnhancedProposal(Python提高提议)。PEP是一篇设计文档,用以给Python小区出示信息内容,或是为Python(或其CPU、自然环境)叙述一个新特点。PEP应当出示特点的精准的标准规范,并得出该特点的原因。

PEP文本文档便是应用固定不动的reStructuredText模版,随后根据docutils转化成好看的文本文档。

Sphinx的关键也应用了docutils。Sphinx用以建立文本文档新项目。假如说docutils是一台设备,那麼Sphinx便是一个加工厂。它的最开始设计方案目地是搭建Python自身的文本文档,但很多别的新项目也运用Sphinx来建立文本文档。

你一定渡过readthedocs.org上的文本文档吧?那边的文本文档全是应用Sphinx和docutils建立的。

13.Chardet

5.01亿免费下载

你能应用chardet控制模块来查验文档或数据流分析的字符集。在剖析很多任意的文字时这一作用十分有效。但还可以用于分辨远程下载的数据信息的字符串数组。

在安装chardet后,就可以应用命令行工具chardetect,操作方法以下:

chardetect somefile.txtsomefile.txt: ascii with confidence 1.0

还可以在程序流程中应用该库,参照文本文档(https://chardet.readthedocs.io/en/latest/usage.html)。

Requests和很多别的包都取决于chardet。我估算不容易很多人立即应用chardet,因此它的时兴度肯定是来自于这种依靠。

14.RSA

4.92亿个免费下载

Rsa是RSA的纯Python完成。它适用以下作用:

数据加密和破译

签字和签字认证

依据PKCS#1version1.5转化成密匙

它能够 做为Python库应用,还可以在命令上应用。

RSA名字中的三个字母来自于三个人的姓:RonRivest,AdiShamir,和LeonardAdleman。她们于一九七七年创造发明了该优化算法。

RSA是最开始出現的一批公匙系统加密,普遍用以安全性传输数据。这类系统加密包含2个密匙:一个是公匙,一个是公钥。应用公匙数据加密数据信息,随后该数据信息只有用公钥开展破译。

RSA算法比较慢。一般 并不应用RSA算法立即数据加密客户数据信息,只是用它来数据加密对称加密系统软件div隐藏

下边编码演试了RSA的操作方法:

import rsa# Bob creates a key pair:(bob_pub, bob_priv) = rsa.newkeys(512)# Alice ecnrypts a message for Bob# with his public keycrypto = rsa.encrypt('hello Bob!', bob_pub)# When Bob gets the message, he# decrypts it with his private key:message = rsa.decrypt(crypto, bob_priv)print(message.decode('utf8'))# hello Bob!

假定Bob有着公钥private,Alice就能相信只能Bob才可以阅读文章该信息内容。

但Bob并不可以相信Alice是信息内容的发送者,由于所有人都能够得到Bob的公匙。以便证实发送者确实是Alice,她能够 应用自身的公钥对信息内容开展签字。Bob能够 应用Alice的公匙对签字开展认证,来保证发送者确实是Alice。

很多别的包都取决于rsa,如google-auth(第37名),oauthlib(第54名),awscli(第17名)。这一包并不会常常被立即应用,由于有很多更快、更原生态的方式。

15.Jmespath

4.73亿个免费下载

在Python中应用JSON非常容易,由于JSON能够 极致地投射到Python的词典上。我觉得它是最好是的特点之一。

说真话我几乎真不知道jmepath这一包,虽然我应用过许多JSON。我能应用json.loads()随后手动式从词典中获取数据,也许还得写好多个循环系统。

JMESPath,读作“Jamespath”,能更非常容易地在Python中应用JSON。你能用申明的方法界定如何从JSON文本文档中获取数据。下边是一些最基础的事例: 

import jmespath# Get a specific elementd = {"foo": {"bar": "baz"}}print(jmespath.search('foo.bar', d))# baz# Using a wildcard to get all namesd = {"foo": {"bar": [{"name": "one"}, {"name": "two"}]}}print(jmespath.search('foo.bar[*].name', d))# [“one”, “two”]

这只是是它的冰山一角。大量使用方法参照它的文本文档和PyPI首页。

16.Setuptools

4.01亿个免费下载

Setuptools是用于建立Python包的专用工具。

这一新项目的文本文档很不尽人意。文本文档并沒有叙述它的作用,还包括死链。真实的好文本文档这里:https://packaging.python.org/,及其本文中有关如何建立Python包的实例教程:https://packaging.python.org/tutorials/packaging-projects/。

17.awscli

第三、7、17和22名相互之间关系,因此请参照第三名的详细介绍。

18.pytz

3.94亿个免费下载

类似第五名的dateutils,该库能够 协助你实际操作日期和时间。解决时区时间很不便。幸运的是,这一包能够 让时区时间解决越来越非常容易。

关于时间,我的工作经验是:在內部始终应用UTC,只能在必须造成供人阅读文章的輸出时才转换成本地時间。

下边是pytz的事例:

from datetime import datetimefrom pytz import timezoneamsterdam = timezone('Europe/Amsterdam')ams_time = amsterdam.localize(datetime(2002, 10, 27, 6, 0, 0))print(ams_time)# 2002-10-27 06:00:00+01:00# It will also know when it's Summer Time# in Amsterdam (similar to Daylight Savings Time):ams_time = amsterdam.localize(datetime(2002, 6, 27, 6, 0, 0))print(ams_time)# 2002-06-27 06:00:00+02:00

大量文本文档和事例能够 参照PyPI网页页面。

19.Futures

3.89亿个免费下载

从Python3.2开始,python刚开始出示concurrent.futures控制模块,能够 帮你实行多线程实际操作。futures包是该库的反方向移殖,因此它是用以Python2的。当今的Python3版本号不用该包,由于Python3本身就出示了该作用。

前边我讲过,从今年一月一日起官方网早已终止适用Python2。希望2020年再做这一目录的情况下,已不见到这一包排排前22名。

下边是futures包的基础使用方法:

from concurrent.futures import ThreadPoolExecutorfrom time import sleepdef return_after_5_secs(message):  sleep(5)  return messagepool = ThreadPoolExecutor(3)future = pool.submit(return_after_5_secs,                      ("Hello world"))print(future.done())# Falsesleep(5)print(future.done())# Trueprint(future.result())# Hello World

由此可见,我们可以建立一个线程池,随后递交一个涵数,让某一进程实行。另外,你的程序流程会再次在主线任务程上运作。它是完成并行执行的一种非常容易的方法。

20.Colorama

3.50亿次免费下载

你能应用Colorama在终端设备上加上色调:

下边的实例演试了完成这一作用有多么的非常容易:

from colorama import Fore, Back, Styleprint(Fore.RED + 'some red text')print(Back.GREEN + 'and with a green background')print(Style.DIM + 'and in dim text')print(Style.RESET_ALL)print('back to normal now')

21.Simplejson

3.41亿个免费下载

Python内置的json控制模块有哪些难题造成 了这一包有这般高的排行?沒有一切难题!事实上,Python的json

但 simplejson 有一些优点:

  • 能在更多 Python 版本上运行

  • 更新频率高于 Python

  • 一部分代码是用C编写的,运行得非常快

有时候你会看到脚本中这样写:

try:
  import simplejson as json
except ImportError:
  import json

 

不过,除非确实需要一些标准库中没有的功能,我依然会使用 json。SImplejson 可能比 json快很多,因为它的一部分是用C实现的。但是除非你要处理几千个 JSON 文件,否则这点速度提升并不明显。此外还可以看看 UltraJSON,这是个几乎完全用C编写的包,应该速度更快。

22. boto3

第3、7、17和22名互相关联,所以请参见第3名的介绍。

结束语

只写22个包很难,因为后面的许多包都是终端用户更倾向使用的包。

写这篇文章给了我一些启示:

  • 许多排名靠前的包提供一些核心的功能,如处理时间、配置文件、加密和标准化等。它们通常是其他项目的依赖。

  • 最常见的使用场景就是连接。许多包提供的功能就是连接到服务器,或者支持其他包连接服务器。

  • 其他包是对 Python 的扩展,比如用于创建 Python 包的工具,创建文档的工具,创建版本兼容性的工具,等等。

posted @ 2020-05-21 20:02  程绩  阅读(572)  评论(0编辑  收藏  举报