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

如何借助setuptools以编程方式获取setup.py的packages列表(无需正则)

问题

给定如下setup代码:

setup(
  packages=['foo', 'bar'],
  ...
)

请问是否可以借助setuptools工具,无需使用正则表达式,以编程方式获取其中的packages列表?

回答

可以实现,无需正则解析代码文本,借助setuptools及Python的函数重写机制就能做到,具体方式如下:

  • 拦截setup函数调用捕获参数:这是最直接的方案,通过临时替换setup函数,在它被调用时捕获传入的packages参数,示例代码如下:
from setuptools import setup

# 用于存储捕获到的packages列表
captured_packages = None

def capture_setup(**kwargs):
    global captured_packages
    # 提取packages参数
    captured_packages = kwargs.get('packages')
    # 不执行实际的安装/打包流程
    return

# 替换原setup函数为自定义的捕获函数
setup = capture_setup

# 导入目标setup.py文件,触发setup函数调用
import setup  # 确保该脚本与你的setup.py在同一目录下

# 输出捕获到的packages
print(captured_packages)  # 结果为 ['foo', 'bar']

如果setup中的packages是通过find_packages()等动态方式生成的,这个方法依然有效,因为它捕获的是最终传入setup的实际参数值。

  • 基于setup.cfg的配置读取:如果你的项目使用setup.cfg文件管理配置(而非直接在setup.py中写代码),可以直接用setuptools.config.read_configuration读取配置内容:
from setuptools.config import read_configuration

config = read_configuration('setup.cfg')
packages = config['options'].get('packages')
print(packages)

但这个方法只适用于配置存放在setup.cfg的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:37:10