首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么你需要升级 pip?

更新软件版本可以修复bug,增加新功能和提升性能。例如,NumPy 1.20 添加了类型注释,并在可能的情况下通过使用SIMD来提高性能。如果您要安装NumPy,则可能要安装最新版本。

相反,如果您使用的是旧版本的pip,则安装最新版本的Python软件包可能会失败,或者以较慢,更复杂的方式进行安装。

为什么?这是关于glibc版本控制以及pip如何安装软件包的一系列问题。

让我们看看问题到底是什么,如何解决,最后是什么原因造成的。

旧版本pip的问题

让我们从Ubuntu 18.04 Docker镜像开始着手。该版本的Ubuntu在2018年4月发布,安装有Python 3.6和pip 9 版本。

目前为止,事情进展顺利。

失败原因#1:从源代码编译

接下来,让我们安装加密程序包,它是PyPI上下载次数最多的Python程序包之一,每月有数百万次下载(通常是间接依赖)。

程序进展不是很顺利。

这个错误意味着pip要我们编译软件包;如果我们安装了,编译器和Python开发工具链,这将起作用,但非常慢。

当然,这不只是一个。也会发生相同的问题,例如:

为什么pip试图从头开始编译这些软件包?为什么我们没有获得二进制的、预编译的软件包?

在考虑第二种故障模式之后,我们将稍等一会儿找到答案。

失败原因#2:旧版本

接下来,安装,Python内存分析器。

安装成功!除了访问的页面()外,您都会看到``0.7.2`的版本很旧。在撰写本文时,Fil的最新版本是0.14.1。

为什么要安装旧版本?

和轮子

从到的许多软件包都要求在C / C ++ / Cython / Rust / etc中编译一些代码。为了节省您从头开始编译所有内容的需要,维护人员可以将代码的编译版本(“ wheels”)上载到Python Package Index。如果pip碰到适用于您的特定版本的Python和操作系统版本的轮子,它将下载它而不是源代码。

对于Linux,有多种轮子变体:,和。您可以在下载的轮子的文件名中看到正在使用哪个变体。

问题是:旧版本的pip不支持,当然也不支持。Ubuntu 18.04中的pip太旧了,因此它只了解。这解释了我们看到的两个问题:

1、如果您查看PyPI上的可用文件列表(),您会看到只有很多和的轮子。因此,pip会回退到需要编译的源代码包。

2、如果检查的PyPI文件(),则会看到有轮子,而根本没有源程序包;因为从源代码构建有点棘手,所以我只分发编译后的程序包。这意味着pip会继续使用该软件包的较早版本,直到找到具有轮子的软件包为止。

解决方案:升级pip

为了获得最新最好的软件包,而无需编译,您需要升级到最新版本的pip。如何执行取决于您的安装环境。

通常,您可以执行来每天进行一次升级。

但是,在某些环境中可能会出现问题。例如,如果您看一下我们如何在Ubuntu 18.04中设置Python,那么我们是通过系统软件包安装pip的。

问题在于,覆盖系统软件包中的随机文件是一个坏主意。除非您在环境中运行,否则在必要时将从头开始重建(例如Docker映像),那么永远不要以root或sudo的身份运行来修改系统软件包。

相反,在Ubuntu 18.04上,您可以通过下载获得pip:

或者您可以创建一个virtualenv虚拟环境,然后通过执行升级其pip:

现在,我们有了一个更新后的,我们可以轻松地安装最新版本的和:

注意,我们下载了包含的软件包。

为什么会有这么多Linux版本存在?

Linux上已编译的Python扩展链接到标准C语言库,特别的是它们链接到GNU Libc(又名)。您可以使用实用工具查看可执行文件或共享库链接到哪些库:

注意,编译后的Python扩展尤其依赖于,即。

如果您用的较新版本编译代码,它可能不需要在旧版本提供新的API或符号。这意味着你的代码不会在旧的Linux发行版上运行。

有许多对这个问题的不同解决方案。通过针对旧版本的头文件来编译所有的包;基本上在广泛的Linux发行版它有一个自定义编译安装设计工作。

PyPI二进制轮子通过编译旧版本的Linux,以及它的相应旧版本的来解决这个问题。因为它是针对旧版本编译的,它会与任何新版本兼容工作。

包建在CentOS 5。

包建在CentOS 6。

软件包都建立在CentOS 7上。

每个新版本都需要对应的新发布的pip。你可以学到更多的和。

升级您的pip!

无论您是建立一个开发环境或写你的,请确保升级pip。否则,你就会有一个更难的时间安装软件包。

更多阅读

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210301A01M4E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券