学习 Python,这 22 个包怎能不掌握?


作者 | Erik-Jan van Baaren译者 | 弯月,责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)以下为译文:如今全球各个行业内 Python 的使用状况怎么样呢?这个问题就是我写这篇文章的初衷。
我找出了22个最常用的 Python 包,希望能给你一些启发。
首先我列出了最近一年内 PyPI 上下载量最高的 Python 包。
我们来看看这些包的作用,它们的之间的关系,以及为什么会如此流行。
1. Urllib38.93亿次下载Urllib3 是 Python 的 HTTP 客户端,它提供了许多 Python 标准库没有的功能。
线程安全连接池客户端 SSL/TLS 验证使用 multipart 编码进行文件上传用于重传请求并处理 HTTP 重定向的辅助功能支持 gzip 和 deflate 编码支持 HTTP 和 SOCKS 代理尽管名字叫做 Urllib3,但它并不是 Python 自带的 urllib2 的后继版本。
如果你想尽可能使用 Python 的核心功能(比如由于某些限制导致不能安装),那么可以看看 urllib.request。
对于最终用户,我强烈推荐 requests 包(参考列表中的第六项)。
Urllib3 之所以排名第一是因为几乎 1200 个软件包都依赖它,许多这些软件包也都在列表中名列前茅。
2. Six7.32亿次下载Six 是 Python 2 和 Python 3 兼容性工具。
该项目的目的是让代码能够同时在 Python 2 和 Python 3 上运行。
它提供了许多函数,掩盖了 Python 2 和 Python 3 之间的语法差异。
最容易理解的例子就是six.print_。
在 Python 3 中,输出时需要使用 print 函数,而 Python 2 中是使用不带括号的 print。
因此,使用 six.print_ 可以同时支持两种语言。
重点:包的名字 six 来自于2 x 3 = 6类似的库还有 future如果想将代码转换成 Python 3(同时不再支持 Python 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名)库的基础,后者可以让你访问亚马逊的S3、EC2等服务。
Botocore 也是 AWS-CLI 的基础,后者是 AWS 的命令行界面。
s3transfer(第七名)是用于管理S3传输的 Python 库。
该库仍在开发中,它的主页依然不建议使用,或者使用时至少要固定版本,因为即使在小版本号之间它的API也可能会发生变化。
boto3、AWS-CLI 和许多其他项目都依赖于 s3transfer。
AWS 相关的库的排名如此高,正说明了 AWS 的服务是多么流行。
4. pip6.27亿次下载我猜许多人都知道并且喜爱 pip(Python的包安装工具)。
使用 pip 从 Python Package Index和其他仓库(如本地镜像或包含私有软件的自定义仓库等)安装软件包不费吹灰之力。
关于 pip 的趣事:Pip 的名字是个递归定义:Pip Installs PackagesPip 非常容易使用。
安装一个软件包只需要执行 pip install <软件包名>。
删除只需要执行 pip uninstall <软件包名>。
Pip 最大的好处就是它可以安装一系列包,通常会放在 requirements.txt 文件中。
该文件还可以指定每个包的详细版本号。
绝大多数 Python 项目都会包含这个文件。
与 virtualenv(第57名)结合使用 pip,可以创建可预测的、独立的环境,而不会与系统本身的环境互相影响。
5. python-dateutil6.17亿次下载Python-dateutil 模块为标准的 datetime 模块提供了强大的功能扩展。
普通的 Python datetime 无法做到的事情都可以使用 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:016. requests6.11亿次下载Requests 基于下载量第一的库 urllib3。
有了它,发送请求变得极其简单。
许多人对 requests 的喜爱超过了 urllib3,因此 requets 的最终用户可能比 urllib3 还要多。
后者更底层,通常作为其他项目的依赖出现。
下面的例子演示了 requests 有多么容易使用:import requestsr = requests.get(‘)。
Requests 和许多其他包都依赖于 chardet。
我估计不会有太多人直接使用 chardet,所以它的流行度肯定是来自于这些依赖。
14. RSA4.92亿次下载Rsa是 RSA 的纯 Python 实现。
它支持如下功能:加密和解密签名和签名验证根据 PKCS#1 version 1.5生成秘钥它可以作为 Python 库使用,也可以在命令行上使用。
RSA 名称中的三个字母来自于三个人的姓:Ron Rivest,Adi Shamir,和Leonard Adleman。
他们于1977年发明了该算法。
RSA 是最早出现的一批公钥加密系统,广泛用于安全数据传输。
这种加密系统包括两个秘钥:一个是公钥,一个是私钥。
使用公钥加密数据,然后该数据只能用私钥进行解密。
RSA 算法很慢。
通常并不使用 RSA 算法直接加密用户数据,而是用它来加密对称加密系统中使用的共享秘钥,因为对称加密系统速度很快,适合用来加密大量数据。
下面 代码演示了 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. Jmespath4.73亿次下载在 Python 中使用 JSON 很容易,因为 JSON 可以完美地映射到 Python 的字典上。
我认为这是最好的特性之一。
说实话我从来没听说过 jmepath 这个包,尽管我使用过很多 JSON。
我会使用 json.loads 然后手动从字典中读取数据,或许还得写几个循环。
JMESPath,读作“James path”,能更容易地在 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. Setuptools4.01亿次下载Setuptools 是用来创建 Python 包的工具。
这个项目的文档很糟糕。
文档并没有描述它的功能,还包含死链接。
真正的好文档在这里:https://packaging.python.org/,以及这篇文章中关于怎样创建 Python 包的教程:https://packaging.python.org/tutorials/packaging-projects/。
17. awscli第3、7、17和22名互相关联,所以请参见第3名的介绍。
18. pytz3.94亿次下载类似于第5名的 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. Futures3.89亿次下载从 Python 3.2 开始,python 开始提供 concurrent.futures 模块,可以帮你执行异步操作。
futures 包是该库的反向移植,所以它是用于 Python 2 的。
当前的 Python 3 版本不需要该包,因为 Python 3 本身就提供了该功能。
前面我说过,从2020年1月1日起官方已经停止支持 Python 2。
我希望明年再做这个列表的时候,不再看到这个包排进前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. Colorama3.70亿次下载你可以使用 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. Simplejson3.41亿次下载Python 自带的 json 模块有什么问题导致了这个包有如此高的排名?没有任何问题!实际上, Python 的 json 就是 simplejson。
但 simplejson 有一些优点:能在更多 Python 版本上运行更新频率高于 Python一部分代码是用C编写的,运行得非常快有时候你会看到脚本中这样写:try:import simplejson as jsonexcept ImportError:import json不过,除非确实需要一些标准库中没有的功能,我依然会使用 json。
SImplejson 可能比 json快很多,因为它的一部分是用C实现的。
但是除非你要处理几千个 JSON 文件,否则这点速度提升并不明显。
此外还可以看看 UltraJSON,这是个几乎完全用C编写的包,应该速度更快。
22. boto3第3、7、17和22名互相关联,所以请参见第3名的介绍。
结束语只写22个包很难,因为后面的许多包都是终端用户更倾向使用的包。
写这篇文章给了我一些启示:许多排名靠前的包提供一些核心的功能,如处理时间、配置文件、加密和标准化等。
它们通常是其他项目的依赖。
最常见的使用场景就是连接。
许多包提供的功能就是连接到服务器,或者支持其他包连接服务器。
其他包是对 Python 的扩展,比如用于创建 Python 包的工具,创建文档的工具,创建版本兼容性的工具,等等。
我希望你喜欢这个列表,并能够从中有所收获!原文:https://medium.com/better-programming/the-22-most-used-python-packages-in-the-world-7020a904b2e本文为 CSDN 翻译,转载请注明

未经允许不得转载:选主机测评网 » 学习 Python,这 22 个包怎能不掌握?