跳至主要內容

如何构建Python软件包并上传到Pypi

undefined...PythonPythonPypi约 1251 字大约 4 分钟

因为最近在做Python包,所以也了解了一下这个。这里我把我自己的学习经验写出来,如果哪里写的不好也请大家提出来。本文的内容大多数都来自 Packaging Python Projects - Pypi open in new window,我根据我的理解进行描述一下。

Pypi的文档截图


演示配置

  • 操作系统:Windows 10 22H2
  • Python环境:Python 3.11.1
  • pip版本:22.3.1

配置环境

需要的工具:build(构建),twine(上传)

build 的安装方法

py -m pip install --upgrade build

twine的安装方法

py -m pip install --upgrade twine

写配置文件

readme.mdopen in new window

这个可以是任意内容,但必须要遵守Markdown格式open in new window,这个文件实际在pypi显示出来的效果是这样的。

pyproject.toml

这个文件用于告诉pip这个包的一些相关信息,如作者,描述文件等。

官方文档给出的示例是这样的

[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
  { name="Example Author", email="[email protected]" },
]
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"

或者你可以参考一下我的项目中的是怎么写的。

这里 翻译 讲解一下各项的意义

  • name是包的分发名称。这可以是任何名称。
  • version是包版本。有关版本的更多详细信息,请参阅版本说明符规范open in new window。一些构建后端允许指定它使用另一种方式,例如从文件或 git 标签。
  • authors用于标识包的作者。您指定一个名称,以及每位作者的电子邮件。
  • description是包的简短、一句话的摘要。
  • readme是显示在 PyPI 上的包详细信息页面上的描述文件。项目元数据规范open in new window中还描述了更高级的表形式。
  • requires-python提供您的项目支持的 Python 版本。像 pip 这样的安装程序会回顾旧版本的包,直到找到具有匹配 Python 版本的包。
  • classifiers为索引和点提供一些额外的元数据 关于您的包裹。在官方示例的这种情况下,该包仅兼容 Python 3,根据 MIT 许可证获得许可,并且独立于操作系统。你应该始终至少包括您的软件包适用于哪个版本的 Python, 您的软件包在哪个许可证下可用,以及哪些操作系统可以让您的软件包正常工作。有关classifiers的完整列表,请参阅 https://pypi.org/classifiers/。open in new window
  • urls允许您列出任意数量的额外链接以在 PyPI 上显示。 通常,这可能是针对源,文档,问题跟踪器等。

pyproject.toml文件的方法

它在pypi上是这样显示的。

setup.pyopen in new window(可选)

如果你的项目包含多个文件夹,你可以使用它进行配置。这个是我的项目的文件,我提供出来作为示例。

#!/usr/bin/env python

from distutils.core import setup

setup(name='heframework',
      version='0.2.10',
      description='本次更新:修复list模块对中文的支持',
      author='heStudio',
      author_email='[email protected]',
      url='https://gitee.com/hestudio-framework/main-windows/',
      packages=['src',""],
     )


其中,name, version, description, author, author_emailpyproject.toml一致,url为你的项目的主页。

packages用元组表示你的项目所包含的文件夹,在我的示例中,我所包含的文件夹从左到右依次是src文件夹和项目根目录。在这个文件中,我们用空白项(如我的示例中的packages的第二个)表示根目录。

构建项目

我们已经在前面安装过了工具和写了配置文件,这个时候就可以开始构建项目了。

使用以下命令构建。

py -m build

当出现 Successfully 的时候,就代表项目构建成功。此时,你的项目文件夹内会生成dist文件夹,这个文件夹内就是你构建的文件。

上传项目

上传到testpypi测试

你需要在 https://test.pypi.org/account/register/open in new window 注册一个账号用于测试你的安装包。你需要验证你的邮箱。然后上传进行测试。这里我已经尝试过了,如果你需要看具体如何操作,请阅读正式上传的部分(在下面)

py -m twine upload --repository testpypi dist\*

然后通过以下命令进行安装

py -m pip install -i https://test.pypi.org/simple/  example

其中example是你的项目的名称,它应该为上文的name的值。

正式上传到pypi

是的,也就是通过我们熟知的pip安装。

首先你需要注册一个pypiopen in new window账号,并验证你的邮箱。pypi账号和testpipy账号是截然不同的两个体系。
然后通过以下命令上传。

py -m twine upload dist\*

最后,我们直接安装就可以。

pip install example

其中example是你的项目的名称,它应该为上文的name的值。

上次编辑于:
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3