1. 自定义组件
  2. 常见问题

常见问题

在使用自定义组件之前,我需要安装什么?

在使用自定义组件之前,请确保已安装 Python 3.10+、Node.js v18+、npm 9+ 和 Gradio 4.0+(最好是 Gradio 5.0+)。

自定义组件在Gradio 4.0和5.0之间是否兼容?

使用Gradio 5.0构建的自定义组件应与Gradio 4.0兼容。如果您在Gradio 4.0中构建了自定义组件,则需要重新构建您的组件以使其与Gradio 5.0兼容。只需按照以下步骤操作:

  1. 更新 @gradio/preview 包。进入 frontend 目录并运行 npm update
  2. 修改pyproject.toml中的dependencies键,将允许的最大Gradio版本固定在版本5,例如dependencies = ["gradio>=4.0,<6.0"]
  3. 运行构建和发布命令

我可以使用哪些模板来创建我的自定义组件?

运行 gradio cc show 查看内置模板列表。 你也可以从其他人的自定义组件开始! 只需 git clone 他们的仓库并进行修改。

什么是开发服务器?

当你运行gradio cc dev时,一个开发服务器将加载并运行你选择的Gradio应用程序。 这就像你运行python .py时一样,但是gradio命令会热重载,这样你可以立即看到你的更改。

开发服务器对我不起作用

1. 检查您的终端和浏览器控制台

确保你的代码中没有语法错误或其他明显的问题。从python触发的异常将显示在终端中。从javascript触发的异常将显示在浏览器控制台和/或终端中。

2. 您是在Windows上开发吗?

出于安全原因,Windows 上的 Chrome 会阻止本地编译的 svelte 文件。我们建议在团队解决此问题时,在适用于 Linux 的 Windows 子系统 (WSL) 中开发您的自定义组件。

3. 检查窗口。GRADIO_CC 变量

在浏览器控制台中,打印window.__GRADIO__CC变量(只需在控制台中输入它)。如果它是一个空对象,这意味着CLI无法找到您的自定义组件源代码。通常,这种情况发生在自定义组件安装在与运行dev命令使用的虚拟环境不同的虚拟环境中时。请使用--python-pathgradio-path CLI参数来指定您的组件安装环境中的python和gradio可执行文件的路径。例如,如果您使用的是位于/Users/mary/venv的虚拟环境,请分别传入/Users/mary/bin/python/Users/mary/bin/gradio

如果window.__GRADIO__CC变量不为空(见下面的示例),那么开发服务器应该正常工作。

4. 确保你使用的是虚拟环境 强烈建议你使用虚拟环境,以防止与系统中安装的其他python依赖项发生冲突。

我是否总是需要从头开始构建我的组件?

不!你可以从一个现有的gradio组件作为模板开始,参见五分钟指南。你也可以从一个现有的自定义组件开始,如果你想进一步调整它。一旦找到你喜欢的一个自定义组件的源代码,将代码克隆到你的电脑上并运行gradio cc install。然后你可以运行开发服务器来进行更改。如果你遇到任何问题,通过在他们的仓库中打开一个问题来联系组件的作者。画廊是寻找已发布组件的好地方。例如,要从PDF组件开始,使用git clone https://huggingface.co/spaces/freddyaboulton/gradio_pdf克隆空间,cd进入src目录,并运行gradio cc install

我需要在HuggingFace Spaces上托管我的自定义组件吗?

您可以在不托管或连接到HuggingFace的情况下开发和构建您的自定义组件。 如果您希望与gradio社区分享您的组件,建议将您的包发布到PyPi并在HuggingFace上托管一个演示,以便任何人都可以安装或试用它。

在Gradio中实现自定义组件需要哪些方法是强制性的?

你必须实现preprocesspostprocessexample_payloadexample_value方法。如果你的组件不使用数据模型,你还必须定义api_infoflagread_from_flag方法。更多信息请参阅后端指南

Gradio自定义组件中data_model的目的是什么?

一个data_model定义了组件的预期数据格式,简化了组件开发过程并自动记录代码。它简化了API的使用和示例缓存。

为什么在处理文件上传的组件中使用FileData很重要?

利用FileData对于期望文件上传的组件至关重要。它确保了安全的文件处理、自动缓存和简化的客户端库功能。

如何向我的自定义Gradio组件添加事件触发器?

你可以在EVENTS类属性中通过列出所需的事件名称来定义事件触发器,这会自动将相应的方法添加到你的组件中。

我可以在不定义data_model的情况下实现自定义Gradio组件吗?

是的,可以在没有data_model的情况下创建自定义组件,但您将需要手动实现api_infoflagread_from_flag方法。

是否有我可以学习的自定义组件示例?

我们已经在HuggingFace Hub上准备了这组collection自定义组件,你可以用来开始使用!

如何找到由Gradio社区创建的自定义组件?

我们正在努力创建一个画廊,以便更容易发现新的自定义组件。 在此期间,您可以搜索标记为gradio-custom-component的HuggingFace Spaces 这里