You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python包开发中不同setup.py写法的差异及选型咨询

两种setup.py写法的核心差异

两者本质是适用场景不同的两套构建体系:

  • 第一种是标准setuptools原生方案:
    基于官方setuptools库的原生setup函数和find_packages工具开发,是Python包分发的通用基础方案,写法为声明式配置,逻辑简单,专门为无编译需求的纯Python包设计,不需要处理复杂的系统依赖适配。对应代码就是你给出的简洁版本:
    from setuptools import setup, find_packages
    
    setup(name='mypackage',
          version='0.1', 
          packages=find_packages()
    )
    
  • 第二种是numpy.distutils扩展方案:
    这是numpy为了适配科学计算包的编译需求,在setuptools基础上封装的扩展构建体系,Scipy这类包含大量C/Fortran扩展、需要对接BLAS/LAPACK等系统级数值依赖的包才会用到,和标准方案的核心区别有3点:
    1. 用Configuration对象管理配置,支持批量添加子包、编译目标、数据文件,降低多子包大型项目的配置成本
    2. 内置系统依赖探测能力,示例中的get_info("lapack_opt")就是自动探测本机LAPACK库的路径、编译参数,不需要开发者手动适配不同平台的依赖位置
    3. 使用numpy重写的setup函数,会自动处理扩展编译的平台适配、编译链参数配置,是标准setuptools功能的超集

自有包的写法选型建议

你只需要根据自己的包的属性判断即可:

  • 如果你开发的是普通纯Python包,没有需要编译的C/C++/Fortran扩展,也不需要做复杂的系统依赖探测,直接选择第一种标准setuptools写法即可,当前更推荐配合pyproject.toml做全声明式配置,甚至可以完全不用编写setup.py文件
  • 只有当你开发的是数值计算类包,需要编译Fortran/C扩展,且要对接BLAS/LAPACK这类科学计算系统依赖时,才需要用到第二种基于numpy.distutils的写法,普通业务场景完全没必要引入额外的复杂度

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:54:03