Python .whl安装包简介和制作

2023-11-18

python



前言

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

Wheel和Egg的不同:
Wheel有一个官方的PEP427来定义,而Egg没有PEP定义。
Wheel是一种分发格式,即打包格式。而Egg既是一种分发格式,也是一种 运行时安装的格式,并且是可以被import的。
Wheel文件不会包含.pyc文件
Wheel使用和PEP376兼容的.dist-info目录,而Egg使用.egg-info目录。
Wheel有着更丰富的命名规则。
Wheel是有版本的,每个Wheel文件都包含wheel规格的版本和打包它的实现。
Wheel在内部被sysconfig path type管理,因此转向其他格式也更容易。

distutils和setuptools工具
用来Python环境中构建和安装额外的模块,模块可以基于Python,也可以C/C++写的扩展模块,可以是python包,包中包含了C和Python编写的模块。setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它是一组Python的 distutilsde工具的增强版(适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本),可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况。

一、构建工程文件

setup.py文件编写:

setup.py参数介绍:
name : 打包起来的包的文件名
version : 版本号,添加为打包文件的后缀名
author : 作者
author_email : 作者的邮箱
py_modules : 打包的.py文件
packages: 打包的python文件夹
include_package_data : 项目里会有一些非py文件,比如html和js等,这时候就要靠include_package_data 和 package_data 来指定了。package_data:一般写成{‘your_package_name’: [“files”]}, include_package_data还没完,还需要修改MANIFEST.in文件.MANIFEST.in文件的语法为: include xxx/xxx/xxx/.ini/(所有以.ini结尾的文件,也可以直接指定文件名)
license : 支持的开源协议
description : 对项目简短的一个形容
ext_modules : 是一个包含Extension实例的列表,Extension的定义也有一些参数。
ext_package : 定义extension的相对路径
requires : 定义依赖哪些模块
provides : 定义可以为哪些模块提供依赖
data_files :指定其他的一些文件(如配置文件),规定了哪些文件被安装到哪些目录中。如果目录名是相对路径,则是相对于
sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中。

示例
printtest.py

def test():
 print('print test')

将以上.py文件做成python模块,需要在相同目录下创建setup.py文件,setup.py中输入配置信息:

from setuptools import setup
setup(name='printtest',
  version='1.0',
  py_modules=['printtest'],
  )

打开终端,定位到该文件夹下,输入:

python setup.py sdist

此时在目录中生成dist文件夹,文件夹中有testpg-1.0.tar.gz文件,用户安装的话只需要testpg-1.0.tar.gz文件即可。将此文件解压得到testpg-1.0文件夹,会发现该文件夹有我们刚刚书写的3个py文件,还有一个PKG-INFO,打开该文件,会显示该模块的具体信息:由于我们没有设置,所以为UNKOWN

Metadata-Version: 1.0
Name: printtest
Version: 1.0
Summary: UNKNOWN
Home-page: UNKNOWN
Author: UNKNOWN
Author-email: UNKNOWN
License: UNKNOWN
Description: UNKNOWN
Platform: UNKNOWN

终端定位到此文件夹下,输入以下命令,模块将会被安装到解释器对应的Lib/site-packages目录下:

python setup.py install

安装后,会发现Lib/site-packages目录下存在printtest.py文件和printtest-1.0-py3.6.egg-info 应用:

import printtest

printtest.test()

输出:

print test

二、封装Python包

导入单个Python文件时成为Python模块,而包含多个Python文件的文件夹成为一个Python包。本节主要讲述怎样封装一个Python包。
1.创建一个文件夹,将需要封装的pagtest文件夹(里面为.py文件,需要包括一个__init__.py文件,内容可以为空)放到该文件夹中,然后创建setup.py文件对包进行配置:

from setuptools import setup

setup(name='pagtest',
  version='1.0.0',
  description='A print test for PyPI',
  author='winycg',
  author_email='win@163.com',
  url='https://www.python.org/',
  license='MIT',
  keywords='ga nn',
  project_urls={
   'Documentation': 'https://packaging.python.org/tutorials/distributing-packages/',
   'Funding': 'https://donate.pypi.org',
   'Source': 'https://github.com/pypa/sampleproject/',
   'Tracker': 'https://github.com/pypa/sampleproject/issues',
  },
  packages=['pagtest'],
  install_requires=['numpy>=1.14', 'tensorflow>=1.7'],
  python_requires='>=3'
  )

2.创建README.txt文件用于对文件的安装以及使用信息做描述
3.目前文件夹的目录的架构为:

pagtest/
	 __init__.py
	 print1.py
	 print2.py
	setup.py
	README.txt

输入以下命令进行打包,制作source distribution(源代码发布包),此命令将会把所有内容在dist/目录打包为pagtest-1.0.0.tar.gz

python setup.py sdist

4.上传到PyPI上。上传时,可以建立一个账户验证文件~/.pypirc(Windows不可以,因为文件命名中含有非法字符),也可以在上传时输入账户和密码。

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>

5.将命令行定位到此文件夹下,输入命令对dist目录下的pagtest-1.0.0.tar.gzt包进行上传,twine为Python包需要安装:

twine upload dist/*

三、制作python包为wheel文件

wheel是一个已经编译好的包,在安装时不需要编译过程,安装whl文件时要比发布的源文件安装要快。
在如上第2步后,输入如下命令即可在生成.whl

python setup.py bdist_wheel

.whl文件在dist目录下,上传到PyPI:

twine upload dist/*

四、完整示例

1.随便建立一个文件夹,(如cal_similarity)里面包括以下五个简单的文件:

__init__.py         :用于说明这个文件夹是一个python 的package包(可以为空文件)
cal_similarity.py :这个是要打包的测试文件
LICENSE           :这个是要打包支持的开源协议(可以为空文件)
setup.py             :这个脚本文件使用setuptools对自己的文件进行打包
READMED.md   :这个是对项目的一些使用方法的一些说明文件(可以为空文件)

2.编辑文件夹内文件的内容,为了简单,我们假定其他都是空文件,cal_similarity.py 和setup.py不为空文件

cal_similarity.py的文件是我们自己编写的文件:

def hello():
    print("hello yes!!!")

setup.py 文件内容是设置一些打包的配置信息,打包任务需要重点掌握的地方

# coding=utf-8
 
from setuptools import setup, find_packages
# python setup.py sdist 打包成tar.gz的形式
# python setup.py bdist_wheel  打包成wheel格式
 
setup(
    py_modules=["cal_similarity"],   #需要打包的文件夹下的py文件名词cal_similarity.py
    packages=find_packages(),        #需要打包的目录列表
    name="cal_similarity",           #包名称,也就是文件夹名称
    version="1.0.0",                 #包的版本
    description="cal_similar between two word",  #对当前package的较短总结
    long_description="***",          #对当前package的详细说明
    author="yin",                #作者姓名
    author_email="72666*@qq.com", #作者邮箱
    install_requires=['numpy'],      #第三方依赖,这些依赖包会在程序安装的时候也会安装
    zip_safe=False,                  #此项需要,否则卸载报windows error错误
    license="MIT Licence",           #支持的开源协议
    python_requires=">=3.4.0",       #指定python的安装要求
    include_package_data=True
)

3.当前目录下使用python运行setup.py文件,cd进入工程目录环境内:

python setup.py bdist_wheel        # 打包为whl文件 
python setup.py bdist_egg             # 打包为egg文件

运行python setup.py bdist_wheel 就会生成wheel安装包了.运行后会多三个文件夹:

build,
cal_similarity.egg-info,
dist

之后就能通过pip install (路径+包名)的方式安装python离线包了。

小结

https://www.yisu.com/zixun/153350.html
https://blog.csdn.net/xuezhangjun0121/article/details/126240807

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python .whl安装包简介和制作 的相关文章

随机推荐

  • HTTP请求返回状态码

    消息 代表请求已被接收 需要继续处理 临时响应 100 Continue 告知客户部分响应已被服务器接收 客户端应继续发送请求 成功 服务器已经接收理解并接受请求 200 OK 请求成功 返回想要的数据 正常状态 201 Created 已
  • 软件测试方法汇总

    软件测试方法种类繁多 记忆起来混乱 如果把软件测试方法进行分类 就会清晰很多 我参考一些书籍和网上的资料 把常用的软件测试方法列出来 让大家对软件测试行业有个总体的看法 从测试设计方法分类 测试名称 测试内容 Black box黑盒测试 把
  • 洛谷-【入门4】数组

    1 小鱼比可爱 题目描述 人比人 气死人 鱼比鱼 难死鱼 小鱼最近参加了一个 比可爱 比赛 比的是每只鱼的可爱程度 参赛的鱼被从左到右排成一排 头都朝向左边 然后每只鱼会得到一个整数数值 表示这只鱼的可爱程度 很显然整数越大 表示这只鱼越可
  • 实战wxPython:049 - 实现一个登录窗口

    在很多GUI程序中 常常在应用启动开始的时候 需要一个用户登录对话框 在那里用户必须输入用户名和密码 如果密码和用户名正确 那么程序就继续加载 显示程序的主界面 下面我们将实现一个登录窗口 它具有以下功能 输入用户名及密码 登录 如果用户名
  • spring boot 2.2.6.RELEASE集成 eureka启动报错

    1 报错信息 org springframework cloud client discovery health DiscoveryCompositeHealthIndicator DiscoveryCompositeHealthIndic
  • MongoDB创建与删除集合(collection)

    一 创建集合 MongoDB的集合相当于关系型数据库的表 不过在创建集合时 执行指定集合名称与选项即可 无需指定类似RDBMS的列名 创建集合的语法为 db createCollection name option 其中 name是集合的名
  • 前端面试题--计算机网络

    文章目录 1 七层网络协议体系结构的理解 2 五层协议中各自对应的网络协议 3 ARP 协议的工作原理 4 IP 地址分类的理解 5 TCP 的主要特点 exclamation exclamation Transmission Contro
  • 推荐几个容易中的计算机EI源刊(基本百发百中)

    转自小木虫 作者 pcmagic 收录 2012 05 27 发布 2012 05 20 根据多年的经验 以下计算机EI源刊可以说是百发百中 只要有工作量 并不需要什么创新性均可录用 Journal of Computers JCP ISS
  • SDUTOJ KMP简单应用 【KMP】

    KMP简单应用 Time Limit 1000MS Memory limit 65536K 题目描述 给定两个字符串string1和string2 判断string2是否为string1的子串 输入 输入包含多组数据 每组测试数据包含两行
  • 单片机外设基本概念_嵌入式单片机教学(一)

    01 引言 哈喽各位 好久不见 看到标题应该知道 小白 又要 给大家 开启一系列的新教程了 肯定有人说我跨度还蛮大的 从ROS到神经网络又到嵌入式教学 其实这些都是小白在本科期间学到的一些知识啦 这边分享给大家 让不知道怎么做项目的小小白能
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • C#获取本机主机名—三种方式

    前提条件 引用名称空间 using System Net 建议 使用方式3 本人使用前2种方式都存在字符串自动截取的情况 方式1 Environment 获取本地计算机名 string machineName System Environm
  • 前端基础--主流浏览器及其内核

    IE trident Chrome webkit blink firefox Gecko Opera presto Safari webkit 内核主要分成两部分 渲染引擎 layout engineer或 Rendering Engine
  • Wrapper中的QueryWrapper常用ge,gt,lt,le具体含义

    英文缩写 英文全拼 含义 EQ equal 等于 NE not equal 不等于 GT greater than 大于 LT less than 小于 GE greater than or equal 大于等于 LE less than
  • centos7.3安装mysql5.7 && 解决 Access denied for user 'root'@'localhost' (using password: NO)

    开始查找自带的mariadb rpm qa grep mariadb 找到安装包并卸载 rpm e mariadb安装包 卸载完之后 我们就可以开始安装mysql5 7了 在这里可以找到我们需要的点击这里 鼠标放在最下面那个No thank
  • React仿写网易云音乐项目

    文章目录 一 项目功能说明 二 最终效果 三 文件目录结构说明 四 项目技术栈 五 核心技术 1 配置项目别名 craco craco 2 使用reset css进行 css 重置 3 使用CSS Sprites 精灵图 4 使用 memo
  • Java语言通过三种方法来实现队列

    队列 关于作者 作者介绍 博客主页 作者主页 简介 JAVA领域优质创作者 一名在校大三学生 在校期间参加各种省赛 国赛 斩获一系列荣誉 关注我 关注我学习资料 文档下载统统都有 每日定时更新文章 励志做一名JAVA资深程序猿 文章目录 队
  • 实现框架的类的方法为什么会在众多集成者中被调用

    以activities为例 实现了 author Tom Baeyens public interface Command
  • LVM磁盘扩容

    一 一块磁盘新增容量后加到lv里面去 一般在虚拟机里面出现这种情况多 这种方式需要重启 1 对新增磁盘空间进行分区 fdisk dev sda 注意 Selected partition 后要对分区的类型做改变 一定要选择t 8e 改变分区
  • Python .whl安装包简介和制作

    python 文章目录 python 前言 一 构建工程文件 二 封装Python包 三 制作python包为wheel文件 四 完整示例 小结 前言 Wheel和Egg都是python的打包格式 目的是支持不需要编译或制作的安装过程 实际