Python包发布到PyPI的实现步骤

作者:

文章目录
  • # 安装构建和上传工具 pip install –upgrade build twine setuptools wheel # 验证安装 python -m build –version twine –version
  • 推荐先在 TestPyPI 测试: # 注册 TestPyPI 账号 # 访问 https://test.pypi.org # 上传到测试环境 twine upload –repository-url https://test.pypi.org/legacy/ dist/* # 从测试环境安装 pip install –index-url https://test.pypi.org/simple/ your-package-name
  • 更新 pyproject.toml 中的版本号 确保 README.md 内容完整且格式正确 验证所有依赖项已正确声明 测试本地安装:pip install dist/your-package-*.whl 检查包名在 PyPI 上的可用性 准备好 PyPI API Token
  • 语义化版本控制: 主版本.次版本.修订版本 不兼容的 API 修改:主版本号递增 向下兼容的功能性新增:次版本号递增 向下兼容的问题修正:修订版本号递增 发布流程: # 1. 更新版本号 # 编辑 pyproject.toml: version = “0.1.1” # 2. 提交更改 git add pyproject.toml git commit -m “Bump version to 0.1.1” git tag v0.1.1 # 3. 构建和发布 rm -rf dist/ build/ *.egg-info/ python -m build twine upload dist/*
  • 通过本指南,你可以: 正确配置 pyproject.toml 文件 使用现代工具链构建 Python 包 安全地将包发布到 PyPI 解决常见的发布问题 发布后,用户可以通过 pip install your-package-name 安装你的包,让你的代码为社区所用! 本文基于实际项目经验整理,适用于 Python 3.7+ 和现代打包工具链。到此这篇关于Python包发布到PyPI的实现步骤的文章就介绍到这了,更多相关Python包发布到PyPI内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 如何将Python包发布到PyPI的完整指南 python打包发布pypi及更新全部流程 将自己的Python包发布到PyPI上的教程详解 Python实现在PyPI上发布自定义软件包的方法详解 用Python将库打包发布到pypi Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解 将python包发布到PyPI和制作whl文件方式
  • 目录
    • 📦 项目配置
      • 基础 pyproject.toml 配置
      • 完整配置说明
    • 🛠️ 工具安装
      • 🔨 构建流程
        • 1. 清理构建环境
        • 2. 构建包
        • 3. 验证包
      • 🚀 发布到 PyPI
        • 1. 准备 PyPI 账号
        • 2. 上传包
        • 3. 测试安装
      • 🧪 测试环境发布
        • 🐛 常见问题解决
          • 1. 元数据缺失错误
          • 2. 包名冲突
          • 3. 版本冲突
        • 📋 发布检查清单
          • 🔄 版本管理最佳实践
            • 💡 高级配置
              • 包含数据文件
              • 可选依赖项
              • 多平台脚本
            • 🌟 总结

              本文将详细介绍如何使用 pyproject.toml 配置将 Python 包发布到 PyPI,包括完整的配置示例、构建命令和故障排除方法。

              [build-system]
              requires = ["setuptools>=61.0", "wheel"]
              build-backend = "setuptools.build_meta"
              
              [project]
              name = "your-package-name"
              version = "0.1.0"
              authors = [
                  {name = "Your Name", email = "you@example.com"}
              ]
              description = "A short description of your package"
              readme = {file = "README.md", content-type = "text/markdown"}
              license = {text = "MIT"}
              classifiers = [
                  "Programming Language :: Python :: 3",
                  "License :: OSI Approved :: MIT License",
                  "Operating System :: OS Independent",
              ]
              requires-python = ">=3.7"
              dependencies = [
                  "click>=8.1",
              ]
              
              [project.urls]
              Homepage = "https://github.com/yourusername/your-package"
              
              [project.scripts]
              your-command = "your_package.module:main"
              
              [tool.setuptools]
              packages = {find = {}}
              

              关键字段说明:

              • name: PyPI 包名(使用连字符 -
              • version: 遵循语义化版本控制
              • readme: 支持 Markdown 或 reStructuredText
              • classifiers: 帮助用户找到你的包
              • requires-python: 指定 Python 版本兼容性

              包名约定:

              • PyPI 包名:your-package-name(使用连字符)
              • 导入模块名:your_package(使用下划线)
              • 用户通过 import your_package 导入

              # 安装构建和上传工具
              pip install --upgrade build twine setuptools wheel
              
              # 验证安装
              python -m build --version
              twine --version
              

              # 清理旧的构建文件
              rm -rf dist/ build/ *.egg-info/
              

              # 构建源码包和 wheel 包
              python -m build
              
              # 构建结果
              ls dist/
              # your-package-name-0.1.0.tar.gz
              # your-package-name-0.1.0-py3-none-any.whl
              

              # 检查元数据
              twine check dist/*
              
              # 查看包内容
              unzip -l dist/*.whl | head -10
              

              • 注册 PyPI 账号
              • 在账号设置中创建 API Token
              • 作用域选择 “Entire account (all projects)”

              # 上传到正式 PyPI
              twine upload dist/*
              
              # 使用 API Token 认证
              # 用户名: __token__
              # 密码: pypi-xxxxxxxxxxxxxxxxxxxx
              

              # 验证发布成功
              pip install your-package-name
              

              推荐先在 TestPyPI 测试:

              # 注册 TestPyPI 账号
              # 访问 https://test.pypi.org
              
              # 上传到测试环境
              twine upload --repository-url https://test.pypi.org/legacy/ dist/*
              
              # 从测试环境安装
              pip install --index-url https://test.pypi.org/simple/ your-package-name
              

              ERROR: InvalidDistribution: Metadata is missing required fields: Name, Version
              

              解决方案:

              # 升级 twine 到最新版本
              pip install --upgrade twine
              
              # 使用模块方式运行
              python -m twine check dist/*
              

              HTTPError: 400 Client Error: The name 'your-package' is already in use
              

              解决方案:

              • pyproject.toml 中修改 name 字段
              • 确保包名在 PyPI 上唯一

              HTTPError: 400 Client Error: File already exists
              

              解决方案:

              • pyproject.toml 中更新 version 字段
              • 删除已上传的错误版本(通过 PyPI 管理界面)

              • 更新 pyproject.toml 中的版本号
              • 确保 README.md 内容完整且格式正确
              • 验证所有依赖项已正确声明
              • 测试本地安装:pip install dist/your-package-*.whl
              • 检查包名在 PyPI 上的可用性
              • 准备好 PyPI API Token

              1. 语义化版本控制:

                • 主版本.次版本.修订版本
                • 不兼容的 API 修改:主版本号递增
                • 向下兼容的功能性新增:次版本号递增
                • 向下兼容的问题修正:修订版本号递增
              2. 发布流程:

                # 1. 更新版本号
                # 编辑 pyproject.toml: version = "0.1.1"
                
                # 2. 提交更改
                git add pyproject.toml
                git commit -m "Bump version to 0.1.1"
                git tag v0.1.1
                
                # 3. 构建和发布
                rm -rf dist/ build/ *.egg-info/
                python -m build
                twine upload dist/*
                

              [tool.setuptools]
              include-package-data = true
              
              [tool.setuptools.package-data]
              "your_package.data" = ["*.json", "*.txt"]
              

              [project.optional-dependencies]
              dev = ["pytest>=6.0", "black"]
              gui = ["tkinter", "pyqt5"]
              

              [project.scripts]
              my-cli = "my_package:main"
              
              [project.gui-scripts]
              my-gui = "my_package.gui:main"
              

              通过本指南,你可以:

              • 正确配置 pyproject.toml 文件
              • 使用现代工具链构建 Python 包
              • 安全地将包发布到 PyPI
              • 解决常见的发布问题

              发布后,用户可以通过 pip install your-package-name 安装你的包,让你的代码为社区所用!

              本文基于实际项目经验整理,适用于 Python 3.7+ 和现代打包工具链。到此这篇关于Python包发布到PyPI的实现步骤的文章就介绍到这了,更多相关Python包发布到PyPI内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

              您可能感兴趣的文章:

              • 如何将Python包发布到PyPI的完整指南
              • python打包发布pypi及更新全部流程
              • 将自己的Python包发布到PyPI上的教程详解
              • Python实现在PyPI上发布自定义软件包的方法详解
              • 用Python将库打包发布到pypi
              • Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
              • 将python包发布到PyPI和制作whl文件方式

              站内搜索