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

如何在setup.py中检测pip安装时指定的可选依赖组名称

在setup.py中检测pip安装时指定的可选依赖组

当执行pip install my_package[<extra>]时,要在setup.py中捕获并校验用户传入的可选依赖组名称(比如test1),可通过重写setuptools的安装命令实现,以下是具体方案:

实现步骤

  1. 自定义install命令类,通过setuptools的Distribution对象获取用户请求的可选依赖组,同时添加校验逻辑。
  2. 在setup()中指定使用自定义命令类。

完整setup.py示例代码

import sys
from setuptools import setup, find_packages
from setuptools.command.install import install

class CustomInstall(install):
    def run(self):
        # 获取用户请求的可选依赖组列表
        requested_extras = self.distribution.extras
        for extra in requested_extras:
            print(f"Detected extra dependency group: {extra}")
            # 校验可选组是否在允许范围内
            allowed_extras = ['test1', 'test2', 'test3']
            if extra not in allowed_extras:
                raise ValueError(f"Invalid extra '{extra}'. Allowed extras are: {', '.join(allowed_extras)}")
        # 执行默认的安装流程
        super().run()

setup(
    name="my_package",
    version="0.1.0",
    packages=find_packages(),
    # 与pyproject.toml中的可选依赖组保持一致
    extras_require={
        "test1": [],
        "test2": [],
        "test3": []
    },
    cmdclass={
        "install": CustomInstall,
    }
)

验证效果

  • 执行pip install my_package["test1"]时,setup.py会输出:Detected extra dependency group: test1
  • 若传入非法可选组(如pip install my_package["invalid"]),会抛出错误并终止安装:ValueError: Invalid extra 'invalid'. Allowed extras are: test1, test2, test3

注意事项

  • 确保setup.py中extras_require的配置与pyproject.toml里的可选依赖组完全一致,避免校验逻辑出错。
  • 该方案依赖setuptools内部API,主流版本(>=60.0)均可正常使用,若后续版本变更可能需微调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:57:03