什么是Python Wheels?为什么要关心它?,python有什么用

前言

Python .whl文件(或wheels)是Python中很少讨论的一部分,但是它们对Python包的安装过程非常重要。如果您已经使用pip安装了Python包,那么很有可能是轮子(wheels)使安装速度更快、效率更高了。

轮子是Python生态系统的一个组件,它有助于使包的安装工作正常进行。它们允许更快的安装和更稳定的包分发过程。在本教程中,您将深入了解轮子是什么,它们提供了什么好处,以及它们是如何获得吸引力并使使用Python变得更方便的。

轮子简介

在学习如何将项目打包到轮子中之前,从用户的角度了解使用轮子是什么样子是很有帮助的。

可以像往常一样在环境中安装一个Python包来开始这个实验。在这种情况下,安装uWSGI 2.0.x版本:

$ python -m pip install 'uwsgi==2.0.*'

2 Collecting uwsgi==2.0.*

3   Downloading uwsgi-2.0.18.tar.gz (801 kB)

4      |████████████████████████████████| 801 kB 1.1 MB/s

5 Building wheels for collected packages: uwsgi

6   Building wheel for uwsgi (setup.py) ... done

7   Created wheel for uwsgi ... uWSGI-2.0.18-cp38-cp38-macosx_10_15_x86_64.whl

8   Stored in directory: /private/var/folders/jc/8_hqsz0x1tdbp05 ...

9 Successfully built uwsgi

10 Installing collected packages: uwsgi

11 Successfully installed uwsgi-2.0.18

要完全安装uWSGI, pip需要经过几个不同的步骤:

在第3行,它下载一个名为uwsgi-2.0.18.tar.gz的TAR文件(tarball),该文件是用gzip压缩的。

在第6行,它接受tarball并通过调用setup.py构建一个.whl文件。

在第7行,它将轮子标记为uWSGI-2.0.18-cp38-cp38-macosx_10_15_x86_64.whl。

在第10行,它在构建了轮子之后安装实际的包。

pip检索的tar.gz tarball是一个源分发包,或sdist,而不是一个轮子。在某些方面,sdist是轮子的反义词。

源代码发行版包含源代码。这不仅包括Python代码,还包括与包绑定的任何扩展模块的源代码(通常用C或c++编写)。对于源发行版,扩展模块是在用户端而不是开发人员端编译的。

源分发版还包含一个元数据包,位于名为.egg-info的目录中。该元数据有助于构建和安装包,但用户实际上并不需要使用它做任何事情。

从开发人员的角度来看,当您运行以下命令时,会创建一个源分发包:

$ python setup.py sdist

现在尝试安装一个不同的包:chardet:

$ python -m pip install 'chardet==3.*'

2 Collecting chardet

3   Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)

4      |████████████████████████████████| 133 kB 1.5 MB/s

5 Installing collected packages: chardet

6 Successfully installed chardet-3.0.4

您可以看到一个与uWSGI安装明显不同的输出。

安装chardet时直接从PyPI下载一个.whl文件。车轮名称为chardet-3.0.4-py2.py3-none-any。whl遵循特定的命名约定,稍后您将看到。从用户的角度来看,更重要的是,当pip在PyPI上找到一个兼容的滚轮时,并不存在构建阶段。

从开发人员的角度来看,轮子是运行以下命令的结果:

$ python setup.py bdist_wheel

为什么uWSGI给你一个源分布,而chardet提供一个轮子?您可以通过查看PyPI上每个项目的页面并导航到下载文件区域来了解原因。本节将向您展示pip在PyPI索引服务器上实际看到的内容:

由于项目的复杂性,uWSGI只提供了一个源分发版(uWSGI -2.0.18.tar.gz)。

chardet同时提供了一个轮盘和一个源代码发行版,但是如果与您的系统兼容,pip会更喜欢轮盘。稍后您将看到如何确定兼容性。

另一个用于轮子安装的兼容性检查示例是psycopg2,它为Windows提供了大量的车轮,但没有为Linux或macOS客户端提供任何轮子。这意味着,根据您的具体设置,pip安装psycopg2可以获取一个滚轮或源分发版。

为了避免这些类型的兼容性问题,一些包提供了多个轮子,每个轮子都针对特定的Python实现和底层操作系统。

到目前为止,您已经看到了轮子和sdist之间的一些明显区别,但更重要的是这些区别对安装过程的影响。

轮子加速安装

在上面,您看到了获取预构建轮子的安装和下载sdist的安装的比较。轮子使得Python包的端到端安装速度更快,原因有两个:

在其他条件相同的情况下,轮子通常比源分发包更小,这意味着它们可以在网络中更快地移动。

直接从wheels安装避免了从源分发版构建包的中间步骤。

几乎可以保证,安装chardet只需uWSGI所需时间的一小部分。然而,这是一种不公平的比较,因为chardet是一个明显更小和更简单的包。使用不同的命令,您可以创建一个更直接的比较,它将演示轮子造成的差异有多大。

你可以通过-no-binary选项让pip忽略它对车轮的倾斜:

$ time python -m pip install \

--no-cache-dir \

--force-reinstall \

--no-binary=:all: \

cryptography

这个命令计算加密包的安装时间,告诉pip使用源分发包,即使有合适的轮可用。包括:all:使规则适用于密码学及其所有依赖关系。

在我的机器上,从开始到结束大约需要32秒。不仅安装要花费很长时间,而且构建加密还需要提供OpenSSL开发头,并可用于Python。

现在可以重新安装密码学,但是这次要确保pip使用来自PyPI的wheels。因为pip更喜欢轮子,所以这类似于完全不带参数调用pip install。但在这种情况下,你可以让意图显式通过要求车轮-纯二进制:

此选项仅花费4秒多一点的时间,即仅为密码学及其依赖项使用源分发版时所用时间的八分之一。

安装python有什么用_什么是Python Wheels?为什么要关心它?,python有什么用相关推荐

  1. python 只循环目录_看完这篇文章,你的Python基础就差不多了

    世界那么大,谢谢你来看我!!关注我你就是个网络.电脑.手机小达人 前言 本文是基于黑马程序员2019年的Python基础班的内容编写的,以2019年的资料为蓝本,2018年的资料为补充,还参考了一些网 ...

  2. python测网络连通性_网络工程师如何在ensp模拟器上玩python自动化配置交换机。...

    前面几期我们分享过利用Telnetlib.Netmiko模块来实现登录交换机修改配置,本期我们再介绍一个模块,叫Paramiko模块,这回我不打算用真机的,改用ensp模拟器试试看,这样大家也可以在没 ...

  3. 小学生python编程写游戏_教你如何像玩游戏一样学Python

    原标题:教你如何像玩游戏一样学Python 在编程世界,关于哪个语言是最好的争论从未停止,虽然道理谁也不服谁,但是关于编程的热度,我们可以从TIOBE 编程语言排行榜中得到结果. ▲用Python进行 ...

  4. python回测函数_【手把手教你】动量指标的Python量化回测

    我认为投资专业的学生只需要两门教授得当的课堂:如何评估一家公司,以及如何考虑市场价格.--巴菲特 01 引言 本文延续"手把手教你使用Python的TA-Lib"系列,以资金流量指 ...

  5. python做数学计算器_从零开始学习PYTHON3讲义(二)把Python当做计算器

    <从零开始PYTHON3>第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3.Windows则从开始菜单中去寻找ID ...

  6. python高中教材版本_浙江省新高中信息技术教材,将围绕Python进行并增加编程相关知识点...

    2017年初消息: 浙江省信息技术新教材,即将在2017级(2017年9月入学)高中新生中开始使用. 据了解,与目前的选考(可以理解为高考科目)要求的信息技术教材由3本<信息技术基础>.& ...

  7. 零基础python入门书籍推荐书目_铁粉看过来!送书啦,Python推荐书单,送书10本!...

    原标题:铁粉看过来!送书啦,Python推荐书单,送书10本! 上个月送书福利不断,一波接一波,今天小编带来了一份非常不错的Python书单,非常感谢博文视点的大力支持,这次的书涉及Python入门, ...

  8. python怎么搜索文献_学习帖|大神是如何用Python高效解决文献搜索和数据处理!?...

    #研究生期间,你被逼得有多绝望? ◆ 写论文 一起床一睁眼:今天一定要写完这一部分 一支烟一杯茶:一个introduction写一天 一躺下一闭眼:今天都写了些什么玩意 ◆ 面对老板 交稿前脑补各种挨 ...

  9. python风控建模项目_像潘叔叔那样用半年时间学Python,有哪些书值得看?

    去年11月,SOHO中国董事长潘石屹先生发微博宣布,要开始学习Python,"这也是今天给自己人生的礼物".于是圈子里便有了"百亿身家中年男子告别房地产转行学Python ...

  10. java和python自学教程视频_免费视频教程,2019年最新Java、PYthon、web视频

    干货视频,培训机构最新java.Python.web前端.人工智能视频(基础班+就业班).价值几万的Java.PYthon.web.人工智能视频教程, 为还在学习迷茫的你提供一个学习Java.Pyth ...

最新文章

  1. 如何完全卸载VMware
  2. jvm的架构模型:基于栈式的架构和基于寄存器架构的特点
  3. 电路 第五版 第三章电阻电路的一般分析
  4. 新手程序员如何找一个靠谱的公司
  5. 考会计中级职称能用计算机,2019年中级会计职称计算机考试操作常见问题答疑...
  6. 用 C# 做人脸检测(基于EmguCV)
  7. weUI多页面切换效果
  8. android 定时唤醒蓝牙,Android保活——蓝牙唤醒(主动kill掉也可唤醒)
  9. Python学习笔记——python基础 2. 高级变量类型(列表、元祖、字典)
  10. hello guass
  11. 九度1538:GrassLand密码
  12. 软件产品选型测试/POC测试
  13. 如何下载最新电影高清资源?
  14. Win10下用Anaconda安装TensorFlow
  15. oracle按照in的顺序进行排序
  16. 我有酒,你有故事吗?
  17. Float的取值范围
  18. 【100%通过率】华为OD机试真题 Python 实现【核酸最快检测效率】【2022.11 Q4 新题】
  19. The 10 Best Neighborhoods in Seattle
  20. 百度统计网站流量出现“代码未生效”的应对情况

热门文章

  1. 6、(二进制类型)BIT、BINARY、VARBINARY、BLOB
  2. Python爬虫学习获取腾讯新闻并存入Csv文件
  3. 实验:交换机生成树协议STP--功能验证
  4. 面试官:Maven 的这 7 个问题你思考过没有?
  5. 程序员必备:Java 日期处理的十个坑
  6. 十分钟了解 git 那些 “不常用” 命令
  7. 蓝桥杯第六届决赛真题大全解(java版本)
  8. HTML自学教程--一天搞定HTML(总结)
  9. 面试官问我有环链表中怎么找到入口,本以为很简单当场却想傻了
  10. DNS 截持模拟及环境搭建