收藏学习!15个使用率超高的Python库

2023-11-08

在这里插入图片描述

今天给大家分享最近一年内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 是 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

  • 如果想将代码转换成 Python3(同时不再支持 Python2),可以看看 2to3

尽管我理解该包如此流行,但还是希望人们尽快抛弃 Python2,特别是从2020年1月1日起官方已经不再支持 Python2了。

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. Pip:6.27亿次下载

我猜许多人都知道并且喜爱 pip(Python的包安装工具)。使用 pip 从 Python Package Index和其他仓库(如本地镜像或包含私有软件的自定义仓库等)安装软件包不费吹灰之力。

关于 pip 的趣事:

  • Pip 的名字是个递归定义:Pip Installs Packages

  • Pip 非常容易使用。安装一个软件包只需要执行 pip install <软件包名>。删除只需要执行 pip uninstall <软件包名>。

  • Pip 最大的好处就是它可以安装一系列包,通常会放在 requirements.txt 文件中。该文件还可以指定每个包的详细版本号。绝大多数 Python 项目都会包含这个文件。

  • 与 virtualenv(第57名)结合使用 pip,可以创建可预测的、独立的环境,而不会与系统本身的环境互相影响。

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。有了它,发送请求变得极其简单。许多人对 requests 的喜爱超过了 urllib3,因此 requets 的最终用户可能比 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, ...}

7. s3transfer

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

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协议(Internationalised Domain Names in Applications)的支持”。

我们来看看 idna 是什么意思:

IDNA 是处理包含非 ASCII 字符的域名的规则。但原始的域名不是已经支持非 ASCII 字符了吗?那么问题何在?

问题是许多应用程序(如Email客户端和Web浏览器等)并不支持非 ASCII 字符。或者更具体地说,Email 和 HTTP 协议并不支持这些字符。

在许多国家这并不是问题,但像中国、俄罗斯、德国、印尼等国家就很不方便。因此,这些国家的一些聪明人联合起来提出了 IDNA,也并非完全偶然。

IDNA 的核心是两个函数:ToASCII 和 ToUnicode。ToASCCI 会将国际化的 Unicode 域名转换成 ASCII 字符串,而 ToUnicode 会做相反的处理。在 IDNA 包中,这两个函数叫做 idna.encode() 和 idna.decode(),参见下面的例子:

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

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 是 Abstract Syntax Notation One(抽象语法记法一)的缩写,是数据序列化的鼻祖。它来自于通讯行业。也许你知道 protocol buffer 或者 Apache Thrift 吧?

ASN.1正是它们的1984年版本。ASN.1 描述了一种不同系统之间的跨平台的接口,可以通过该接口发送数据结构。

还记得第8名的 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 的意思是 Python Enhanced Proposal(Python增强提案)。PEP 是一篇设计文档,用于给 Pytho n社区提供信息,或者为 Python(或其处理器、环境)描述一个新特性。PEP 应该提供特性的精确的技术标准,并给出该特性的理由。

PEP 文档就是使用固定的 reStructuredText 模板,然后通过 docutils 转换成漂亮的文档。

Sphinx 的核心也使用了 docutils。Sphinx 用于创建文档项目。如果说 docutils 是一台机器,那么 Sphinx 就是一个工厂。它的最初设计目的是构建P ython 本身的文档,但许多其他项目也利用 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#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 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 才能阅读该信息。

但 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,读作“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 主页。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

收藏学习!15个使用率超高的Python库 的相关文章

随机推荐

  • 解决鼠标右键没有文本

    解决鼠标右键没有文本文档 打开注册表 win r 输入 regedit 2 找到 txt 将默认值改为 txtfile 查看shellNew项是否存在 不存在新建 存在则改变 这个字符串值为空 F5刷新一下 或者
  • OLE接口详解

    所有 OLE Api 和接口的目的 本页 摘要 详细信息 常规 初始化和内存管理 远程处理 自定义服务 服务注册 DLL 服务器管理 杂项 COM 函数 命名 名字对象 结构化的存储 永久对象 每个事件的通知 统一数据传输 可查看对象 标准
  • HarmonyOS 自定义页面请求与前端页面调试

    一 自定义页面请求响应 Web 组件支持在应用拦截到页面请求后自定义响应请求能力 开发者通过onInterceptRequest 接口来实现自定义资源请求响应 自定义请求能力可以用于开发者自定义 Web 页面响应 自定义文件资源响应等场景
  • 每日一题:走路

    走路 题目 Daimayuan Online Judge f i j 表示第i步能否走到第j阶 include
  • uniapp打包微信小程序主包过大问题

    问题 在用uniapp打包微信小程序时提示文件超过了2M不让上传 主包中的vendor js太大1 7M有的甚至更大 解决 在HbuildX中运行时勾选上运行压缩 在微信开发者工具中上传时勾选上上传压缩 在manifest json中检查分
  • C语言 .c文件 到 .exe文件过程

    预处理 预处理相当于根据预处理命令组装成新的 C 程序 不过常以 i 为扩展名 编 译 将得到的 i 文件翻译成汇编代码 s 文件 汇 编 将汇编文件翻译成机器指令 并打包成可重定位目标程序的 o 文件 该文件是二进制文件 字节编码是机器指
  • OculusRiftS与Unity.UI的交互(1)-总览

    使用OculusIntegration包 VRTK还没有测试过 OculusIntegration提供的场景 包含了 键盘交互 VR摄像机 画布 凝视位置 光标 等节点 总览 这是默认的OVR UI场景的节点设置 之后 根据自身场景的需要
  • ARouter解析五:IoC与依赖注入

    终于来到了ARouter解析的第五篇了 前面陆陆续续分享了四篇ARouter框架的使用和源码内容 ARouter解析一 基本使用及页面注册源码解析ARouter解析二 页面跳转源码分析ARouter解析三 URL跳转本地页面源码分析ARou
  • 计算几何02_三次样条曲线

    一 样条 样条 Spline 函数是由舍恩伯格于1946年提出的 样条是富有弹性的细木条或有机玻璃条 它的作用相当于 万能 曲线板 早期船舶 汽车 飞机放样时用铅压铁压住样条 使其通过一系列型值点 调整压铁达到设计要求后绘制其曲线 称为样条
  • 计算机视觉:分割一切AI大模型segment-anything

    1 segment anything介绍 Segment Anything Model SAM 来源于Facebook公司Meta AI实验室 据Mata实验室介绍 SAM 已经学会了关于物体的一般概念 并且它可以为任何图像或视频中的任何物
  • 可拖拽分隔面板(vue-splitpane)

    使用 vue splitpane 组件可实现垂直或者水平的面板分隔 1 安装 npm install vue splitpane 2 引入 在需要引入 vue splitpane 的模块文件中进行引入 import splitPane fr
  • python安装程序打不开_使用PIP安装Python包会导致链接:致命错误LNK1104:无法打开文件“python27.lib”...

    我试图让PIP安装Twisted 但我得到了这个链接错误 我使用的是64位Windows8和Python2 7 10 我认为这个问题与visualstudio编译器有关 我有2009年和2010年 但我不确定它用的是哪一个 我已经看过大量关
  • 分布式的环境下, MySQL和Redis如何保持数据的一致性?

    问题 一台MySQL 一台Redis 两台应用服务器 用户的数据存储持久化在MySQL中 缓存在Redis 有请求的时候从Redis中获取缓存的用户数据 有修改则同时修改MySQL和Redis中的数据 现在问题是 1 先保存到MySQL和先
  • 安装python遇到错误_安装python2.7出错怎么解决

    Python是一种跨平台的计算机程序设计语言 是一种面向对象的动态类型语言 最初被设计用于编写自动化脚本 shell 随着版本的不断 更新和语言新功能的添加 越来越多被用于独立的 大型项目的开发 首先登录python官网 选择要下载的安装包
  • ElementUI浅尝辄止23:Loading 加载

    Loading加载组件 加载数据时显示动效 常见于加载数据量大的业务操作 附带动态效果 1 如何使用 区域加载 在表格等容器中加载数据时显示 Element 提供了两种调用 Loading 的方法 指令和服务 对于自定义指令v loadin
  • linux重置root用户密码

    重置root密码 法一 rd break 第 1 步 重启系统编辑内核参数 第 2 步 找到 linux 这行 在此行末尾空格后输入rd break End键也可直接进入行尾 成功后显示页面为 第 3 步 查看 可选 该步骤可省略 命令为
  • 把一个数组的第三到第六位之间的元素删除 形成一个新的数组

    思路一 找到第三和第六之间的4和5位 也就是下标位3和4的元素 删除之后再前移 思路二 找到第三和第六之间的4和5位 也就是下标位3和4的元素 运用if中continue关键字跳过这两个位置 思路一和思路二的区别是思路一元素前移最后两位是0
  • fio测试磁盘性能

    rwmixwrite是fio命令中一个用于指定读写比例的参数 它的含义是在随机读写的情况下 写操作的百分比 例如 rwmixwrite 30表示30 的操作是写操作 70 的操作是读操作 以下是一个示例命令 fio name mytest
  • 帝国cms发送ajax请求,[分享]美化ajax弹出的提示信息

    前台页面只需要在内容模板里面加上这两个文件 然后再修改一下 e data js ajax js var http request false function makeRequest url functionName httpType
  • 收藏学习!15个使用率超高的Python库

    今天给大家分享最近一年内PyPI上下载量最高的Python包 现在我们来看看这些包的作用 他们之间的关系 以及为什么如此流行 1 Urllib3 8 93亿次下载 Urllib3 是 Python 的 HTTP 客户端 它提供了许多 Pyt