
全球各地的Python程序员都在用什么库?
我们从最常用的Python包入手,去解答上述这个问题。最初,我列出过去一年在PyPI上下载次数最多的Python包。接下来,深入研究其用途、它们之间的关系和它们备受欢迎的原因。
1、Urllib3
下载次数:8.93亿
Urllib3是一个Python的HTTP客户端,它拥有Python标准库中缺少的许多功能:
线程安全
连接池
客户端SSL/TLS验证
使用分段编码上传文件
用来重试请求和处理HTTP重定向的助手
支持gzip和deflate编码
HTTP和SOCKS的代理支持
不要被名字所误导,Urllib3并不是urllib2的后继者,而后者是Python核心的一部分。如果你想使用尽可能多的Python核心功能,或者你能安装什么东西是受限,那么请查看urlllib.request。
https://docs.python.org/3/library/urllib.request.html#module-urllib.request
对开发者来说,我强烈建议使用requests包(参阅列表中的#6)。这个包之所以会排名,是因为有差不多1200个包依赖urllib3,其中许多这个列表中的排名也很高。
2、Six
下载次数:7.32亿
six是一个是Python 2和3的兼容性库。这个项目旨在支持可同时运行在Python 2和3上的代码库。
它提供了许多可简化Python 2和3之间语法差异的函数。一个容易理解的例子是six.print_()。在Python 3中,打印是通过print()函数完成的,而在Python 2中,print后面没有括号。因此,有了six.print_()后,你就可以使用一个语句来同时支持两种语言。
一些事实:
它的名字叫six,是因为二乘以三等于六。
同类库还可以看看future包。
如果你要将代码转换为Python3(并停止支持2),请查看2to3。
虽然我理解它为什么这么受欢迎,但我希望人们能完全放弃Python 2,因为要知道从2020年1月1日起Python 2的官方支持就已停止。
3、botocore、boto3、s3transfer、awscli
这里,我把相关的几个项目列在一起:
botocore(#3,6.6亿次下载)
s3transfer(#7,5.84亿次下载)
awscli(#17,3.94亿次下载)
boto3(#22,3.29亿次下载)
Botocore是AWS的底层接口。Botocore是Boto3库(#22)的基础,后者让你可以使用Amazon S3和Amazon EC2一类的服务。Botocore还是AWS-CLI的基础,后者为AWS提供统一的命令行界面。
S3transfer(#7)是用于管理Amazon S3传输的Python库。它正在积极开发中,其介绍页面不推荐人们现在使用,或者至少等版本固定下来再用,因为其API可能发生变化,在次要版本之间都可能更改。Boto3、AWS-CLI和其他许多项目都依赖s3transfer。
令人惊讶的是,这些针对AWS库的排名竟如此之高——这充分说明了AWS有多厉害。
4、Pip
下载次数:6.27亿
我想,你们大多数人都知道并且很喜欢pip,它是Python的包安装器。你可以用pip轻松地从Python包索引和其他索引(例如本地镜像或带有私有软件的自定义索引)来安装软件包。
有关pip的一些有趣事实:
pip是“Pip Installs Packages”的首字母递归缩写。
pip很容易使用。要安装一个包只需pip install<package name>即可,而删除包只需pip uninstall<package name>即可。
优点之一是它可以获取包列表,通常以requirements.txt文件的形式获取。该文件能选择包含所需版本的详细规范。大多数Python项目都包含这样的文件。
5、Python-dateutil
下载次数:6.17亿
python-dateutil模块提供了对标准datetime模块的强大扩展。我的经验是,常规的Python datetime缺少哪些功能,python-dateutil就能补足那一块。
6、Requests
下载次数:6.11亿
Requests建立在我们的#1库——urllib3基础上。它让Web请求变得非常简单。相比urllib3来说,很多人更喜欢这个包。而且使用它的开发者可能也比urllib3更多。后者更偏底层,并且考虑到它对内部的控制级别,它一般是作为其他项目的依赖项。
7、S3transfer
这里把#3、#7、#17和#22放在一起介绍,因为它们的关系非常密切。
8、Certifi
下载次数:5.52亿
近年来,几乎所有网站都转向SSL,你可以通过地址栏中的小锁符号来识别它。加了小锁意味着与该站点的通信是安全和加密的,能防止窃听行为。
9、Idna
下载次数:5.27亿
根据其PyPI页面,idna提供了“对RFC5891中指定的应用程序中国际化域名(IDNA)协议的支持。”
10、PyYAML
下载次数:5.25亿
YAML是一种数据序列化格式。它的设计宗旨是让人类和计算机都能很容易地阅读代码——人类很容易读写它的内容,计算机也可以解析它。
11、Pyasn1
下载次数:5.12亿
像上面的IDNA一样,这个项目也非常有用:
ASN.1类型和DER/BER/CER编码(X.208)的纯Python实现
所幸这个已有数十年历史的标准有很多信息可用。ASN.1是Abstract Syntax Notation One的缩写,它就像是数据序列化的教父。它来自电信行业。也许你知道协议缓冲区或Apache Thrift?这就是它们的1984年版本。
ASN.1描述了系统之间的跨平台接口,以及可以通过该接口发送的数据结构。
还记得Certifi(请参阅#8)吗?ASN.1用于定义HTTPS协议和其他许多加密系统中使用的证书格式。它也用在了SNMP、LDAP、Kerberos、UMTS、LTE和VOIP协议中。
12、Docutils
下载次数:5.08亿
Docutils是一个模块化系统,用来将纯文本文档处理为很多有用的格式,例如HTML、XML和LaTeX等。Docutils能读取reStructuredText格式的纯文本文档,这种格式是类似于MarkDown的易读标记语法。
你可能听说过,甚至读过PEP文档。
13、Chardet
下载次数:5.01亿
你可以用chardet模块来检测文件或数据流的字符集。比如说,需要分析大量随机文本时,这会很有用。但你也可以在处理远程下载的数据,但不知道用的是什么字符集时使用它。
14、RSA
下载次数:4.92亿
rsa包是一个纯Python的RSA实现。它支持:
加密和解密
签名和验证签名
根据PKCS#1 1.5版生成密钥
它既可以用作Python库,也能在命令行中使用。
一些事实:
RSA是RonRivest、Adi Shamir和Leonard Adleman三人姓的首字母。他们在1977年发明该算法。
RSA是最早的公钥密码系统之一,被广泛用于安全数据传输。在这样的密码系统中,有两个密钥:公共部分和私有部分。你用公钥加密数据,只能用私钥解密数据。
RSA是一种slow algorithm。它很少用于直接加密用户数据。通常,RSA用于安全传递对称密钥加密的共享密钥,这样加密和解密大量数据时会快得多。
15、Jmespath
下载次数:4.73亿
在Python中用JSON非常容易,因为它在Python字典上的映射非常好。对我来说,这是它的特性之一。
16、Setuptools
下载次数:4.01亿
它是用于创建Python包的工具。不过,其文档很糟糕。它没有清晰描述它的用途,并且文档中包含无效链接。的信息源是这个站点,特别是这个创建Python包的指南。
17、Awscli
这里把#3、#7、#17和#22放在一起介绍,因为它们的关系非常密切。
18、Pytz
下载次数:3.94亿次
像dateutils(#5)一样,这个库可帮助你处理日期和时间。有时候,时区处理起来可能很麻烦。幸好有这样的包,可以让事情变得简单些。
我自己关于计算机上处理时间的经验总结来说是:始终在内部使用UTC。仅当生成供人类读取的输出时,才转换为本地时间。
19、Futures
下载次数:3.89亿
从Python 3.2开始,python提供current.futures模块,可帮助你实现异步执行。futures包是该库适用于Python 2的backport。它不适用于Python3用户,因为Python 3原生提供了该模块。
正如我之前提到的,从2020年1月1日起,Python 2的官方支持停止。希望我明年重新再来看的时候,这个包不会再出现在前22名中吧。
20、Colorama
下载次数:3.7亿
使用Colorama,你可以为终端添加一些颜色。
这样做起来非常容易,具体请查看以下示例代码:
from colorama import Fore,Back,Style
print(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亿
原生的json模块有什么问题,才需要这种高级替代方案呢?并没有!实际上,Python的json就是simplejson。但是simplejson也有一些优点:
它适用于更多的Python版本。
它比Python更新的频率更频繁。
它有用C编写的(可选)部分,因此速度非常快。
22、Boto3
这里把#3、#7、#17和#22放在一起介绍,因为它们的关系非常密切。