如何将上传至PyPI
将 Python 程序(包)发布到 PyPI(Python Package Index)可以让其他人通过pip install your-package-name安装你的项目
🧰 一、准备工作
1. 项目结构示例
确保你的项目有如下基本结构(以mypackage为例):
mypackage/ ├── mypackage/ │ ├── __init__.py │ └── module.py ├─ README.md ├─ LICENSE ├─ pyproject.toml # 或 setup.py + setup.cfg(推荐使用 pyproject.toml) └─ tests/ # 可选自 Python 打包社区推荐以来,优先使用
pyproject.toml(PEP 621 标准)来定义元数据和构建配置。
📦 二、配置打包信息(使用pyproject.toml)
创建pyproject.toml文件,内容示例如下:
[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "mypackage" version = "0.1.0" description = "A short description of your package" readme = "README.md" license = {file = "LICENSE"} authors = [ {name = "Your Name", email = "you@example.com"}, ] classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] requires-python = ">=3.8" dependencies = [ "requests", # 你的依赖项 ] [project.urls] Homepage = "https://github.com/yourname/mypackage" Repository = "https://github.com/yourname/mypackage"如果你仍使用
setup.py,可以参考旧方法,但建议迁移到pyproject.toml。
🔧 三、构建分发包
安装构建工具:
pip install build在项目根目录运行:
python -m build这会生成dist/目录,包含.tar.gz(源码分发)和.whl(wheel 二进制分发)文件。
🔐 四、注册 PyPI 账号并获取 API Token
- 访问 https://pypi.org 注册账号。
- 进入 Account Settings → API tokens
- 创建一个API Token(建议为特定项目创建 scoped token,权限选 “Upload”)。
- 复制 token(形如
pypi-xxxxx),只显示一次,请妥善保存!
🚀 五、上传到 PyPI
安装上传工具:
pip install twine上传(使用 TestPyPI 测试可选)
(可选)先上传到 TestPyPI 测试:
twine upload --repository testpypi dist/*输入用户名:__token__
密码:你的 TestPyPI API Token(以pypi-开头)
然后可通过pip install -i https://test.pypi.org/simple/ mypackage测试安装。
正式上传到 PyPI:
1twine upload dist/*- 用户名:
__token__ - 密码:你在 PyPI 上创建的 API Token(不是登录密码!)
✅ 成功后,你的包就会出现在 https://pypi.org/project/mypackage/
🔄 六、后续更新版本
- 修改
pyproject.toml中的version(如0.1.1) - 重新运行
python -m build - 再次用
twine upload dist/*上传(PyPI 不允许覆盖同版本)
✅ 最佳实践建议
- 使用
.gitignore忽略dist/,build/,*.egg-info - 在 GitHub/GitLab 上托管源码,并链接到
project.urls - 编写清晰的
README.md(支持 Markdown) - 添加
LICENSE文件(如 MIT、Apache 2.0) - 使用
check-wheel-contents检查 wheel 合规性(可选)
