一、参考资料
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