Python3中.whl文件介绍

article/2025/8/22 20:39:02

      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


http://chatgpt.dhexx.cn/article/4d6Yw88X.shtml

相关文章

c语言rtu crc16,ModeBusRTU调试工具CRC16版

ModeBusRTU调试工具CRC16版。经过验证&#xff0c;其所生的CRC16校验码与知名软件ModbusPull生成的是一至的。 相关软件软件大小版本说明下载地址 ModeBusRTU调试工具CRC16版。经过验证&#xff0c;其所生的CRC16校验码与知名软件Modbus Pull生成的是一至的。 1.支持任意数组串…

java实现CRC16 MODBUS校验算法

最近进行led彩屏通讯开发&#xff0c;接触到CRC16算法计算校验码&#xff0c;先附上两篇网上可用的代码 /*** 计算CRC16校验码** param bytes* return*/public static String getCRC(byte[] bytes) {int CRC 0x0000ffff;int POLYNOMIAL 0x0000a001;int i, j;for (i 0; i <…

Modbus CRC16校验方法及实现代码

0.前言 项目中所用到的DI数字开关模块通信方式为串口通信&#xff0c;内置数据校验方式为Modbus CRC16。 这种校验方式第一次遇到&#xff0c;于是百度了一下&#xff0c;找到这篇文章&#xff0c;按照步骤&#xff0c;自己写了下代码&#xff0c;对比了下文中代码&#xff0…

crc16计算

参考&#xff1a;https://blog.csdn.net/j824117879/article/details/82019545 crc这个名词听着特别熟悉&#xff0c;但是由于工作性质的原因很少接触到&#xff0c;但最近工作中却碰到了crc校验&#xff0c;开发资料给了crc的初值和使用的crc表格&#xff0c;就只能根据这个初…

CRC16浅析

CRC即循环冗余校验码&#xff08;Cyclic Redundancy Check&#xff09;&#xff0c;是数据通信领域中最常用的一种查错校验码。奇偶校验虽然简单&#xff0c;但是漏检率太高&#xff0c;而CRC则要低的多&#xff0c;所以大多数都是使用CRC来校验。CRC也称为多项式码。 任何一个…

C语言版CRC-16系列校验算法

一、CRC16校验码的使用 现选择最常用的CRC-16校验&#xff0c;说明它的使用方法。 根据Modbus协议&#xff0c;常规485通讯的信息发送形式如下&#xff1a; 地址 功能码 数据信息 校验码 1byte 1byte nbyte 2byte CRC校验是前面几段数据内容的校验值&#xff0c;为一个16位数据…

LWIP使用经验

LWIP使用经验 一 LWIP内存管理 LWIP的内存管理使用了2种方式&#xff1a;内存池memp和内存堆mem&#xff0c;如图1所示。 内存池的特点是预先开辟多组固定大小的内存块组织成链表&#xff0c;实现简单&#xff0c;分配和回收速度快&#xff0c;不会产生内存碎片&#xff0c;…

Linux线程ID与内核LWP的关系

先给出图&#xff0c;然后我将根据图来讲解二者的关系&#xff1a; 线程ID 在使用线程前&#xff0c;我们需要链接线程的pthread第三方库&#xff0c;在Linux中&#xff0c;第三方库被加载到PCB进程中的虚拟地址空间中的栈区与堆区之间的共享区。 我们所创建线程的控制块即维护…

LWP(Library for WWW in Perl)的基本使用

LWP (“Library for WWW in Perl” 的缩写) 是一个由多个模块组成&#xff0c;用来获取网络数据的的模块组。 和很多 Perl 的模块一样。每一个 LWP 模块都自带详细的文档&#xff0c;做为对这个模块的完整介绍。可是面对 LWP 里的众多模块&#xff0c;有时候即使是完成最简单的…

Linux进程和轻量级进程(LWP)

1.父子进程可以共享含有程序代码的页,但是他们各自有独立的数据拷贝(堆和栈)。 2.进程描述符 3.进程的TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE区别

lwIP 开发指南

目录 lwIP 初探TCP/IP 协议栈是什么TCP/IP 协议栈架构TCP/IP 协议栈的封包和拆包 lwIP 简介lwIP 源码下载lwIP 文件说明 MAC 内核简介(STM32 内置)PHY 芯片介绍(以太网芯片 外置)YT8512C 简介LAN8720A 简介 以太网接入MCU 方案软件TCP/IP 协议栈以太网接入方案硬件TCP/IP 协议栈…

Linux:获取线程的PID(TID、LWP)的几种方式

Linux&#xff1a;获取线程的PID&#xff08;TID、LWP&#xff09;的几种方式 在 Linux C/C 中通常是通过 pthread 库进行线程级别的操作。 在 pthread 库中有函数&#xff1a; pthread_t pthread_self(void);它返回一个 pthread_t 类型的变量&#xff0c;指代的是调用 pthr…

lwip-简介

文章目录 简介层次划分传输过程 简介 lwip的介绍就不累赘了&#xff0c;网上有许多教程。这里推荐野火的<<《[野火]LwIP应用开发实战指南—基于野火STM32》—20210122.pdf>>介绍的非常详细。&#xff08;该文档我已上传到资源了&#xff09;我们记录主要是一些用法…

Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程

一、定义 再看正文之前我要先强调一下几点&#xff1a; 1. Linux中没有真正的线程&#xff0c;但windows中确实有线程 2. Linux中没有的线程是由进程来模拟实现的&#xff08;又称作&#xff1a;轻量级进程&#xff09; 3. 所以在Linux中&#xff08;在CPU角度看&#xff0…

LWIP框架

目录 协议栈分层思想 1. 网络接口层 2. 网络层 3. 传输层 4. 应用层 进程模型 单进程模型 协议栈编程接口 1、Raw/Callback API 2、Netconn API 3、Socket API 协议栈分层思想 TCP/IP协议完整的包含了一系列构成互联网基础的网络协议&#xff0c;TCP/IP协议的开发出…

lwip协议

LWIP版本号 野火LwIP应用开发实战指南&#xff1a;基于STM32 lwIP 2.1.0 Lightweight IP stack lwip的版本号在哪个文件里能看到&#xff1f; 关于LWIP几篇不错的文章分享 LwIP应用开发实战指南 LwIP多TCP连接问题 lwIP TCP/IP 协议栈笔记之十&#xff1a; LwIP 数据流框架 wir…

LWP 与 WEB 的基本使用

简介 LWP (“Library for WWW in Perl” 的缩写) 是一个由多个模块组成&#xff0c;用来获取网络数据的的模块组。 和很多 Perl 的模块一样。每一个 LWP 模块都自带详细的文档&#xff0c;做为对这个模块的完整介绍。可是面对 LWP 里的众多模块&#xff0c;有时候即使是完成最简…

LWIP协议与TCP/IP

1. 学习一个东西&#xff0c;先了解这个东西是干什么用的&#xff0c;哪些场景会用到它&#xff0c;与自己已经掌握的其他知识的联系 a. 例如&#xff1a;LWIP这个东西是干什么用的&#xff1a;他就是一个裁剪后保持大部分TCP/IP功能的协议。用少量的资源消耗实现一个较为完整的…

[Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)

文章目录 线程概念进程和线程的关系线程的优点线程的缺点 线程控制Linux线程和接口关系的认识线程创建线程ID及进程地址空间布局线程等待线程终止线程终止状态线程分离LWP和pthread_t 线程概念 线程是在进程内部运行的一个执行分支&#xff08;执行流&#xff09;&#xff0c;…

实现线程的三种方式KLT/ULT/LWP

大家好&#xff0c;我是神韵&#xff0c;是一个技术&生活博主。关于文章都是定位为基础&#xff0c;我不敢讲的太深入&#xff0c;因为我怕自己没时间。欢迎来点赞打卡&#xff0c;你们的行动将是我无限的动力。 今日主题是&#xff1a;实现线程的三种方式KLT/LWP/ULT 三种…