python安装whl包并解决依赖关系的实现

2025-02-26 17:50

本文主要是介绍python安装whl包并解决依赖关系的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

一、什么是whl文件?

whl是一种预编译的二进制包文件,它主要用于安装python库。简单来讲whl就是一种已经编译好的python库文件。我们可以使用whl包来安装python库。

二、我们为什么需要使用whl文件来安装python库?

有的小伙伴可能会疑惑,我们安装python库时使用“pip install [库名]”来安装一个python库,这样可以直接借助网络将这个库的包拉下来并且将这个库的依赖项也一并拉取下来。拉取下来以后pip还会帮我们解决这些库的依赖问题,这样的编程方法明明很方便,为什么我们还需要使用whl包来安装python库?其实,使用whl一般用于一些很特殊的情况,比如在公司的内部服务器中,这些服务器是不允许连接网络的;亦或是我们使用pip命令安装库时,即使换源了,但是下载依旧很慢。遇到这些情况时,我们大概率都是把要安装的包下载下来再安装。

三、我们应该去哪儿下载whl包?

我们http://www.chinasem.cn可以去到python官方的第三方软件库“pypi”,它是一个中央存储库,开发者可以在这里上传他们的软件包,而其他开发者可以下载并使用这些软件包。所以,我们接下来会演示如何在pypi中下载一个库并且解决它的依赖关系最后安装它。

四、下载whl包

我们可以直接在浏览器中搜索“pypi”。

python安装whl包并解决依赖关系的实现

如图所示,我们搜索出来的第一个就是“pypi”的官方网站了。如果你像我这样搜索没有搜索到“pypi”的官方网站,也可以输入下面的网址打开。

pypi官方网址:PyPI · The Python Package Index

打开官网以后我们可以看到中间有一个很大的搜索框。

python安装whl包并解决依赖关系的实现

我们直接在搜索框中搜索我们想要的python包即可。这里我使用“pygame”包举例。我们在搜索框中输入“pygame”并且回车。

python安装whl包并解决依赖关系的实现

回车以后应该就能看到下面这个界面了。

python安装whl包并解决依赖关系的实现

我们可以看到这里有非常多的pyChina编程thon包,我们点击第一个即可。

点击以后,来到如下界面,我们后面来看看这个界面。

python安装whl包并解决依赖关系的实现

我们可以看到这个页面的左边有三个大的选项,下面我们来讲讲这些选项的作用。

python安装whl包并解决依赖关系的实现

首先第一个选项是项目描述,这里会对整个包有一个大致的描述包括依赖python的版本或者安装方式,不同的python包他们的描述也不一样。

第二个选项是这个包的历史版本,我们可以点击进去下载这个包的历史版本。

第三个选项是文件下载,这里包含这个包在不同架构,不同操作系统,不同python的各个版本。我们会重点查看这个选项,教大家怎么去分辨一个包是不是适合你的,如果一个包与你的操作系统或者是架构,亦或是python不兼容,那么就会出现安装失败的情况。

python安装whl包并解决依赖关系的实现

我们下面拿一个包来举例。

pygame-2.6.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

首先是pygame:这个是我们要安装的这个包的名称。

2.6.0:这是我们要安装这个包的版本号。

pp39:通常表示这个whl包是pypy(一个Python解释器的替代实现)的python3.9版本构建的。你除了可能可以看到pp39以外,你还有可能看到cp39,这就表示这个包是Cpython(python的官方实现)的python3.9版本构建的。大部分的python包都会给出pp和cp两种,这两种类型的包除了在运行速度上有区别。在使用方式上,这两种形式的包编程都是一样的。

pypy39:这里作为一个再次强调它使用了pypy的python3.9来构建的包。这里值得注意的是,这个包用哪一个python构建就要用哪个python来运行。比如这里我们就需要python3.9

manylinux_2_17_x86_64:这表明这个whl包是针对“manylinux 2.17”兼容性的,它是GNU/Linux操作系统的标准化的二进制兼容性目标,旨在与多种Linux发行版兼容。x86_64表示这个包是为64位x86架构编译的。当然,如果你是新手,那么你只需要知道这个包是在linux系统使用的就行了。

这就是这个包名的大概信息了,我们可以来整理一下,这个包的名字叫pygame,它的版本为2.6.0,基于pypy39构建的linux x86_64版本。

下面我们再来看一个包名。

pygame-2.6.0-cp312-cp312-win32.whl

简单的分析就可以得出,这个包的名字是pygame,它的版本是2.6.0,基于Cpython3.12构建的Windows32位版本。

我们现在已经了解到了这些包名的含义,那么我们就要根据我们对应的操作系统,架构和python版本来下载对应的包,我们可以使用下面的命令来查看python的版本。

python --version

python安装whl包并解决依赖关系的实现

输入命令回车以后就会输出python的版本了。我这里的python是3.8,那么我肯定是要使用pp38或者cp3China编程8类型的包。

我们可以使用下面这条命令来查看自己的系统架构:

$env:PROCESSOR_ARCHITECTURE

python安装whl包并解决依赖关系的实现

这里可以看到我的系统架构是AMD64,也就是64位系统。我们肯定要选择x86_64版本的包。

经过筛选,我们可以看到,这个包是完美适合我计算机环境的。

python安装whl包并解决依赖关系的实现

我们点击这个包的包名浏览器应该就会开始下载了。

python安装whl包并解决依赖关系的实现

我们将这个包放到一个我们能找到的地方。

python安装whl包并解决依赖关系的实现

五、whl包的安装

我们在PowerShell中将路径切换到这个放有whl包的文件夹,我们切换到这个文件夹以后可以使用“ls”命令查看这个目录下的文件,如果你使用“ls”没有看到这个文件,哪怕出现了再多的文件都意味着你的路径错误了。请将下载的文件放到一个你能找到的位置再使用powershell把路径切换过去,或者使用绝对路径。

python安装whl包并解决依赖关系的实现

现在有了这个文件我们就可以开始安装了。

我们可以先使用下面这个查看安装的包的指令来查看我们已经安装的包。

pip list

python安装whl包并解决依赖关系的实现

我们可以使用下面的命令来安装一个whl包:

pip install [包名]

如果你被提示pip命令找不到,你需要先安装pip命令。但是现在应该都不会出现这种情况,在python较新的版本中,python被安装时就附带了pip。

我这里的包名是“pygame-2.6.0-cp38-cp38-win_amd64.whl”所以我会使用“pip install pygame-2.6.0-cp38-cp38-win_amd64.whl”来安装这个包。值得注意的是,这里因为我的包就在这个目录下我才直接输入了包名,如果这个包不在这个目录,我就应该输入别的路径。

输入命令以后回车,就可以得到以下输出:

python安装whl包并解决依赖关系的实现

我们看到下面这样的输出就表示这个库已经安装成功了。我们再次使用“pip list ”来查看我们已经安装的包。

python安装whl包并解决依赖关系的实现

我们可以发现,刚刚安装的包已经出现在这里面了。

至此我们的whl包已经安装完成。当然,不是所有的whl包都能直接安装,它们其中的有些依赖了别的包,别的包又依赖了另外的包,依赖关系非常复杂,如果不先安装好一个包依赖的包,那这个包就无法安装,下面我们将来讲一下怎么解决python包之间的依赖关系。

六、在解决依赖关系后来安装whl包

我们现在先来看在线状态pip包管理器是怎么解决依赖关系的。在在线状态下,如果我们使用pip安装包,不管这个包是被下载好的还是说这个包在网络上,我们希望pip自动来安装。pip都是会去网络上下载包。如果你把一个whl包下载到了本地,pip会在安装它时查看它依赖的包,如果它依赖了没有安装的包,pip就会去网络上下载对应的whl文件并且安装它,pip会一直重复这个过程,缺少什么就安装什么,直到把你想要安装的python包给安装好。

首先强调,我们这里讲纯离线的环境,就是完全没有网络的情况下,也就是说pip不能自动去拉取包的情况下我们应该怎么安装whl包。我们来看一个错误复现,我使用“pip install PyQt5-5.15.11-cp38-abi3-win_amd64.whl”来安装名为pyQt的包,但是我出现了下面的错误。

python安装whl包并解决依赖关系的实现

我们可以看到前面的黄字和后面的白字大概都是在提示我们网络有问题,还记得pip解决依赖关系的办法吗?是的,pip找不到依赖包时,它会先去网络上找。但是现在我已经处于纯离线环境了,根本不存在网络,所有pip根本就不能去下载包,也就报出了下面红色的错误。我们将其拷贝过来看。

ERROR: Could not find a version that satisfies the requirement PyQt5-sip<13,>=12.15 (from pyqt5) (from versions: none)
ERROR: No matching distribution found for PyQt5-sip<13,>=12.15

它的大概意思就是找不到PyQt5-sip这个库的大于或者等于12.15的版本。

遇到这种情况我们应该怎么办呢?当然是安装它需要的库啦。但是我们现在还是处于离线的环境,所以,我们还是要使用whl离线包来安装pyQt所需要的库。

但是现在还有一个问题就是,一个whl文件它可能不会只依赖一个包,我们应该怎么去查看whl的所有依赖的包呢。其实也很简单。whl文件本质上就是一个压缩文件,我们只需要把后缀名改成zip再解压就行了。如图:

python安装whl包并解决依赖关系的实现

我们将其解压,就可以看到下面的这几个文件夹了。

python安装whl包并解决依赖关系的实现

然后我们再进入文件夹名字带“info”的文件夹

python安装whl包并解决依赖关系的实现

进入以后我们使用记事本打开文件夹中的“METADATA”文件。

python安装whl包并解决依赖关系的实现

python安装whl包并解决依赖关系的实现

我们可以看到这个文件中有几行“Requires-Dist”,这些就是这个whl文件依赖的包了,我们现在看一下,现在这个名为pyQt的包依赖了“PyQt5-sip (>=12.15, <13)”,“PyQt5-Qt5 (>=5.15.2, <5.16.0)”这两个包,我们现在去下载这两个包。

我们下载了这两个包以后,使用同样的方法查看了它们所需的依赖。

python安装whl包并解决依赖关系的实现

python安装whl包并解决依赖关系的实现

我们可以看到它们并不依赖别的什么库,所以我们可以直接开始安装。

python安装whl包并解决依赖关系的实现

python安装whl包并解决依赖关系的实现

python安装whl包并解决依赖关系的实现

可以看到我们这两个包已经安装成功了,最后我们来安装pyQt。

python安装whl包并解决依赖关系的实现

至此,我们已经解决了所有的依赖关系。当然作为演示,我们使用的只是一个依赖关系较少的库。在实际的运用中某些库的依赖关系要复杂得多。

七、结语

不管一个python库依赖关系再复杂,它都拥有“METADATA”,让我们有迹可循。人生为什么不是这样?当我们在大学迷茫的时候,为什么不尝试去找找我们生活中的“METADATA”呢?

到此这篇关于python安装whl包并解决依赖关系的实现的文章就介绍到这了,更多相关python安装whl包内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于python安装whl包并解决依赖关系的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153555

相关文章

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.