一、参考资料

python打包wheel文件Python打包whl文件

二、重要说明

打包的package中需要包含README.md、LICENSE[非必须]和setup.py文件。三者分别是说明文档,许可证以及python setuptools所用来安装该package的构建脚本。

setup.py中包含了package对应的信息(例如该package的名称、版本、作者)以及该package应当包含的程序文件和数据。

三、参数解释

name: 该package的名字,该名字可以由字母、数字、-组成,注意这个名字不能与其它已经上传到pypi.org的项目相同
version: 这个就是包的发布版本,可以直接写在这,也可以从其它地方引用
author: author可以用来指定该package的作者信息
author_email: 这个也是指定该package的作者信息
py_modules: 打包的.py文件
license: 支持的开源协议
description: 对当前package的较短的总结
long_description: 是对当前package的详细说明。这一详细说明将被展示在Python Package Index上当前项目的主页
long_description_content_type: 指定了long_description内容的格式。在当前情况下为markdown
url: 是当前package的主页链接。大多数情况下这是一个GitHub, GitLab, Bitbucket或者其他代码存储服务的链接
packages: 打包的python文件夹,是一系列应当包含在发布软件包文件(distribution package)中的可被import的python包文件。我们可以手动在此处罗列所有文件。或者如本例中一样使用find_packages()函数自动包含所有的python包文件以及子包文件。
python_requires: python依懒版本
classifiers: 指定了当前package的其他元信息(metadata)。例如当前package兼容的python版本和操作系统,当前package提供的功能的类型,当前package的许可证等等。我们应当总是至少包括当前package所支持的python版本,操作系统和许可证。注意此处定义的classifiers关键字所包含的信息应当符合PyPI的规定。
requires : 定义依赖哪些模块
install_requires: 指定了当前package所依赖的其他python类库。这些指定的python类库将会在本package被安装的时候一并被安装。
platforms: 程序适用的软件平台列表
keywords: 程序的关键字列表
include_package_data: 是否自动包含包内所有受版本控制(cvs/svn/git)的数据文件,默认True
entry_points: 用来支持自动生成cli命令

四、关键步骤

printdemo.py

def demo():
    print('print demo')

setup.py

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


setup(
    name='quantizer',
    version='1.0.0',
    description='Offline quantitative toolkit.',
    long_description='This kit can be applied on the edge or terminal equipment, \
    the model can be offline quantitative compression.\
    Note, this toolkit tied with hardware devices.',
    author='yoyo',
    author_email='cs_jaxu@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',
    },
    py_modules=['build_engine'],
    install_requires=['numpy>=1.14', 'tensorflow>=1.7'],
    python_requires='>=3',
    platforms='Linux'
)

制作wheel文件

python setup.py bdist_wheel
.
├── build
│   ├── bdist.linux-x86_64
│   └── lib
│       └── printdemo.py
├── dist
│   └── printdemo-1.0.0-py3-none-any.whl
├── printdemo.egg-info
│   ├── dependency_links.txt
│   ├── PKG-INFO
│   ├── requires.txt
│   ├── SOURCES.txt
│   └── top_level.txt
├── printdemo.py
└── setup.py

5 directories, 10 files

安裝wheel包

cd dist
pip install printdemo-1.0.0-py3-none-any.whl

测试wheel包

import printdemo
printdemo.demo()

执行结果

(tensorRT-efficientdet) yichao@yichao:~/桌面/生产环境$ python
Python 3.7.11 (default, Jul 27 2021, 14:32:16) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import printdemo
>>> printdemo.demo()
print demo