Python包构建疑问:setup.cfg依赖确定与工具选择
Python包开发常见问题解答
问题1:setup.cfg中install_requires的依赖确定及最佳实践
核心逻辑
install_requires仅需列出你的包运行时必须依赖的第三方包,不需要包含requirements.txt里的所有内容。两者定位完全不同:
requirements.txt是开发环境专用,通常包含运行依赖、开发测试类依赖(如pytest、black),甚至会锁定精确版本号,目的是保证开发团队环境一致。install_requires是给最终用户的配置,用户安装你的包时,pip会自动拉取这些依赖,只需要包含代码运行时直接import的包即可。
最佳实践
- 只列必需依赖:比如你的代码明确用到
pandas,就把它加进去;开发测试时用的工具包,绝对不要放在这里。 - 合理设置版本范围:避免写死精确版本(如
pandas==1.5.3),建议用宽松约束(如pandas>=1.0,<2.0),既保证兼容性,又不给用户环境造成过度限制。 - 拆分非核心依赖:把开发、测试、文档相关的依赖单独拆分,比如在
setup.cfg里用extras_require:
或者单独维护[options.extras_require] dev = pytest>=7.0 black>=23.0requirements-dev.txt,供开发人员自行安装。 - 禁止直接复制requirements.txt内容:否则会把你的开发依赖强制安装给所有用户,造成不必要的依赖冗余。
问题2:最新Python包构建工具推荐
Python官方列出的Hatchling、setuptools、Flit、PDM均为合规工具,不同工具适配不同场景,当前主流推荐如下:
Hatchling:
现代包构建的首选之一,完全基于pyproject.toml标准,内置虚拟环境管理、包构建、发布全流程,配置简洁直观,支持多版本Python测试,功能全面且开箱即用,适合绝大多数新包开发场景。Flit:
轻量级工具,专注纯Python包的快速构建,配置极简,仅需pyproject.toml就能完成核心配置,无多余复杂功能,适合开发结构简单的小型Python库。PDM:
集成包构建、依赖管理、虚拟环境管理的一站式工具,体验类似前端的npm/yarn,支持现代Python包标准,适合既开发包又管理项目依赖的场景,尤其适配大型项目。setuptools:
老牌工具,兼容性极强,支持几乎所有Python版本和复杂构建需求(如C扩展打包),如果维护遗留项目或需要高度定制化构建流程,仍可选用,但新项目更推荐前三者。
内容的提问来源于stack exchange,提问作者Violet
相关产品推荐
相关产品推荐

