当前位置: 首页 > 知识库问答 >
问题:

python - uvr5打包exe后报错ModuleNotFoundError: No module named 'demucs.htdemucs'如何解决?

赫连越
2024-11-10

从github上下的uvr5源码,https://github.com/Anjok07/ultimatevocalremovergui,直接py里运行没有任何问题,但是打包exe后,选择htdemucs模型处理时,就会报错如下。

ModuleNotFoundError: "No module named 'demucs.htdemucs'"
Traceback Error: "
File "UVR.py", line 6643, in process_start
File "separate.py", line 844, in seperate
File "demucs\pretrained.py", line 81, in get_model
File "demucs\repo.py", line 148, in get_model
File "demucs\repo.py", line 129, in get_model
File "demucs\repo.py", line 129, in
File "demucs\repo.py", line 100, in get_model
File "demucs\states.py", line 46, in load_model
File "torch\serialization.py", line 1360, in load
return _load(
File "torch\serialization.py", line 1848, in _load
result = unpickler.load()
File "pickle.py", line 1212, in load
File "pickle.py", line 1528, in load_global
File "torch\serialization.py", line 1837, in find_class
return super().find_class(mod_name, name)
File "pytorch_lightning_graveyard\legacy_import_unpickler.py", line 24, in find_class
File "pickle.py", line 1579, in find_class

我解包exe发现demucs模块已经打包进去了,不知道为什么报错误?

共有1个答案

慕阳
2024-11-10
### 解决方案

这个问题通常是由于在打包过程中,某些模块或依赖项的路径没有正确处理导致的。在你的情况下,`demucs.htdemucs` 模块在打包后的可执行文件中无法被正确找到。以下是一些可能的解决方案:

1. **确保 `demucs` 模块的路径正确**:
   - 检查 `demucs` 模块的路径是否在打包时被正确包含。有时候,打包工具(如 PyInstaller)可能无法自动检测到所有依赖项,特别是当它们以非标准方式安装或位于非标准路径时。

2. **使用 `.spec` 文件手动指定隐藏导入**:
   - 如果你使用的是 PyInstaller,可以尝试编辑生成的 `.spec` 文件,手动添加隐藏导入。例如:
 a = Analysis(
     ['your_script.py'],
     pathex=['your_path'],
     binaries=[],
     datas=[],
     hiddenimports=['demucs.htdemucs'],  # 添加这一行
     hookspath=[],
     runtime_hooks=[],
     excludes=[],
     win_no_prefer_redirects=False,
     win_private_assemblies=False,
     cipher=None,
     noarchive=False,
 )
 ```
  • 这将确保 demucs.htdemucs 在打包时被包含在内。
  1. 检查 demucs 的安装和版本

    • 确保 demucs 库已正确安装在你的环境中,并且版本与你的代码兼容。有时候,库的更新可能会改变模块结构或导入路径。
  2. 使用虚拟环境

    • 在一个干净的虚拟环境中打包你的应用,这有助于避免依赖项冲突和路径问题。
  3. 调试打包过程

    • 使用 PyInstaller 的调试模式(通过添加 --debug=all 参数)来运行打包过程,这可能会提供更多关于错误原因的信息。
  4. 检查 pickle 序列化问题

    • 由于错误堆栈中提到了 pickletorch.serialization,这可能与 PyTorch 模型的序列化有关。确保在打包前,模型文件没有损坏,并且是以兼容的方式保存的。

尝试上述解决方案之一或组合,看看是否能解决你的问题。如果问题仍然存在,可能需要更详细地检查你的代码和打包配置。

 类似资料: