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

article/2025/8/29 2:18:39

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

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.md

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

pyproject.toml

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

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

[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"

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

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

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

pyproject.toml文件的方法

它在pypi上是这样显示的。

setup.py(可选)

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

#!/usr/bin/env pythonfrom distutils.core import setupsetup(name='heframework',version='0.2.10',description='本次更新:修复list模块对中文的支持',author='heStudio',author_email='hestudio@hestudio.net',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/ 注册一个账号用于测试你的安装包。你需要验证你的邮箱。然后上传进行测试。这里我已经尝试过了,如果你需要看具体如何操作,请阅读正式上传的部分(在下面)

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

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

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

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

正式上传到pypi

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

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

py -m twine upload dist\*

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

pip install example

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

后记

我的博客 https://www.hestudio.net


http://chatgpt.dhexx.cn/article/3ODjUKMj.shtml

相关文章

5分钟学会本地Pypi源搭建

前言 通常我们在下载 python 包时都会选择清华源或者阿里源。但是当我们的开发环境无法访问外网的时候,就需要搭建私有源。今天我们就一起花 5 分钟时间学习如何搭建一个本地私有源。 工具选择 搭建本地私有源有很多种方案,包含但不限于 pypiserver&…

Python!Python!

2019独角兽企业重金招聘Python工程师标准>>> 条件分支: if 条件: 条件为真 (所有缩进都会执行) else: 条件为假 While循环 while 条件: 条件为真(true)执行动作 for..in递归使用序列对象中的每个项目 and逻辑操作符 and逻辑操作符可以将任意表达式链接在一起&#x…

已解决Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pip/: There was a problem confirming

已解决(pip升级报错) WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Requirement already satisfied: pip in …

python--pip常用命令、国内PyPI镜像、使用pip安装第三方库

让我们来看看具体内容&#xff1a; 一. pip常用命令 列出已安装的包&#xff1a; pip freeze or pip list 导出requirements.txt&#xff1a; pip freeze ><目录>/requirements.txt 在线安装包&#xff08;模块库&#xff09;&#xff1a; pip install <包名>…

Python 库 PyPI 危机!

据 BleepingComputer 报道&#xff0c;Python 官方软件包存储库 PyPI 遭受了黑客攻击&#xff0c;攻击者通过注入大量垃圾邮件包的形式发起了洪水攻击&#xff0c;这些垃圾邮件及软件包通过采用电影&#xff0c;电视节目名称来命名&#xff0c;有些还包含了年份、在线、免费等字…

【Python包管理系列1】python打包发布到PyPI全过程(入门版)

文章目录 目的准备知识PyPIPyPAsetuptoolsbuildtwine 实战过程总结 目的 如果发布一个python包到pypi上&#xff0c;共他人使用&#xff0c;本文试图讲清楚。 准备知识 PyPI 官网地址&#xff1a;https://pypi.org/ 全称Python Package Index&#xff08;Python包索引&#…

PyPy

pypy 原理 pypy 原理为何 PyPy 是趋势&#xff1f;即时编译: PyPy和它的未来PyPy is Hard to Understand结尾总之&#xff1a; GIL&#xff0c;即全局解释器锁&#xff08;Global Interpreter Lock&#xff09;&#xff0c;是计算机程序设计语言解释器用于同步线程的工具&…

Linux系统安装DB2数据库详解

1、上传DB2安装文件 将 DB2 安装文件及 DB2 补丁文件上传到服务器上 打开终端对其进行解压 2、安装前注意事项 &#xff08;1&#xff09;要求服务器磁盘空间至少为1000M &#xff08;2&#xff09;安装之前不要创建 db2inst1、db2fenc 等用户 &#xff08;3&#xff09;db…

windows下db2创建数据库

windows下db2创建数据库 1.找到命令行dbcmd 打开电脑&#xff0c;进入电脑操作系统&#xff0c;使用快捷键组合WINR键可以直接打开运行&#xff0c;输入dbcmd命令行&#xff0c;即可直接打开db2命令行dbcmd。 2.使用db2start启动db2数据库 通过以上方法&#xff0c;在电脑…

db2数据库(db2数据库安装)

db2是什么&#xff0c;它和oracle有什么本质的区别&#xff1f; oracle和SQL SERVER都是用SQL语句可以编写数据库&#xff0c;但语法有区别&#xff0c;我楼上说的SQL SERVER说不稳定&#xff0c;也不一定吧&#xff5e;这里我说的都是正版&#xff0c;不过ORACLE确实是现在企业…

JDBC连接DB2数据库

前言 分享一个工作上遇到的问题&#xff0c;使用JDBC连接DB2数据库&#xff0c;我这里使用的是Gradle&#xff0c;我发现网上使用Gradle的太少了&#xff0c;大部分使用的是maven&#xff0c;不论使用哪一个&#xff0c;都建议下载jar包到本地&#xff0c;使用手动添加进项目里…

【windows版本】 db2数据库安装与使用

0.目录 1.安装DB2数据库1.创建数据库2. 配置链接参数3.工具链接4. 参考5.其他 说句真心话&#xff0c;真TMD讨厌IBM的软件&#xff0c;IBM的软件下载真是TMD不容易。要不是公司项目需求&#xff0c;谁TMD还喜欢用IBM的软件&#xff0c;真气人。 本文的目的&#xff1a; 1&#…

DB2数据库基本概念

http://db365.net/home.php?modspace&uid19鉴于CSDN无故删除博文&#xff0c;本博客不再更新&#xff0c;暂时迁至http://www.db365.net 1 DB2数据库基本概念 1.1数据库对象 关键的数据库对象包括&#xff1a;实例、数据库、节点组、表、视图、索引、模式、系统目录表。…

DBeaver连接db2数据库

DBeaver工具安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ruEF0dDkbYDy02-aYxuj8w 密码&#xff1a;l0t4 db2驱动包: 链接&#xff1a;https://pan.baidu.com/s/1OaSHGi7toIhKCk8fNEv-CQ 密码&#xff1a;tazm 安装好DBeaver工具后 1、新建连接 2、连接…

DB2数据库

DB2是IBM公司研制的一种关系型数据库系统&#xff0c;它主要应用于大型应用系统&#xff0c;具有很强的海量数据处理能力&#xff0c;具有较好的可伸缩性 教学地址 可支持从大型机到单用户环境&#xff0c;包括DB2工作组版&#xff08;DB2Workgroup Edition&#xff09;、DB2企…

socket绑定的ip为INADDR_ANY 的意义 htonl(INADDR_ANY)(0.0.0.0所有地址、不确定地址、任意地址)(htonl和htons区别)

INADDR_ANY 表示监听0.0.0.0地址&#xff0c;socket只绑定端口&#xff0c;不绑定本主机的某个特定ip&#xff0c;让路由表决定传到哪个ip&#xff08;0.0.0.0地址表示所有地址、不确定地址、任意地址&#xff09;&#xff08;一台主机中如果有多个网卡就有多个ip地址&#xff…

ntohs, ntohl, htons,htonl的比较和详解

假设在x86平台上,有一个int型变量,在内存中的内部由低到高分别是:0x12,0x34,0x56,0x78当通过网络发送该数据时,正确的发送顺序是 0x78,0x56,0x34,0x12 X86 系列 CPU都是 little&#xff0d;endian 的&#xff0c;所以int 型变量值为 0x78563412, 网络发送数据时&#xff0c;采…

c语言中htonl函数,htonl()函数学习

今天在网上看到一篇关于htonl()函数的解释,感觉有道理,贴过来大家一起学习! htonl就是把本机字节顺序转化为网络字节顺序 h---host 本地主机 to 就是to 了 n ---net 网络的意思 l 是 unsigned long 所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低&#x…

ntohl()、htonl()函数

ntohl()将一个无符号长整形数从网络字节顺序转换为主机字节顺序&#xff0c; ntohl()返回一个以主机字节顺序表达的数。ntohl()返回一个以主机字节顺序表达的数。 htonl()将主机数转换成无符号长整型的网络字节顺序。本函数将一个32位数从主机字节顺序转换成网络字节顺序。 #…

Linux网络编程笔记 - 03 UDP - 主机字节序转换网络字节序函数

只要数据大于2个字节,发数据时一定要转成大端。 htons:一般用于转换端口号,short,2字节 htonl:一般用于转换ip,long,4字节 ntohl:将网络大端数据转换成主机可以识别的顺序,long = 4字节 ntohs:将网络大端数据转换成主机可以识别的顺序,short = 2字节 book@100a…