#976 ImportError: cannot import name 'Recognform' from 'videotrans.component' (/Users/user/Downloads/pyvideotrans-main/videot

8.219* Posted at: 1 day ago 👁23

Traceback (most recent call last):

File "/Users/user/Downloads/pyvideotrans-main/videotrans/winform/fn_recogn.py", line 325, in openwin

from videotrans.component import Recognform

ImportError: cannot import name 'Recognform' from 'videotrans.component' (/Users/user/Downloads/pyvideotrans-main/videotrans/component/__init__.py)

=====

macOS-15.0.1-arm64-arm-64bit

version:v3.81

frozen:False

language:zh

4 Replies

本条内容由 gpt-5-mini 回复
问题定性:ImportError: cannot import name 'Recognform' 表明在源码运行时,模块 videotrans.component 并未导出名为 Recognform 的符号。常见原因是:videotrans/component/__init__.py 中没有把子模块的类/函数 re-export;或者文件/类名大小写或文件名与导入不匹配;亦可能是路径/运行方式导致导入到错误的包。

请按下面步骤排查并修复:

1. 快速验证文件与类是否存在

1. 在项目根目录运行(终端):

  • ls videotrans/component
  • grep -nRi "class Recogn" videotrans/component || true

2. 确认是否存在文件名类似 recognform.py(或其它命名,如 recogn_form.py),并确认类定义是否为 class Recognform 或 class RecognForm。

2. 立即可用的两种修复方法(任选其一)

方法A(推荐,最稳妥,修改包导出):

1. 打开文件 videotrans/component/__init__.py。

2. 如果没有将 Recognform 导出,添加一行(假设模块为 recognform.py 且类名为 Recognform):

from .recognform import Recognform

3. 保存后重新启动程序。

方法B(更直接,修改引用位置):

1. 打开报错文件 /videotrans/winform/fn_recogn.py。

2. 将原来的导入:

from videotrans.component import Recognform

替换为(根据实际模块名调整):

from videotrans.component.recognform import Recognform

3. 保存后重新启动程序。

3. 检查大小写与命名不一致问题

  • 如果类定义是 class RecognForm(注意大写 F),但代码导入 Recognform,请改用实际类名或在 __init__.py 中以正确名字导出。
  • 如果文件名是 recogn_form.py,请在导入处或 __init__.py 使用对应模块名(recogn_form)。

4. 检查运行上下文与重复包

  • 确认你是从项目根目录运行,并且 Python 导入的是当前项目下的 videotrans,而不是系统已安装的旧包。
  • 在项目根目录,运行 Python 并检查:

import videotrans; print(videotrans.__file__)

确认路径指向你的源码目录。

5. 若按上面修改仍未解决,请提供以下信息以便进一步分析:

  • videotrans/component/__init__.py 的完整内容。
  • videotrans/component 目录下的文件列表(ls 输出)。
  • 包含 Recognform 或类似类定义的文件(如 videotrans/component/recognform.py)前 100 行内容。
  • 重新完整的 traceback(你已给出的可用,但若有更新请一并提供)。
  • 若有,videotrans/logs/ 下最新的日志文件内容。

如果以上检查后你不确定如何修改某个文件或发现模块/类命名与我描述不符,请把上述文件内容贴出来,我将给出精确的修改代码。

Admin

videotrans/component/__init__.py 文件内容

import importlib
__all__ = [
    "BaiduForm", "ChatgptForm", "DeepLForm", "DeepLXForm", "TencentForm",
    "ElevenlabsForm", "InfoForm", "AzureForm", "GeminiForm", "SetLineRole",
    "OttForm", "CloneForm", "SeparateForm", "TtsapiForm", "GPTSoVITSForm",
    "TransapiForm", "AzurettsForm", "ChatttsForm", "LocalLLMForm",
    "ZijiehuoshanForm", "HebingsrtForm", "DoubaoForm", "FishTTSForm", "CosyVoiceForm",
    "AI302Form", "SetINIForm", "WatermarkForm", "GetaudioForm", "HunliuForm",
    "VASForm", "Fanyisrt", "Recognform", "Peiyinform", "Videoandaudioform",
    "Videoandsrtform", "OpenAITTSForm", "RecognAPIForm", "OpenaiRecognAPIForm",
    "FormatcoverForm", "SubtitlescoverForm",
    "SttAPIForm", "VolcEngineTTSForm", "F5TTSForm", "DeepgramForm", "ClaudeForm",
    "LibreForm", "AliForm", "ZhipuAIForm", "KokoroForm", "ParakeetForm",
    "ChatterboxForm", "SiliconflowForm", "DeepseekForm", "OpenrouterForm",
    "Peiyinformrole", "QwenTTSForm","QwenmtForm","MinimaxiForm"
]
def __getattr__(name):
    if name in __all__:
        try:
            module = importlib.import_module(".set_form", __name__)
            obj = getattr(module, name)
            globals()[name] = obj
            return obj
        except (ImportError, AttributeError) as e:
            raise AttributeError(f"Failed to lazy-load '{name}' from videotrans.component.set_form. Reason: {e}")
    raise AttributeError(f"module '{__name__}' has no attribute '{name}'")

videotrans/component/set_form.py代码为

```

import PySide6

import os

from PySide6 import QtWidgets, QtCore

from PySide6.QtGui import QIcon

from videotrans.configure import config

from videotrans.ui.recogn import Ui_recogn

class Recognform(QtWidgets.QWidget, Ui_recogn): #

继续分析

本条内容由 gpt-5-mini 回复
根据您提供的 videotrans/component/__init__.pyvideotrans/component/set_form.py 内容,Recognform 类确实定义在 set_form.py 中,并且 __init__.py 使用了 __getattr__ 机制尝试懒加载它。然而,ImportError 仍然发生,这表明该懒加载机制在您的特定环境中未能成功将 Recognform 暴露给 videotrans.component 包。

解决此问题的最直接方法是修改 fn_recogn.py 文件中的导入语句,使其直接从 Recognform 所在的模块导入。

请按以下步骤操作:

1. 打开文件: 找到并打开 pyvideotrans-main/videotrans/winform/fn_recogn.py 文件。

2. 修改导入语句: 找到如下行:

    from videotrans.component import Recognform

将其修改为:

    from videotrans.component.set_form import Recognform

3. 保存并重启: 保存修改后的 fn_recogn.py 文件,然后重新启动 pyVideoTrans 软件。

这样修改后,fn_recogn.py 会直接从 videotrans.component.set_form 模块导入 Recognform 类,绕过 videotrans.component/__init__.py 的懒加载机制,从而解决 ImportError

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Donate: https://ko-fi.com/jianchang512

Trending Questions