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 setuptoolssetuptools.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_suba, b, c = 10, 5, 2print("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: https://github.com/fengbingchun/Python_Test

Python3中.whl文件介绍相关推荐

  1. Python3中.pyd文件介绍

    .pyd文件是用Python编写生成的动态链接库,包含一个或多个Python modules,可以被其它Python代码调用. 以下是.pyd的生成及调用测试:       通过conda创建虚拟环境 ...

  2. Window系统中Hosts文件介绍

    Window系统中Hosts文件介绍 hosts文件用于将常用的网址域名与其对应的IP地址建立关联,相当于本地的一个dns服务,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件 ...

  3. Python3中打开文件的方式(With open)

    Python3中打开文件的方式(With open) 一.了解文件基本概念 1.什么是文件 2.两种重要的文件类型 3.文本文件与二进制文件的优缺点 4.python3中的字符串类型 5.文件的缓冲机 ...

  4. Python3中collections.OrderedDict介绍

    Python3中的collections模块实现了特定目标的容器,以提供Python标准内建容器dict.list.set和tuple的替代选择,包括namedtuple.deque.ChainMap ...

  5. IOS-项目中常见文件介绍

    一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要用来放依赖的框架 3.test文件夹是 ...

  6. Python3中typing模块介绍

    typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py.此模块为类型提示(Type Hints)提供运行时支持( ...

  7. Python3中lambda表达式介绍

    Python3中的lambda表达式或lambda函数是匿名函数(anonymous function),意味着该函数没有名称.def关键字用于在Python3中创建一个普通函数,类似地,lambda ...

  8. Python3中pass语句介绍

    python3中的pass语句是一个空语句,什么都不做,执行它时什么也没有发生,是一个空操作. pass语句通常用作占位符(place-holder),即当用户不知道要编写什么代码时,用户只需在那行上 ...

  9. python—whl文件介绍与安装

    在安装whl文件之前,我们需要先搞清楚什么是whl文件, whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件.使得可以在不具备编译环境的情况下,选择合适自己的python环境进 ...

  10. Qt中pri文件介绍及使用(图文超级简单!!)

    初衷是把额外用到的一些自定义组件放在一个文件中,方便调用.新手学东西真的是费时费力 网上 搜索了一番 没有太完整的解决方案 所以参考整理了一下 分为介绍和使用两部分(图文) --介绍 我们可以把 *. ...

最新文章

  1. SpringSecurity安全验证中文乱码问题
  2. C# Timer使用方法示例
  3. 看似简单但容易忽视的编程常识
  4. gui linux 桌面应用,吃掉Linux开发者,WSL支持GUI应用
  5. python nltk lemmatizer_Python聊天机器人–使用NLTK和Keras构建第一个聊天机器人
  6. 面向对象:类的定义和使用
  7. Java 这么卷,要转 Go 吗?
  8. 剑指Offer_12_矩阵中的路径(参考问题:马踏棋盘)
  9. 【转】【JLINK下载失败,STLINK下载失败万能解决方案】JLINK和STLINK都无法下载时的解决办法,此时芯片并没有报废...
  10. Android通讯录怎么实现定位,Android仿微信通讯录滑动快速定位功能
  11. 适合自学的C语言基础视频教程
  12. PHP 生成PDF文件并向PDF添加图片
  13. VIMS(虚拟镜像管理系统)
  14. nlp自然语言处理_自然语言处理中的偏见nlp是一个危险但可解决的问题
  15. 使用STM32的DFSDM外设来驱动PDM麦克风进行音频采集
  16. hg8010h的调试。
  17. 前端js调用摄像头进行录像并传到后端
  18. 如何在Powerpoint中更改幻灯片大小
  19. deepin Picked up _JAVA_OPTIONS
  20. mysql统计数学课的及格人数_mysql case when 案例:统计各科成绩各分数段人数所占百分比...

热门文章

  1. Windows 下 cmd 窗口使用 ssh 命令
  2. wsimport生成客户端java代码
  3. 溯光者:超简单,一文读懂显卡型号编码数字、字母怎么看,都是什么意思?
  4. C++虚函数指针虚函数表
  5. 获取移动光猫(如HS8545M5等设备)pppoe密码明文
  6. b区计算机考研招不满的大学,b区考研招不满的大学 适合调剂的学校有哪些
  7. 银联 php hex2bin,银联支付
  8. 我的世界android官方版下载,我的世界0.14.2下载
  9. uni-app:自定义vue模板
  10. qqxml图片代码_QQxml卡片代码合集超大图