python必备的几个包,python常用包有哪些
我们尽快提供高质量的文章!
作者| 埃里克·扬·范巴伦
企划| 曼卡
来源| 架构头条
世界各地的程序员如何使用Python?
为了回答上面的问题,我们先从最常用的Python包开始。首先,我们列出了过去一年PyPI 上下载次数最多的Python 包。接下来,我们将仔细研究它们的用途、它们之间的关系以及它们受欢迎的原因。
1 网址库3
下载量:8.93亿次
Urllib3 是一个Python 的HTTP 客户端,具有许多Python 标准库中没有的功能。
线程安全连接池客户端SSL/TLS 身份验证使用分段编码进行文件上传请求重试和HTTP 重定向帮助程序支持gzip 和deflate 编码支持HTTP 和SOCKS 代理不要让名字欺骗您。 urllib3 是urllib2 后继者的后代,后者是Python 核心的一部分。如果您想使用尽可能多的Python 核心功能,或者您可以安装的功能受到限制,请查看urllib.request。
https://docs.python.org/3/library/urllib.request.html#module-urllib.request
对于最终用户,我们强烈建议使用requests 包(请参阅列表中的#6)。该软件包排名第一,因为有近1200 个软件包依赖于urllib3,其中许多软件包在此列表中排名也很高。
https://libraries.io/pypi/urllib3/dependents
2 六
下载量:7.32亿次
六是Python 2和3兼容库。该项目旨在支持在Python 2 和3 上运行的代码库。
提供了许多函数来简化Python 2 和3 之间的语法差异。一个简单的例子是Six.print_。在Python 3中,打印是通过print函数进行的,但在Python 2中,print后面没有括号。因此, Six.print_ 允许您在一条语句中支持两种语言。
一些事实:
之所以称为6,是因为2 3 等于6。您还可以检查未来的软件包中是否有类似的库。如果您想将代码转换为Python3(并放弃对2 的支持),请查看2to3。我理解为什么Python 2 很受欢迎,但我希望人们完全放弃Python 2,因为知道对Python 2 的官方支持已于2020 年1 月1 日结束。
PyPI 页面
https://pypi.org/project/6/
文档
https://six.readthedocs.io/
3 botocore、boto3、s3transfer、awscli
这里我们将一些相关的项目一起列出来。
botocore(第三名,6.6 亿次下载)
s3transfer(第七名,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 点
下载量:6.27亿次
大多数人都知道并喜欢pip,Python 的软件包安装程序。 pip 可以轻松地从Python 包索引或其他索引安装包,例如本地镜像或来自您自己的软件的自定义索引。
关于点的有趣事实:
pip 是“Pip Installs Packages”的递归缩写。点子很容易使用。要安装软件包,只需pip install ,要删除它,只需pip uninstall 。最大的优点之一是您通常可以获取requirements.txt 文件形式的包列表。该文件可以选择包含所需版本的详细规范。大多数Python 项目都包含这样的文件。 pip 可以与virtualenv(列表中的#57)结合使用来创建可预测的隔离环境,而不会影响底层系统。相反的情况也是可能的。有关更多信息,请参阅以下文章:https://medium.com/better-programming/stop-installing-python-packages-globally-use-virtual-environments-a31dee9fb2de
5 Python-dateutil
下载量:6.17亿次
python-dateutil 模块为标准日期时间模块提供了强大的扩展。根据我的经验,python-dateutil 可以弥补传统Python datetime 所缺乏的所有功能。
您可以使用这个库做很多很酷的事情。我发现特别有用的一项功能是日志文件中日期的模糊解析。例如:
from dateutil.parser import parselogline='INFO 2020-01-01T00:00:01 新年快乐,人类。 'timestamp=parse(log_line, fuzzy=True)print(timestamp)# 2020-01-01 00:00:016 请求
下载量:6.11亿次
Requests 构建在#1 库——urllib3 之上。这使得网络请求变得更加容易。许多人更喜欢这个包而不是urllib3。而且使用它的最终用户可能比urllib3 更多。后者的级别较低,考虑到其内部的控制级别,通常用作其他项目的依赖项。
以下示例展示了如何使用简单的请求。
import requestr=request.get('https://api.github.com/user', auth=('user', 'pass'))r.status_code# 200r.headers['content-type']# 'application/json; 字符集=utf8'r.encoding#'utf-8'r.text#u'{\'类型\':\'用户\'.'r.json#{u'disk_usage': 368627, u 'private_gists' : 484,}PyPI 页面
https://pypi.org/project/request
文档
https://2.python-requests.org/en/master/
7 S3转发
#3、#7、#17、#22 关系非常密切,所以在这里介绍一下。
8 证书
下载量:5.52亿次
近年来,几乎所有网站都迁移到了SSL。您可以通过地址栏中的小挂锁符号来识别SSL。添加小锁可确保与站点的通信安全且加密,防止窃听。
小索称该网站采用SSL 保护
加密过程基于SSL 证书,这些SSL 证书是由值得信赖的公司或非盈利组织(例如LetsEncrypt)创建的。这些组织使用(中间)证书对这些证书进行数字签名。
浏览器使用这些证书的公共部分来验证签名,确保您所查看的内容是真实的,并且没有人可以拦截您的通信。您可以使用Python 软件执行相同的操作。这就是certfi 的用途。这与Chrome、Firefox 和Edge 等网络浏览器附带的根证书集合没有太大区别。
Certifi 是根证书的精选集合,可让您在Python 代码中验证SSL 证书的真实性。
许多项目信任并依赖于certifi,如此处所示。这就是为什么这个程序排名如此之高。
https://libraries.io/pypi/certifi/dependents
证书PyPI 页面
https://pypi.org/project/certifi/
文档
https://certifiio.readthedocs.io/en/最新/
9 伊杜纳
下载量:5.27亿次
根据PyPI 页面,idna 提供“对RFC5891 中指定的应用程序中的国际化域名(IDNA) 协议的支持”。
也许您和我一样困惑,不知道Idna 是什么以及它的作用。据报道,应用程序的国际化域名(IDNA) 是一种用于处理包含非ASCII 字符的域名的机制。但原来的域名系统已经支持基于非ASCII字符的域名。所以有什么问题?
问题在于应用程序(电子邮件客户端、Web 浏览器等)不支持非ASCII 字符。具体来说,电子邮件和HTTP 使用的协议不支持这些字符。对于许多国家来说,这不是问题,但对于中国、俄罗斯、德国、希腊和印度尼西亚等国家来说,却是问题。最后,来自这些地区的一群聪明人想出了IDNA。
IDNA 的核心是两个函数:ToASCII 和ToUnicode。 ToASCII 将国际Unicode 字段转换为ASCII 字符串。 ToUnicode 反转了这个过程。在IDNA 包中,这些函数称为idna.encode 和idna.decode,如以下代码片段所示。
import idnaidna.encode('domain.test')# b'xn--eckwd4c7c.xn--zckzah'print(idna.decode('xn--eckwd4c7c.xn--zckzah'))# domain.test 受虐狂请参阅RFC-3490 有关此编码的详细信息。
PyPI 页面
https://pypi.org/project/idna/
GitHub 页面
https://github.com/kjd/idna
10PYAML
下载量:5.25亿次
YAML 是一种数据序列化格式。该代码被设计为易于人类和计算机阅读;—— 人类可以轻松读写其内容,计算机也可以解析它。
PyYAML 是一个用于Python 的YAML 解析器和发射器,可以读取和写入YAML。将任何Python 对象编写为YAML,包括列表、字典,甚至类实例。
尽管Python 提供了自己的配置解析器,但YAML 提供了比Python ConfigParser 的基本.ini 文件结构更多的功能。
https://docs.python.org/3/library/configparser.html
例如,YAML 可以存储任何数据类型,包括布尔值、列表和浮点数。 ConfigParser 将所有内容存储为内部字符串。如果要使用ConfigParser 加载整数,则必须显式指定要获取int。
config.getint("section", "my_int") 这使用PyYAML 返回一个int,因为pyyaml 自动识别类型。
config["section"]["my_int"] YAML 还允许任意深度的树。并非每个项目都需要这种东西,但是当您这样做时它很有用。尽管您可能有偏好,但这是常态,因为许多项目都使用YAML 作为其配置文件。
PyPI 页面
https://pypi.org/project/PyYAML/
文档
https://pyyaml.org/
11 皮亚森1
下载量:5.12亿次
与上面的IDNA类似,这个项目也非常有用。
ASN.1 类型和DER/BER/CER 编码(X.208) 的纯Python 实现
幸运的是,关于这个已有数十年历史的标准有很多信息。 ASN.1 代表抽象语法表示法一,就像数据序列化的教父一样。它来自电信行业。您听说过protocol buffers 或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份文件
下载量:5.08亿次
Docutils 是一个模块化系统,用于将纯文本文档处理成许多有用的格式,包括HTML、XML 和LaTeX。 Docutils 可以读取reStructuredText 格式的纯文本文档,这是一种类似于MarkDown 的易于阅读的标记语法。
您可能听说过或读过PEP 文件。
https://www.python.org/dev/peps/pep-0012/
那么什么是PEP文档呢?最古老的PEP文档PEP-1提供了一个简单的解释:
PEP 代表Python 增强提案。 PEP 是一个设计文档,用于通知Python 社区或描述Python 或其流程或环境的新功能。 PEP 应提供该功能的简明技术规范以及该功能的基本原理。
PEP 文档是使用固定的reStructuredText 模板创建的,并使用docutils 转换为格式正确的文档。
Docutils 也是Sphinx 的核心。 Sphinx 用于创建文档项目。如果Docutils 是机器,那么Sphinx 就是工厂。它最初是为了构建Python 文档而创建的,但许多其他项目使用它来为其代码提供文档。您可能已阅读readthedocs.org 上的文档。大多数文档是使用Sphinx 和docutils 创建的。
13 夏代
下载量:5.01亿次
您可以使用chardet 模块来检测文件或数据流的字符集。例如,如果您需要分析大量随机文本,这非常有用。然而,它也可以在处理远程下载的数据时使用,尽管尚不清楚使用哪种字符集。
安装chardet 后,还可以使用一个名为chardetect 的命令行工具,您可以按如下方式使用它:
charDetect somefile.txtsomefile.txt: ascii withconfidence 1.0 该库也可以通过编程方式使用。请参阅文档了解更多详细信息。许多包(例如requests)都需要Chardet。我认为没有多少人单独使用chardet,因此这种依赖性可能就是它如此受欢迎的原因。
https://chardet.readthedocs.io/en/latest/usage.html
14RSA
下载量:4.92亿次
rsa 包是RSA 的纯Python 实现。支持:
根据PKCS#1 版本1.5 加密和解密签名、验证签名并生成密钥。它既可以作为Python 库使用,也可以通过命令行使用。
一些事实:
RSA 是Ron Rivest、Adi Shamir 和Leonard Adleman 的名字缩写。他们于1977 年发明了这个算法。 RSA是最早的公钥密码系统之一,广泛用于安全数据传输。这样的密码系统有两个密钥:公共部分和秘密部分。数据使用您的公钥加密,并且只能使用您的私钥解密。 RSA 是一种缓慢的算法。它很少用于直接加密用户数据。 RSA 通常用于安全地传送对称密钥加密的共享密钥,从而更快地加密和解密大量数据。以下代码片段展示了如何在一个非常简单的用例中使用RSA。
import rsa# Bob 创建密钥对:(bob_pub, bob_priv)=rsa.newkeys(512)# Alice 使用公钥加密发送给Bob 的消息crypto=rsa.encrypt('hello Bob !', bob_pub)# 一旦Bob 收到消息,他# 用他的私钥解密:message=rsa.decrypt(crypto, bob_priv)print(message.decode('utf8'))# hello Bob! Bob 假设他对私钥保密,Alice 可以确定他有私钥。唯一可以阅读您的消息的人。然而,Bob 不确定Alice 是否发送了该消息。这是因为鲍勃的公钥可供任何人获取和使用。为了证明是她本人,Alice 可以使用她的私钥对电子邮件进行签名。 Bob 可以使用她的公钥验证此签名,并验证该消息确实是由她发送的。
google-auth (#37)、oauthlib (#54) 和awscli (#17) 等软件包都依赖于rsa 软件包。很少有人单独使用这个工具,因为有更快的本地替代品。
15 詹姆斯·帕斯
下载量:4.73亿次
在Python 中使用JSON 非常简单,因为它可以很好地映射到Python 字典。对我来说,这是它最好的功能之一。
老实说,—— 我已经用JSON 做了很多工作,但我从未听说过这个包。只需使用json.loads 手动从字典中检索数据并执行循环或其他操作即可。
JMESPath(发音为“James path”)使得在Python 中使用JSON 变得很容易。您可以以声明方式指定如何从JSON 文档中提取元素。以下是一些基本示例。
import jmespath# 获取特定元素={\'foo\': {\'bar\': \'baz\'}}print(jmespath.search('foo.bar', d))# baz# 通配符获取全部名称use={\'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 设置工具
下载量:4.01亿次
用于创建Python 包的工具。然而,它的文档很糟糕。其目的没有明确解释,并且文档包含死链接。最好的信息来源是这个网站,尤其是关于创建Python 包的指南。
https://包装.python.org/
https://packaging.python.org/tutorials/packaging-projects/
17 奥什库利
#3、#7、#17、#22 关系非常密切,所以在这里介绍一下。
18 派兹
下载量:3.94亿次
与dateutils (#5) 类似,该库可帮助您处理日期和时间。在某些情况下,处理时区可能很棘手。幸运的是,有这样的软件包可以让工作变得更容易。
总结一下我自己在计算机上使用时间的经验,那就是它们总是在内部使用UTC。仅在生成供人类阅读的输出时才转换为当地时间。
这是使用pytz 的示例。
from datetime import datetimefrom pytz import timezoneamsterdam=timezone('欧洲/阿姆斯特丹')ams_time=amsterdam.localize(datetime(2002, 10, 27, 6, 0, 0))print(ams_time)# 2002-10-27 06:00:00+01:00 # 还可以看到阿姆斯特丹的夏令时(与夏令时相同):ams_time=amsterdam.localize(datetime(2002, 6, 27, 6, 0, 0))print(ams_time)# 2002-06-27 06:00:00+02:0019期货
下载量:3.89亿次
从Python 3.2开始,Python提供了current.futures模块来帮助实现异步执行。 futures 包是该库针对Python 2 的向后移植。 Python 3 原生提供了这个模块,因此Python3 用户无法使用它。
如前所述,对Python 2 的官方支持将于2020 年1 月1 日结束。希望明年再看的时候这款包不要再出现在前22名里了。
以下是期货的基本示例。
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 彩色马
下载量:3.7亿次
Colorama 可让您为设备添加颜色。
https://pypi.org/project/colorama/
运行起来非常容易。请参阅以下代码示例。
from colorama import Fore, Back, Styleprint(Fore.RED + '红色文本')print(Back.GREEN + '和绿色背景')print(Style.DIM + '和暗淡文本')print(Style.RESET_ALL)print ( '恢复正常')21 Simplejson
下载量:3.41亿次
保证这种高级替代方案的本机json 模块有什么问题?完全没有!其实Python的json是simplejson。不过,simplejson还具有以下优点:
适用于更多Python 版本。更新比Python 更频繁。它有一个用C 编写的(可选)部分,因此速度非常快。以下内容常见于启用JSON 的脚本中:
try: import simplejson as jsonExcept ImportError: import json 使用json 除非你需要标准库中没有的东西。 Simplejson 比json 快得多,因为它的某些部分是用C 实现的。除非您要处理数千个JSON 文件,否则这是一个优势。
说不是什么大事。还可以看看 UltraJSON,它应该更快一些,因为它几乎所有的代码都是用 C 编写的。 22 Boto3 这里把 #3、#7、#17 和 #22 放在一起介绍,因为它们的关系非常密切。 23 小结 仅仅介绍这 22 个包恐怕不够,因为排在后面的许多包都是像我们这样最终用户感兴趣的。 通过制作这份列表,我了解到一些新东西: 许多排名靠前的 package(包)都提供某种核心功能,例如处理时间、配置文件、加密和标准化等。它们往往是其他项目的依赖项。一个常见的主题是连接性。这些包大多允许你连接到服务器和服务,或支持其他包这样做。剩下的那些是对 Python 的扩展。创建 Python 包的工具、帮助创建文档的工具、创建版本之间兼容性的库等。延展阅读: https://medium.com/better-programming/the-22-most-used-python-packages-in-the-world-7020a904b2e 回复下方「关键词」,获取优质资源回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版回复关键词「m」,立即获取Python精选优质文章合集回复关键词「」,将数字替换成 0 及以上数字,有惊喜好礼哦~题图:pexels,CC0 授权。好文章,我在看❤️阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭[多图],阴阳师4月22日更新的内容有哪些?版本更新
2024-04-06四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址[多图],2021四川电视台经济频
2024-04-06湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口[多图],湖北电视台生活频道
2024-04-06