概述
自定义Python包/库
- 自定义Python 包
- Demo
- 为什么需要?
- 怎么做
- 需要提前更新的命令
- 首先明确一个包的文件结构
- 通过demo展示的工具包一步创建所需的包文件
- 生成发布文件
- 上传发布文件到TestPyPl
- 安装刚上传的包
- 上传发布文件到PyPl
- 引用
2023年2月6日更新:
自定义Python 包
本文将详细介绍如何自定义一个Python的工具包(package) ,并将其上传到Test Python package进行测试,测试完成后发布至Python package并通过pip install命令进行加载。最后使用 GitHub Actions CI/CD 工作流程发布包分发版本。
Demo
- Test python package
- Python package
- GitHub Actions CI/CD 工作流程发布包分发版本
为什么需要?
在开发过程中,常常会根据问题需要提取出对应的函数,这些函数除了通常还可以用在其他项目中,也可以给团队中其他成员使用,如果使用copy&paste办法,版本控制跟不上,而且效率低。因此可以将工具包上传到Python package Index(Pypi),这样通过pip install的方式下载包,即可实现自定义工具包。
怎么做
需要提前更新的命令
// Windows
py -m pip install --upgrade pip
py -m pip install --upgrade build
//Unix / macOS
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build
首先明确一个包的文件结构
在这里我们可以手动创建,即按照以下目录一步一步创建,也可以通过工具包创建。
packaging_tutorial/
├── LICENSE
├── pyproject.toml
├── README.md
├── src/
│ └── example_package_YOUR_USERNAME_HERE/
│ ├── __init__.py
│ └── example.py
└── tests/
上述为一个基本的包结构,接下来我会讲解其具体的含义以及我们应该在其中写什么。
- __init__.py 表示将目标作为包导入,可以为空
- example.py 是本包的一个例子模块,后面可以改为任何名称,在这里我们写上一个简单的函数,后面会讲述如何通过包调用这个函数。
def add_one(number):
return number + 1
- LICENSE 许可证,这会告诉安装本包的用户使用此软件包的条款,如不可修改,不可用于商业用途等等,常见的许可证案例可参考本链接。
- pyproject.toml 告诉“前端”构建工具(如 pip)后端工具如何为此项目创建分布包。
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.7"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[project.urls]
"Homepage" = "https://github.com/pypa/sampleproject"
"Bug Tracker" = "https://github.com/pypa/sampleproject/issues"
- requires 是构建包所需的包列表
- build-backend 是前端将用于执行构建的 Python 对象的名称
- name 是你的包的分发名称,这里的名称要与文件结构中src目录下的文件夹名称相同
- version 定义包的版本,后面在更新包会用到,如新增了一些函数,需要更新包,可以增加版本号实现更新
- project.urls 定义包的主页,可不写
通过demo展示的工具包一步创建所需的包文件
// 创建一个空文件夹,可以为任何名字 (Windows下可以手动创建)
mkdir package_test
// 下载工具包
pip install zhijie_toolbox
// 展示工具包信息
pip show zhijie_toolbox
// 在该目录下创建test.py
import os
current_path = os.path.dirname(os.path.abspath(__file__))
from zhijie_toolbox import toolbox
toolbox.create_package_template(current_path, project_name = "test_project")
// 运行脚本
python test.py
结果:会在test.py同目录下创建所需要的包文件,后面可以删除test.py
在src/test_project下的example.py中写入
def add_one(number):
return number + 1
生成发布文件
下一步是为包生成分发包。 这些是上传到 Python Package Index 的档案,可以通过 pip 安装。
现在从 pyproject.toml 所在的同一目录运行此命令:
// windows
py -m build
// Unix/macOS
python3 -m build
此命令应输出大量文本,完成后应在 dist 目录中生成两个文件:
dist/
├── test_project-0.0.1-py3-none-any.whl
└── test_project-0.0.1.tar.gz
tar.gz 文件是源代码分发,而 .whl 文件是构建的分发。
上传发布文件到TestPyPl
需要做的第一件事是在 TestPyPI 上注册一个帐户,这是用于测试和实验的包索引的一个单独实例。转到 https://test.pypi.org/account/register/ 并完成该页面上的步骤。 在能够上传任何包裹之前,还需要验证的电子邮件地址。当然也可以直接上传到PypI上,如果想直接上传到Pypl上,请跳过。
要安全地上传项目,需要一个 PyPI API 令牌。 在 https://test.pypi.org/manage/account/#api-tokens 创建一个,将“范围”设置为“整个帐户”。
注册完毕并且获取令牌后(注意生成令牌的时候要copy下来,它只会出现一次),下面需要安装 twine用于上传我们写的包
//Windows
py -m pip install --upgrade twine
//Unix/macOS
python3 -m pip install --upgrade twine
安装后,运行 twine 以上传 dist 下的所有档案:
//Windows
py -m twine upload --repository testpypi dist/*
//Unix/macOS
python3 -m twine upload --repository testpypi dist/*
username输入__token__ 密码输入之前复制的token.
上传后,应该可以在 TestPyPI 上看到对应的包; 例如:https://test.pypi.org/project/test_project。
安装刚上传的包
可以使用 pip 安装此包并验证它是否有效。
//Windows
py -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
//Unix/macOS
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
可以通过导入包来测试它是否已正确安装。
>>>from test_project import example
>>>example.add_one(2)
3
上传发布文件到PyPl
生成发布文件的命令不变,使用twine上传的命令改为:
//Windows
py -m twine upload dist/*
//Unix/macOS
python3 -m twine upload dist/*
这里的username也为__token__,密码需要重复和TestPyPl相同的步骤生成对应的token.
引用
- https://packaging.python.org/en/latest/tutorials/packaging-projects/
- https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/
- https://choosealicense.com/
最后
以上就是勤奋项链为你收集整理的一文了解自定义Python包/库自定义Python 包的全部内容,希望文章能够帮你解决一文了解自定义Python包/库自定义Python 包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复