首页
/ Python项目打包与分发:setup.py、pyproject.toml最佳实践指南 🚀

Python项目打包与分发:setup.py、pyproject.toml最佳实践指南 🚀

2026-02-06 05:10:17作者:董灵辛Dennis

想要让你的Python代码被更多人使用吗?Python项目打包与分发是每个开发者都需要掌握的关键技能!无论你是想发布到PyPI供全球开发者使用,还是想在团队内部分享代码,正确的打包方法都能让你的工作事半功倍。本文将为你详细解析setup.py和pyproject.toml两种方法,帮助你选择最适合的方案。

传统方法:setup.py详解

setup.py是Python打包的传统方式,它本质上是一个Python脚本,包含了项目的所有元数据信息。虽然setup.py需要三个必填字段:name、version和packages,但你可以添加更多详细信息来丰富你的项目描述。

setup.py核心配置示例

from distutils.core import setup
setup(
   name='pythonCheatsheet',  # 包名(在PyPI上必须唯一)
   version='0.1',  # 版本号
   packages=['pipenv',],  # 要包含的包列表
   license='MIT',  # 许可证类型
   long_description=open('README.txt').read(),  # 从文件读取描述
)

使用setup.py安装包非常简单:

python setup.py install

现代方法:pyproject.toml革命性改进

pyproject.toml是Python打包的现代标准,基于PEP-517、PEP-518和PEP-660规范,提供了一个统一、声明式的项目配置方式。

UV包管理器

pyproject.toml的主要优势

  • 声明式配置:所有项目元数据集中在一个文件中
  • 构建系统无关:支持setuptools、poetry、flit等多种后端
  • 无需代码执行:比setup.py更安全、更可预测
  • 标准化规范:遵循PEP标准,工具支持更好

基础pyproject.toml配置

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

[project]
name = "pythonCheatsheet"
version = "0.1"
description = "一个Python速查表包"
readme = "README.txt"
requires-python = ">=3.8"
license = {text = "MIT"}
authors = [
    {name = "你的名字", email = "your.email@example.com"}
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0",
    "black>=22.0",
]

现代包管理工具对比

Poetry:全面的依赖管理

Poetry是一个功能强大的Python项目管理和打包工具,它使用单个pyproject.toml文件替代了setup.pyrequirements.txtsetup.cfgMANIFEST.inPipfile

Poetry项目

Poetry核心命令

  • poetry new [项目名] - 创建新项目
  • poetry add [包名] - 添加依赖
  • poetry install - 安装所有依赖

UV:极速包管理器

UV是用Rust编写的革命性Python包管理器,提供了10-100倍的性能提升。

UV快速开始

# 安装UV
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建新项目
uv init my_project

# 添加依赖
uv add requests

# 在项目环境中运行命令
uv run python script.py

如何选择合适的打包方法

选择setup.py的情况

  • 维护传统项目
  • 需要精细控制打包过程
  • 兼容老版本Python

选择pyproject.toml的情况

  • 新建项目(推荐)
  • 追求现代标准和最佳实践
  • 需要更好的工具生态支持

实用打包工作流程

新项目开发流程

  1. 初始化项目:使用poetry newuv init
  2. 配置依赖:在pyproject.toml中指定
  3. 锁定版本:生成lock文件确保可重现性
  4. 构建发布:打包并上传到PyPI

依赖管理最佳实践

  • 明确区分生产依赖和开发依赖
  • 使用虚拟环境隔离项目
  • 定期更新依赖版本

常见问题与解决方案

setup.py常见问题

  • 包名冲突:在PyPI上检查名称是否可用
  • 版本管理:遵循语义化版本控制
  • 许可证选择:选择合适的开源许可证

总结:打包与分发的未来趋势

Python打包正在经历从setup.py到pyproject.toml的重大转变。现代工具如Poetry和UV让打包变得前所未有的简单高效。

关键要点

  • pyproject.toml是现代Python项目的首选
  • UV提供极速的包管理体验
  • Poetry提供全面的项目生命周期管理

无论你是Python新手还是经验丰富的开发者,掌握正确的打包方法都能显著提升你的开发效率。现在就开始实践,让你的代码走向世界吧!✨

登录后查看全文
热门项目推荐
相关项目推荐