1. 项目背景与核心问题
Python打包工具链的演进一直是开发者社区的热门话题。最近在重构一个老项目时,我遇到了一个经典抉择:已经配置了pyproject.toml的情况下,是否还需要保留传统的setup.py文件?这个问题看似简单,实则涉及Python打包生态系统的深层变革。
现代Python打包工具(如pip和build)确实支持直接读取pyproject.toml进行构建,但实际项目中我们仍会看到两种配置文件并存的情况。这种并存现象背后既有历史兼容性考量,也有功能覆盖度的现实因素。通过对比实验和社区规范研究,我发现不同场景下的最佳实践其实存在显著差异。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 配置文件功能对比
2.1 pyproject.toml的核心能力
PEP 518引入的pyproject.toml标志着Python打包的现代化转型。这个TOML格式的文件主要承担三大职能:
-
构建系统声明:通过
[build-system]段指定构建依赖,例如:toml复制[build-system] requires = ["setuptools>=61.0.0", "wheel"] build-backend = "setuptools.build_meta" -
项目元数据:在
[project]段定义包的基础信息(PEP 621标准):toml复制[project] name = "my_package" version = "0.1.0" dependencies = [ "requests>=2.25.0", "numpy>=1.20.0" ] -
工具配置中心:为black、isort等工具提供统一配置入口:
toml复制[tool.black] line-length = 88 target-version = ["py38"]
2.2 setup.py的传统作用
传统的setup.py作为Python脚本,具有动态生成配置的独特优势:
python复制from setuptools import setup
import os
