我是靠谱客的博主 勤奋项链,最近开发中收集的这篇文章主要介绍一文了解自定义Python包/库自定义Python 包,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

自定义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
    Test python package
  • Python package
    Python package
  • GitHub Actions CI/CD 工作流程发布包分发版本
     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.

引用

  1. https://packaging.python.org/en/latest/tutorials/packaging-projects/
  2. https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/
  3. https://choosealicense.com/

最后

以上就是勤奋项链为你收集整理的一文了解自定义Python包/库自定义Python 包的全部内容,希望文章能够帮你解决一文了解自定义Python包/库自定义Python 包所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部