跳过正文

发布包到pypi

·275 字·2 分钟·
目录

很多人只用过别人写的包,那么有没有想过如何将自己的包发布出去让别人用

首先到pypi.org注册账户,然后生成一个Token,注意生成Token的页面不要关闭不要刷新,因为只显示一次,在Token下面会有一个说明,就是在你的用户目录下创建一个文件,然后把那些内容复制粘贴进去保存就行了。这样做是为了在上传的时候不用输入用户名和密码,防止403报错等等。 提示:Windows的用户目录就是C:\Users\zhangsan 这个路径,打开步骤就是C盘->用户->用户名

项目目录结构:

porject_example/
├── LICENSE
├── pyproject.toml
├── README.md
├── src/
│   └── pkg_name/
│       ├── __init__.py
│       └── example.py
└── tests/

构建工具
#

这里列出4个常见的构建工具,示例里面使用安装时常看到的setuptools,当然也根据个人喜好进行选择。 选择一个构建工具添加到pyproject.toml

setuptools

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

Hatchling

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

Flit

[build-system]
requires = ["flit_core>=3.2"]
build-backend = "flit_core.buildapi"

PDM

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"

requires是构建包所需的包列表。您不需要安装它们;像pip这样的构建前端会自动将它们安装在一个临时的、隔离的虚拟环境中,以便在构建过程中使用。 build-backend是前端将用于执行构建的 Python 对象的名称。

配置元数据
#

打开pyproject.toml并输入以下内容。更改name 以包含您的用户名;这确保您有一个唯一的包名称,不会与其他人按照本教程上传的包发生冲突。

[project]
name = "pkg_name"
version = "0.0.1"
authors = [
  { name="Zhang San", email="admin@gmail.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/zhangsan/porject_example"
"Bug Tracker" = "https://github.com/zhangsan/porject_example/issues"

name是您的包的分发名称。这可以是任何名称,只要它只包含字母、数字、.、_和-。它也不能已经在 PyPI 上使用。请务必使用您在本教程中的用户名更新此名称,因为这可确保您不会尝试上传与已存在名称相同的包。

version是包版本。有关版本的更多详细信息,请参阅版本说明符规范 。一些构建后端允许以其他方式指定它,例如从文件或 git 标签。

authors用于识别包的作者;您为每位作者指定姓名和电子邮件。您也可以maintainers以相同的格式列出。

description是包的简短单句摘要。

readme是包含包详细描述的文件的路径。这显示在 PyPI 的包详细信息页面上。README.md在这种情况下,描述是从(这是一种常见模式)加载的。项目元数据规范中还描述了一种更高级的表格形式 。

requires-python给出项目支持的 Python 版本。像pip这样的安装程序会回顾旧版本的包,直到找到一个具有匹配 Python 版本的包。

classifiers为 index 和pip提供一些关于您的包的额外元数据。在这种情况下,该包仅与 Python 3 兼容,根据 MIT 许可获得许可,并且独立于操作系统。您应该始终至少包括您的包适用于哪些 Python 版本、您的包在哪个许可下可用以及您的包将在哪些操作系统上运行。有关分类器的完整列表,请参阅 https://pypi.org/classifiers/

urls允许您列出任意数量的额外链接以显示在 PyPI 上。通常这可能是源代码、文档、问题跟踪器等。

有关可以在 表中定义的这些字段和其他字段的详细信息,请参阅项目元数据规范。[project]其他常见字段keywords用于提高可发现性以及 dependencies安装包所需的字段。 https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata

重点:已经发布过得版本号不能再次使用!否则会400报错。创建并上传成功的包名,即使你在pypi管理页面删除了,也不能再次使用!所以不要随意删除你已占用到的名称的项目,不然就只能更换包名了!

pyproject.toml 文件最终配置完成的示例:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"


[project]
name = "pkg_name"
version = "0.0.1"
authors = [
  { name="Zhang San", email="admin@gmail.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/zhangsan/porject_example"
"Bug Tracker" = "https://github.com/zhangsan/porject_example/issues"

创建 README.md
#

这个文件是包的说明文档,使用Markdown语法(不会的话花几分钟看看),内容包括项目介绍,安装,使用范例,开发人员,下载量,开源协议等等,不知道怎么写可以看看GitHub上其他项目是怎么写的,参考着写就行了。

创建许可证
#

上传到pypi的每个包都包含一个许可证,这是告诉使用这个软件包的用户需要遵守那些条款。 但是既然发布一个包总想着长期维护吧,所以在GitHub上创建仓库的时候会有一个选择许可证的下拉框,一般常用的是MIT和Apache2.0,区别是使用的时候一个是不署名,一个要署名。

生成分发档案
#

先升级PyPA到最新版本

py -m pip install --upgrade build

在项目根目录运行以下步骤的命令,也就是能看到pyproject.toml文件的位置

将项目进行打包

$ py -m build

上传分发档案
#

将自己的项目上传到pypi

$ py -m twine upload dist/*

安装你新上传的包
#

这个步骤和你安装其他包是一样的,打开pypi项目主页也会显示命令,复制粘贴安装就行了。 怎么导入包,使用包,这些都是基础知识,不多赘述了。

重要提示
#

以上是首次发布的步骤,但是你要更新版本号的话需要注意:

  1. 要在pyproject.toml里面修改版本号,必须是该项目在pypi上没有用过的版本号
  2. 重新构建前必须删除之前构建生成的所有文件,比如:dist文件夹,src文件夹下的*.egg-info文件夹

参考链接:

相关文章

更换pip源到国内镜像加速python pypi包的安装
·67 字·1 分钟
Python 资源大全中文版
·3437 字·17 分钟
Python学习资源
·8090 字·38 分钟