文章目录

  • 简介
  • 一、构建工程文件
  • 二、封装Python包
  • 三、制作python包为wheel文件
  • 四、完整示例
  • 小结

简介

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 printtestprinttest.test()

输出:

print test

二、封装Python包

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

from setuptools import setupsetup(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__.pyprint1.pyprint2.pysetup.pyREADME.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   :这个是对项目的一些使用方法的一些说明文件(可以为空文件)
  1. 编辑文件夹内文件的内容,为了简单,我们假定其他都是空文件,cal_similarity.py 和setup.py不为空文件

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

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

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

# coding=utf-8from 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.pypackages=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

Python:whl安装包简介与制作相关推荐

  1. 学习笔记:发布自己的python模块安装包

    文章目录 0. 前言 1. 准备工作 (1) 注册 pypi.org 用户 (2) 使用 pip 安装或升级几个必备工具 2. 规划文件目录 (1) __init__.py (2) README.md ...

  2. python导入安装包

    主要分两种方式:在线安装和离线安装 在线安装 因为我公司开发是在云桌面,里面是没有外网的.之前是只能离线安装,后面搭了一个内部镜像环境. 1.添加配置文件进行换源 2.检查requirements.t ...

  3. Python离线安装包教程

    Python离线安装包教程 1.下载pip包 pip download 你要下载的包名 -d 下载的路径# example 结果会下载很多whl包 pip download httpie -d . 2 ...

  4. python 手动安装包的两种方法

    python 手动安装包的两种方法 对于 .tar.gz 的包来说 解压缩文件 aaaxxxx-1.0.1.tar.gz 移动到压缩文件所在目录 使用tar -zxvf aaaxxxx-1.0.1.t ...

  5. python怎么安装包-如何给自己的Python项目制作安装包

    本教程将指导您如何打包一个简单的Python项目.它将向您展示如何添加必要的文件和结构来创建包,如何构建包以及如何将其上载到Python包索引. A simple project 本教程使用名为exa ...

  6. python制作安装包_如何制作python安装模块(setup.py)

    Python模块的安装方法: 1. 单文件模块:直接把文件拷贝到$python_dir/lib 2. 多文件模块,带setup.py:python setup.py install 3. egg文件, ...

  7. python模块安装包_制作python模块安装包[转载自刘天斯]

    python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算.图片处理.web应用.GUI开发等.当然也可以将自己写的模块进行打包或发布.一简单的方法是将你的类包直接copy到python的li ...

  8. python安装包-在Python中安装包的三种方法

    最近一段时间都在学习 Python3(如果你想部署 Python3 的开发环境,可参考<是时候配置一个Python3的开发环境了>),乘此机会重新回顾了 Python2 的相关知识,在 P ...

  9. 断网python第三方库安装_断网环境下利用pip安装Python离线安装包(转载)

    这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows 7 # python 2.7.9 # pip 1.5.2 友情提示:当 ...

最新文章

  1. User Profile Data Web Part 读取属性字段
  2. Memcached 缓存基础知识点1并64位系统 1.4.4版本安装
  3. SAP创建生产订单时要求输入销售订单
  4. elisa标准曲线怎么做_ELISA标准曲线制作
  5. Java基础day8
  6. P2572 [SCOI2010]序列操作
  7. 装饰器python的通俗理解_2道极好的Python算法题 | 带你透彻理解装饰器的妙用
  8. 当卷积层后跟batch normalization层时为什么不要偏置b
  9. 实验吧_登陆一下好吗(骚注入)你真的会PHP吗?(代码审计)
  10. 幅度为a0的载波由峰峰值_【砂石骨料】机制砂亚甲蓝值对混凝土性能的影响研究...
  11. java 软考_关于软考
  12. 2022年全国大学生电子设计大赛省赛A题
  13. 查看oracle空间使用情况,Oracle 查看数据库空间使用情况
  14. matlab 函数pdf怎么用_怎么将Word转换成PDF?Word转PDF就得用这个工具
  15. 文件外链PHP,php如何去除外链
  16. ERP系统应用的流程与步骤
  17. JAVA如何在LINUX里编程,如何使用加多宝(jdb)在linux下调试Java程序
  18. 如何使用cygwin在windows下Linux编程
  19. 以儒始,以道终:九十年代新武侠电影观
  20. python控制苹果手机触摸屏失灵怎么办_苹果手机触摸屏失灵的各种解决方法

热门文章

  1. Monkey King(左偏树 可并堆)
  2. 视频剪辑怎么自学?其实剪辑很简单
  3. 初始化Weex项目遇到的问题记录
  4. 涉嫌一级强奸重罪之后,危险的刘强东和京东
  5. MySQL-用户管理
  6. Error:Internal error: (java.lang.IllegalArgumentException) Argument for
  7. Excel同一单元格多数据如何求平均数
  8. 风电场气象服务器是什么系统,气象站资料在风电场前期工作中到底有多重要?...
  9. 零知识证明学习资源汇总
  10. 【错误解决】SpringBoot邮件服务的一些错误及其解决方案