背景
当前要创建机器学习训练和预测算子榜单,要求打榜人员在保证效果不变的情况下,优化基础机器学习模型的训练和预测过程。例如,优化 LightGBM 库的 train 和 predict 两个阶段。
在和解决方案多次讨论后,最终将榜单的要求具体化,需要打榜人员提交一个 Python 库,通过该库可以导入一个机器学习模型包,这个包的基础功能和原生机器学习模型包的功能一样,效果如下所示。
import lightgbm_4pd as lgbm4pd
train_data = lgbm4pd.Dataset(X_train, y_train)
test_data = lgbm4pd.Dataset(X_test)
model = lgbmm.train(params, train_data)
model.save_model('model.txt')
model_reload = lgbm4pd.Booster('model.txt')
pred = model_reload.predict(test_data)为此,这两天去了解了下如何写一个 Python 库。
Python 库的基本组件
Python 库的基本组件可以简化为如下几个部分,分别是 README 说明文档、setup.py 构建脚本、requirements.txt 依赖库以及代码本身。
├── lightgbm_4pd 代码目录
│ ├── __init__.py
│ └── func.py
├── requirements.txt 依赖库
├── setup.py 构建脚本
└── README.md 说明文档
其中,setup.py 定义了包的元数据和分发配置,如库的名称、版本、作者信息、依赖等等。一个简化的构建脚本可以参考如下:
from setuptools import setup, find_packages
with open('requirements.txt') as f:
required = f.read().splitlines()
setup(
name='myPackage', # 包名
version='0.0.1', # 版本号
description='An example Python package', # 描述
author='My Name', # 作者
author_email='my.email@example.com', # 作者邮箱
# packages = ['lightgbm_4pd'], # 手动配置包含的包
packages=find_packages(), # 自动发现并包含所有包和子包
install_requires=required
)打包 Python 库
在 setup.py 同级路径下执行下面命令。
python3 setup.py sdist bdist_wheel在 Python 项目中,sdist 和 bdist_wheel 是用来构建不同类型的分发包的命令:
-
sdist(Source Distribution): 这个命令会生成一个源代码包,通常是一个.tar.gz文件(在 Windows 上可能是.zip文件)。这个包含了源代码以及包的元数据。当其他人下载源代码包时,他们需要有相同的 Python 环境,并且可能需要编译依赖的二进制扩展。源代码包是通用的,可以在支持相应 Python 版本的任何系统中安装。 -
bdist_wheel(Built Distribution): 这个命令生成的是一个.whl文件,即轮子(Wheel)包。Wheel 是一种预先构建的、更快安装的分发包,它不包括项目的源代码,而是包括已经编译的扩展模块和字节码文件。Wheel 包是一个更现代的分发格式,可以提供更加快速的安装体验,因为它避免了在安装时编译代码的步骤。然而,因为轮子包是预先构建的,所以它们可能是特定于平台(Windows、macOS、Linux)的。
发布到 pip 源
略。
安装 Python 库
如果想要安装 Python 库,有几种方式。
方法一,在 setup.py 同级路径下直接安装
python setup.py install方法二,使用 .tar.gz 文件安装
pip install xxxx.tar.gz方法三,使用 .whl 文件安装
pip install xxxx.whl方法四,直接通过包名从 pypi 源上安装
pip install myPackage -i {pip-source}Backlinks:
LIST FROM [[]]