Python wheel文件详细介绍

 更新时间:2022年09月22日 15:28:10   作者:fengbingchun  
wheel是新的Python的disribution,用于替代Python传统的egg文件。目前有超过一半的库文件有对应的wheel文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

1. wheel介绍

.whl文件(WHL file)也称为轮子(wheel),这是用于python分发(distribution)的标准内置包格式(standard built-package format)。它包含安装所需的所有文件和元数据(metadata)。.whl文件使用zip进行压缩。.whl文件还包含有关此wheel文件支持的Python版本和平台的信息。.whl文件格式是一种即装即用格式(ready-to-install format),允许在不构建源代码分发(without building the source distribution)的情况下运行安装包。

.whl文件本质上是zip文件,这些.whl文件可以使用解压缩选项(unzip option)或标准解压缩软件应用程序(如WinZIP和WinRAR)解压缩。

.whl文件按照以下约定命名:

{dist}-{version}(-{build})?-{python.version}-{abi}-{platform}.whl

如果我们之前使用pip安装过Python包,那么我们的系统上很可能已经有轮子(wheel)被安装过。pip是安装wheel的包管理器。

我们可以通过pip安装已下载的.whl文件:pip install <filename>.whl ,安装包后,我们可以执行Python shell并尝试导入包:import whl_dist_name

wheel的直接好处是我们与其他人共享我们的包,他们不必担心构建它。他们只需pip install后即可使用该软件包。它也是一个更小的共享文件(与所有源代码相比),安装速度更快,因为它不需要运行安装脚本。

2. wheel的类型

(1).universal wheel:包含py2.py3-none-any.whl。它在任何操作系统和平台上都支持Python 2和Python 3。

(2).pure-python wheel:包含py3-none-any.whl或py2-none-any.whl。它支持Python 3或Python 2,但不能同时支持两者。它在其它方面与universal wheel相同,但它会被标记为py2或py3而不是py2.py3标签。

(3).platform wheel:支持特定的Python版本和平台。

3. 创建wheel

(1).将所有模块(python脚本)、包(包含模块的文件夹/目录)保存在父目录中。随意命名根目录,通常与项目相关。

(2).最好创建一个空的名为__init__.py文件,并将此__init__.py文件放在所有包目录和子包目录下。无需将其保存在根目录中。

(3).创建一个名为setup.py的文件并将其放在根目录中。此脚本的内容至少应包括:distribution name, version number, and list of package names

(4).转到你可以运行python和pip命令的命令提示符。在命令提示符下更改目录并导航到放置setup.py的项目的根目录,执行以下命令:扩展名为.whl的文件将在根目录下自动创建的子目录中创建,名为dist。

wheel中并不包含setup.py,wheel不必运行setup.py脚本。

注:需提取安装wheel setuptools: pip install wheel setuptools,在conda中默认是安装的

python setup.py bdist_wheel --universal # universal wheel
python setup.py bdist_wheel # pure-Python wheel

这里通过conda在虚拟环境base下创建一个wheel,取名为testwheel目录组织结构如下所示:

setup.py内容如下:

import setuptools
setuptools.setup(
    name="testwheel",
    version="1.0.0",
    author="fengbingchun",
    author_email="fengbingchun@163.com",
    description="test wheel",
    packages=setuptools.find_packages(),
    url="https://github.com/fengbingchun",
    license="MIT",
    python_requires=">=3.8"
)

testwheel目录下的__init__.py是个空文件,math目录下的__init__.py内容如下:

from .math_add import *
from .math_sub import *

math_add.py内容如下:

def add3(a, b, c):
    print("call add operation: three parameters ...")
    return (a+b+c)
def add2(a, b):
    print("call add operation: two parameters ...")
    return (a+b)

math_sub.py内容如下:

def sub3(a, b, c):
    print("call sub operation: three parameters ...")
    return (a-b-c)
def sub2(a, b):
    print("call sub operation: two parameters ...")
    return (a-b)

执行如下命令生成wheel,此wheel仅限于在Python3上执行,将终端定位到setup.py目录下

执行完上述命令后会产生3个新的目录,build, dist, testwhell.egg-info,各个目录的内容如下所示,生成的whell在dist目录下,全名为testwheel-1.0.0-py3-none-any.whl,只需将此文件分发出去,其他人安装后即能使用。

4. 导入使用wheel

如果你想在项目中安装已经安装过的wheel文件,需要更新此wheel的版本号。如果版本号保持不变,pip将不会安装它。或者先卸载已安装的whell: pip uninstall testwheel

通过conda新建一个虚拟环境testwheel,用来测试上面生成的testwheel-1.0.0-py3-none-any.whl,将终端定位到其它的test目录下,并将生成的wheel文件拷贝到此目录下,安装,执行结果如下图所示:

会将此wheel安装到anaconda3/envs/testwheel/lib/python3.8/site-packages/目录下,如下图所示:

在tmp下添加一个test.py文件,用于测试wheel,内容如下:

from testwheel.math import math_add, math_sub
a, b, c = 10, 5, 2
print("add3:", math_add.add3(a, b, c))
print("add2:", math_add.add2(a, b))
print("sub3:", math_sub.sub3(a, b, c))
print("sub2:", math_sub.sub2(a, b))
print("test finish")

执行结果如下所示:可见正确的调用了wheel中的接口

如果需要反复的调整wheel的内容,需要反复的测试,又不想修改version number,一种方法是可先卸载已安装的wheel,然后再次安装新的wheel,如下图所示:也可使用--force-reinstall

GitHub传送门

到此这篇关于Python wheel文件详细介绍的文章就介绍到这了,更多相关Python wheel文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python文件夹批处理操作代码实例

    Python文件夹批处理操作代码实例

    这篇文章主要介绍了Python文件夹批处理操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • python2.7和NLTK安装详细教程

    python2.7和NLTK安装详细教程

    这篇文章主要为大家详细介绍了python2.7和NLTK安装详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Centos5.x下升级python到python2.7版本教程

    Centos5.x下升级python到python2.7版本教程

    这篇文章主要介绍了Centos5.x下升级python到python2.7版本教程,本文使用编译安装方式,并配置了一系列需要更改的配置项,需要的朋友可以参考下
    2015-02-02
  • 利用OpenCV+Tensorflow实现的手势识别

    利用OpenCV+Tensorflow实现的手势识别

    这几天没事,想着再学点一些视觉识别方向的东西,因为之前做了验证码识别,有了机器学习的信心,因此这次打算做个手势识别,下面这篇文章主要给大家介绍了关于利用OpenCV+Tensorflow实现的手势识别的相关资料,需要的朋友可以参考下
    2022-11-11
  • 利用Python实现RSA加密解密方法实例

    利用Python实现RSA加密解密方法实例

    过去几天我一直在尝试用Python实现RSA算法,下面这篇文章主要给大家介绍了关于利用Python实现RSA加密解密的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Python socket实现多对多全双工通信的方法

    Python socket实现多对多全双工通信的方法

    今天小编就为大家分享一篇Python socket实现多对多全双工通信的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python实现贪吃蛇游戏

    python实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了python实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python中使用正则表达式的后向搜索肯定模式(推荐)

    python中使用正则表达式的后向搜索肯定模式(推荐)

    这篇文章主要介绍了python里使用正则表达式的后向搜索肯定模式,本文通过代码介绍的非常详细,包括语法介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • Webots下载安装 + Pycharm联调使用教程

    Webots下载安装 + Pycharm联调使用教程

    Webots是一个开源的三维移动机器人模拟器,它最初是作为研究移动机器人中各种控制算法的研究工具开发的,自2018年12月起,Webots作为开源软件发布,并获得Apache 2.0许可证,这篇文章主要介绍了Webots下载安装 + Pycharm联调 ,需要的朋友可以参考下
    2023-02-02
  • 150行python代码实现贪吃蛇游戏

    150行python代码实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了150行python代码实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论