Python wheel文件详细介绍

目录
  • 1. wheel介绍
  • 2. wheel的类型
  • 3. 创建wheel
  • 4. 导入使用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文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中wheel的用法整理

    Python的第一个主流打包格式是.egg文件,现在大家庭中又有了一个叫做Wheel(*.whl)的新成员.wheel"被设计成包含PEP 376兼容安装(一种非常接近于磁盘上的格式)的所有文件".在本文中,我们将学习如何创建一个wheel以及如何在virtualenv中安装wheel. 起步 你需要pip来创建wheel,要学习安装pip,我强烈推荐阅读pip的安装页面 .如果你已经安装了pip,那么你需要把它升级到最新版本.你只需要做这些:在一个控制台窗口中,输入以下命令: pip

  • 如何将自己的python库打包成wheel文件并上传到pypi

    新建项目 如下图,比如sigma目录是我要上传的项目,在six-sigma目录下新建三个文件,分别是LICENSE也就是开源协议,README.md文件,用于介绍自己的项目和setup.py这个配置文件,此文件配置关于项目和作者的一些信息,接下来我们一一介绍. LICENSE文件 Copyright (c) 2018 The Python Packaging Authority Permission is hereby granted, free of charge, to any person

  • Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解

    wheel文件 Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容.按照官网说法,wheels是发行版Python的新标准并且要取代.egg. Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义. Wheel现在被认为是Python的二进制包的标准格式. 以下是Wheel和Egg的主要的不同点: Wheel有一个官方的PEP427来定义

  • Python wheel文件详细介绍

    目录 1. wheel介绍 2. wheel的类型 3. 创建wheel 4. 导入使用wheel 1. wheel介绍 .whl文件(WHL file)也称为轮子(wheel),这是用于python分发(distribution)的标准内置包格式(standard built-package format).它包含安装所需的所有文件和元数据(metadata)..whl文件使用zip进行压缩..whl文件还包含有关此wheel文件支持的Python版本和平台的信息..whl文件格式是一种即装即

  • Python 模块EasyGui详细介绍

    Python 模块EasyGui详细介绍 前言: 在Windows想用Python开发一些简单的界面,所以找到了很容易上手的EasyGui库.下面就分享一下简单的使用吧. 参考的链接:官网Tutorial 接下来,我将从简单,到复杂一点点的演示如何使用这个模块.希望能给刚接触easygui的你一点帮助 :-) msgBox,ccbox,ynbox # coding:utf-8 # __author__ = 'Mark sinoberg' # __date__ = '2016/5/25' # __

  • python request 模块详细介绍

    request Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作. GET 请求 # 1.无参数实例     import requests     ret = requests.get('https://github.com/timeline.json')     print

  • Python 循环函数详细介绍

    目录 一.循环函数 1.for循环 2.while循环 3.中断循环 二.循环设计 1.range() 2.enumerate() 3.zip() 三.循环对象 1.什么是循环对象 2.迭代器 3.生成器 4.表推导 一.循环函数 1.for循环 for循环需要预先设定好循环的次数(n),然后执行隶属于for的语句n次. 基本构造是 for 元素 in 序列: statement 举例来说,我们编辑一个叫forDemo.py的文件 for a in [3,4.4,'life']: print a

  • iOS 配置.gitignore文件详细介绍

    iOS 配置.gitignore文件详细介绍 为什么要配置.gitigore 在我们使用git的过程当中,不是任何文件都需要commit到本地或者远程仓库的,比如一些三方库文件. 那么作为一个git新手,很多人不知道如何配置.gitignore文件,本文只是提供一个便捷的例子.你可以直接使用本文提供的代码编辑到你的.gitigore文件中. 简便配置 直接复制下面的内容到你的.gitignore文件即可.注意,这个配置是给iOS开发者使用的. # Xcode .DS_Store */build/

  • Python字典操作详细介绍及字典内建方法分享

    创建 方法一: >>> dict1 = {} >>> dict2 = {'name': 'earth', 'port': 80} >>> dict1, dict2 ({}, {'port': 80, 'name': 'earth'}) 方法二:从Python 2.2 版本起,可以使用一个工厂方法,传入一个元素是列表的元组作为参数 >>> fdict = dict((['x', 1], ['y', 2])) >>> f

  • python中进程间通信详细介绍

    目录 进程间通信(IPC) 管道通信(Pipe) 1.通信原理 2. 实现方法 共享内存 1.通信原理 2.实现方法 信号量(信号灯集) 1.通信原理 2. 实现方法 3.代码演示 进程间通信(IPC) 必要性 进程间空间独立,资源不共享,此时在需要进程间数据传输时就需要特定的手段进行数据通信 常用进程间通信方法 管道 消息队列 共享内存 型号 信号量 套接字 管道通信(Pipe) 1.通信原理 在内存中开辟管道空间,生成管道操作对象,多个进程使用同一个管道对象进行读写即可实现通信 代码演示(w

  • python运算符号详细介绍

    目录 比较运算符 布尔运算符 python中的位运算符 运算符的优先级 比较运算符 a,b=10,30 print('a>b吗?',a>b) print('a<b吗?',a<b) print('a<=b吗?',a>=b) print(a is b)#这个比较的是id标识 a>b吗? False a<b吗? True a<=b吗? False False 一个变量有三部分组成:1标识,2类型,3值 比较对象的标识使用is 布尔运算符 print(a==1

  • Python 字典(Dictionary)详细介绍

    目录 1.访问字典里的值 2.修改字典 3.删除字典元素 3.1字典键的特性 4.字典内置函数&方法 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 格式如下所示: d = {key1 : value1, key2 : value2 } 注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict. 键一般是唯一的,如果重复最后的一个键值对会替换

  • Python Django中间件详细介绍

    目录 一 .中间件简介 二 .编写自己的中间件 三 .中间件执行流程 一 .中间件简介 中间件是Django请求/响应处理的钩子函数.它是一个轻量级的.低级的"插件系统",用于全局改变Django的输入和输出.中间件是帮助我们在视图函数执行之前都可以做一些额外的操作,它本质就是一个自定义类,类中定义几个方法,Djago框架会在特定的时候自动触发. 每个中间件负责做一些特定的功能.例如,‘django.contrib.auth.middleware.AuthenticationMiddl

随机推荐