22 个最常用的 Python 包

栏目: IT技术 · 发布时间: 4年前

内容简介:公众号回复作者 | Erik-Jan van Baaren

code小生  一个专注大前端领域的技术平台

公众号回复 Android 加入安卓技术群

作者 | Erik-Jan van Baaren

策划 | 万佳

出处 | 架构头条

全球各地的 程序员 都是怎样使用 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,其中许多包在这个列表中的排名也很高。

https://libraries.io/pypi/urllib3/dependents

2

Six

下载次数:7.32 亿

six 是一个是 Python 2 和 3 的兼容性库。这个项目旨在支持可同时运行在 Python 2 和 3 上的代码库。

six.print_()
print()
print
six.print_()

一些事实:

  • 它的名字叫 six ,是因为二乘以三等于六。

  • 同类库还可以看看 future 包。

  • 如果你要将代码转换为 Python3(并停止支持 2),请查看 2to3。

虽然我理解它为什么这么受欢迎,但我希望人们能完全放弃 Python 2,因为要知道从 2020 年 1 月 1 日起 Python 2 的官方支持就已停止。

PyPI 页面

https://pypi.org/project/six/

文档

https://six.readthedocs.io/

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
Boto3
AWS-CLI
s3transfer

令人惊讶的是,这些针对 AWS 库的排名竟如此之高——这充分说明了 AWS 有多厉害。

4

Pip

下载次数:6.27 亿

22 个最常用的 Python 包

我想,你们大多数人都知道并且很喜欢 pip,它是 Python 的包安装器。你可以用 pip 轻松地从 Python 包索引和其他索引(例如本地镜像或带有私有软件的自定义索引)来安装软件包。

有关 pip 的一些有趣事实:

  • pip 是“Pip Installs Packages”的首字母递归缩写。

  • pip 很容易使用。要安装一个包只需 pip install <package name> 即可,而删除包只需 pip uninstall <package name> 即可。

  • 最大优点之一是它可以获取包列表,通常以 requirements.txt 文件的形式获取。该文件能选择包含所需版本的详细规范。大多数 Python 项目都包含这样的文件。

  • 如果结合使用 pipvirtualenv (列表中的 #57),就可以创建可预测的隔离环境,同时不会干扰底层系统,反之亦然。要了解更多细节,请查看这篇文章:

https://medium.com/better-programming/stop-installing-python-packages-globally-use-virtual-environments-a31dee9fb2de

5

Python-dateutil

下载次数:6.17 亿

python-dateutil
datetime
Python datetime
python-dateutil

你可以用这个库做很多很棒的事情。其中,我发现的一个特别有用的功能就是:模糊解析日志文件中的日期,例如:

from dateutil.parser import parse
 
logline = '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
urllib3
urllib3

下面这个例子说明 requests 用起来有多简单:

import requests
 
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code
# 200
r.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, ...}

PyPI 页面

https://pypi.org/project/requests

文档

https://2.python-requests.org/en/master/

7

S3transfer

这里把 #3、#7、#17 和 #22 放在一起介绍,因为它们的关系非常密切。

8

Certifi

下载次数:5.52 亿

近年来,几乎所有网站都转向 SSL,你可以通过地址栏中的小锁符号来识别它。加了小锁意味着与该站点的通信是安全和加密的,能防止窃听行为。

22 个最常用的 Python 包

小锁告诉我们此网站已使用 SSL 保护

加密过程是基于 SSL 证书的,并且这些 SSL 证书由受信任的公司或非营利组织(如 LetsEncrypt)创建。这些组织使用他们的(中间)证书对这些证书进行数字签名。

你的浏览器使用这些证书的公开可用部分来验证这些签名,这样就能确保你正查看的是真实内容,并且没有人能窥探到通信数据。Python 软件也能做同样事情。这就是 certifi 的用途所在。它与 Chrome、Firefox 和 Edge 等网络浏览器随附的根证书集合没有太大区别。

Certifi 是根证书的一个精选集合,有了它,你的 Python 代码就能验证 SSL 证书的可信度。

如此处所示,许多项目信任并依赖 certifi。这也是该项目排名如此之高的原因所在。

https://libraries.io/pypi/certifi/dependents

certifi PyPI 页面

https://pypi.org/project/certifi/

文档

https://certifiio.readthedocs.io/en/latest/

9

Idna

下载次数:5.27 亿

根据其 PyPI 页面, idna 提供了“对 RFC5891 中指定的应用程序中国际化域名(IDNA)协议的支持。”

可能你像我一样也是一头雾水,不知道 Idna 是什么,有什么用!据悉,应用程序中的国际化域名(IDNA)是一种用来处理包含非 ASCII 字符的域名机制。但是,原始域名系统已经提供对基于非 ASCII 字符的域名支持。所以,哪有问题?

22 个最常用的 Python 包

问题在于应用程序(例如电子邮件客户端和 Web 浏览器)不支持非 ASCII 字符。更具体地说,电子邮件和 HTTP 用的协议不支持这些字符。对许多国家来说,这没什么问题,但是像中国、俄罗斯、德国、希腊和印度尼西亚等国家,这是个问题。最后,来自这些地方的一群聪明人想到 IDNA。

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

如果你是受虐狂,则可以阅读 RFC-3490 了解这一编码的详细信息。

PyPI 页面

https://pypi.org/project/idna/

GitHub 页面

https://github.com/kjd/idna

10

PyYAML

下载次数:5.25 亿

YAML 是一种数据序列化格式。它的设计宗旨是让人类和计算机都能很容易地阅读代码——人类很容易读写它的内容,计算机也可以解析它。

22 个最常用的 Python 包

PyYAML
YAML
YAML
YAML

Python 提供了自己的配置解析器,但是与 Python 的 ConfigParser 的基本 .ini 文件结构相比,YAML 提供更多功能。

https://docs.python.org/3/library/configparser.html

YAML
ConfigParser
ConfigParser
int

<span>config.getint(“section”, “my_int”)</span>

pyyaml
PyYAML
int

<span>config[“section”][“my_int”]</span>

YAML 还允许任意的 deep trees,虽然不是每个项目都需要这种东西,但是需要时,它就可以派上用场。你可能有自己的偏好,但是许多项目都使用 YAML 作为配置文件,所以这个项目是很受欢迎的。

PyPI 页面

https://pypi.org/project/PyYAML/

文档

https://pyyaml.org/

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 协议中。

这是一个非常复杂的规范,并且某些实现已被证明满是漏洞。你可能还会喜欢关于 ASN.1 的这个有趣的 Reddit 帖子。

https://www.reddit.com/r/programming/comments/1hf7ds/useful_old_technologies_asn1/

一个建议,除非你真的需要,否则还是敬而远之吧。但由于它用在很多地方,因此许多包都依赖这个包。

12

Docutils

下载次数:5.08 亿

Docutils
Docutils
reStructuredText

你可能听说过,甚至读过 PEP 文档。

https://www.python.org/dev/peps/pep-0012/

那么什么是 PEP 文档?最早的 PEP 文档,PEP-1 为我们提供很好的解释:

PEP 的意思是 Python 增强提案。一个 PEP 就是一个设计文档,用来向 Python 社区提供信息,或描述 Python 或其过程或环境的新功能。PEP 应该提供该功能的简明技术规范以及功能的原理。

PEP 文档使用固定的 reStructuredText 模板编写,并使用 docutils 转换为格式正确的文档。

Sphinx
Sphinx
Docutils
Sphinx
Sphinx
docutils

13

Chardet

下载次数:5.01 亿

你可以用 chardet 模块来检测文件或数据流的字符集。比如说,需要分析大量随机文本时,这会很有用。但你也可以在处理远程下载的数据,但不知道用的是什么字符集时使用它。

安装 chardet 后,你还有一个名为 chardetect 的命令行工具,用法如下:

<span>chardetect somefile.txt</span>

<span>somefile.txt: ascii with confidence 1.0</span>

Chardet
requests
chardet

https://chardet.readthedocs.io/en/latest/usage.html

14

RSA

下载次数:4.92 亿

rsa 包是一个纯 Python 的 RSA 实现。它支持:

  • 加密和解密

  • 签名和验证签名

  • 根据 PKCS#1 1.5 版生成密钥

它既可以用作 Python 库,也能在命令行中使用。

一些事实:

  • RSA 是 RonRivest、Adi Shamir 和 Leonard Adleman 三人姓的首字母。他们在 1977 年发明该算法。

  • RSA 是最早的公钥密码系统之一,被广泛用于安全数据传输。在这样的密码系统中,有两个密钥:公共部分和私有部分。你用公钥加密数据,只能用私钥解密数据。

  • RSA 是一种 slow algorithm。它很少用于直接加密用户数据。通常,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 key
crypto = 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 不能确定是 Alice 发送了该消息,因为任何人都可以获取并使用他的公钥。为证明是她,Alice 可以用她的私钥在邮件上签名。Bob 可以用她的公钥验证此签名,确保消息的确是她发送的。

google-auth
oauthlib
awscli
rsa

15

Jmespath

下载次数:4.73 亿

在 Python 中用 JSON 非常容易,因为它在 Python 字典上的映射非常好。对我来说,这是它最好的特性之一。

22 个最常用的 Python 包

实话实说——尽管我已经用 JSON 做过很多工作,但我从未听说过这个包。我只是用 json.loads() 并从字典中手动获取数据,也许再搞个循环什么的。

JMESPath ,发音为“James path”,使 Python 中的 JSON 更容易使用。它允许你声明性地指定如何从 JSON 文档中提取元素。以下是一些基本示例:

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

PyPI 页面

https://pypi.org/project/jmespath/

文档

http://jmespath.org/

16

Setuptools

下载次数:4.01 亿

它是用于创建 Python 包的工具。不过,其文档很糟糕。它没有清晰描述它的用途,并且文档中包含无效链接。最好的信息源是这个站点,特别是这个创建 Python 包的指南。

https://packaging.python.org/

https://packaging.python.org/tutorials/packaging-projects/

17

Awscli

这里把 #3、#7、#17 和 #22 放在一起介绍,因为它们的关系非常密切。

18

Pytz

下载次数:3.94 亿次

dateutils (#5)一样,这个库可帮助你处理日期和时间。有时候,时区处理起来可能很麻烦。幸好有这样的包,可以让事情变得简单些。

我自己关于计算机上处理时间的经验总结来说是:始终在内部使用 UTC。仅当生成供人类读取的输出时,才转换为本地时间。

这是 pytz 用法的示例:

from datetime import datetime
from pytz import timezone
 
amsterdam = 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

19

Futures

下载次数:3.89 亿

从 Python 3.2 开始,python 提供 current.futures 模块,可帮助你实现异步执行。futures 包是该库适用于 Python 2 的 backport。它不适用于 Python3 用户,因为 Python 3 原生提供了该模块。

正如我之前提到的,从 2020 年 1 月 1 日起,Python 2 的官方支持停止。希望我明年重新再来看的时候,这个包不会再出现在前 22 名中吧。

下面是 futures 的基本示例:

from concurrent.futures import ThreadPoolExecutor
from time import sleep
 
def return_after_5_secs(message):
  sleep(5)
  return message
 
pool = ThreadPoolExecutor(3)
 
future = pool.submit(return_after_5_secs,
                     ("Hello world"))
 
print(future.done())
# False
sleep(5)
print(future.done())
# True
print(future.result())
# Hello World

如你所见,你可以创建一个线程池并提交一个要由这些线程之一执行的函数。同时,你的程序将继续在主线程中运行。这是并行执行程序的简便方法。

20

Colorama

下载次数:3.7 亿

使用 Colorama,你可以为终端添加一些颜色:

https://pypi.org/project/colorama/

22 个最常用的 Python 包

这样做起来非常容易,具体请查看以下示例代码:

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
json
simplejson
simplejson
  • 它适用于更多的 Python 版本。

  • 它比 Python 更新的频率更频繁。

  • 它有用 C 编写的(可选)部分,因此速度非常快。

你经常会在支持 JSON 的脚本中看到以下内容:

try:
  import simplejson as json
except ImportError:
  import json
json
Simplejson
json

22

Boto3

这里把 #3、#7、#17 和 #22 放在一起介绍,因为它们的关系非常密切。

23

小结

仅仅介绍这 22 个包恐怕不够,因为排在后面的许多包都是像我们这样最终用户感兴趣的。

通过制作这份列表,我了解到一些新东西:

  1. 许多排名靠前的 package(包)都提供某种核心功能,例如处理时间、配置文件、加密和标准化等。它们往往是其他项目的依赖项。

  2. 一个常见的主题是连接性。这些包大多允许你连接到服务器和服务,或支持其他包这样做。

  3. 剩下的那些是对 Python 的扩展。创建 Python 包的工具、帮助创建文档的 工具 、创建版本之间兼容性的库等。

延展阅读:

https://medium.com/better-programming/the-22-most-used-python-packages-in-the-world-7020a904b2e

22 个最常用的 Python 包

如果你有写博客的好习惯

欢迎投稿

点个在看,小生感恩 :heart:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Impractical Python Projects

Impractical Python Projects

Lee Vaughan / No Starch Press / 2018-11 / USD 29.95

Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具