LoginSignup
12
4

Taggerの起動でImportErrorとwrap_gradio_gpu_callでImportErrorになった時の解消法

Posted at

背景

新PCにStable Diffusion WebUIにtaggerをインストールしたはずが、再起動してもタブで表示されなかった。
コンソールを見てみると、起動時にエラーが起きているようだった。
旧PCの環境では起きなかったのですが…

FireShot Capture 001 - Stable Diffusion - 127.0.0.1.png

環境

Windows 11 Home 64-bit
System Model: XPS 8960
Intel(R) Core(TM) i7-13700 (24 CPUs), ~2.1GHz
NVIDIA GeForce RTX 3050 OEM

エラー内容

1つ目

ImportError: cannot import name 'models_path' from partially initialized module 'modules.shared'について

*** Error running preload() for {パス}\stable-diffusion-webui\extensions\stable-diffusion-webui-wd14-tagger\preload.py
    Traceback (most recent call last):
      File "{パス}\stable-diffusion-webui\modules\script_loading.py", line 26, in preload_extensions
        module = load_module(preload_script)
      File "{パス}\stable-diffusion-webui\modules\script_loading.py", line 10, in load_module
        module_spec.loader.exec_module(module)
      File "<frozen importlib._bootstrap_external>", line 883, in exec_module
      File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
      File "{パス}\stable-diffusion-webui\extensions\stable-diffusion-webui-wd14-tagger\preload.py", line 18, in <module>
        from modules.shared import models_path
    ImportError: cannot import name 'models_path' from partially initialized module 'modules.shared' (most likely due to a circular import) ({パス}\stable-diffusion-webui\modules\shared.py)

2つ目

ImportError: cannot import name 'wrap_gradio_gpu_call' from 'webui'について

*** Error loading script: tagger.py
    Traceback (most recent call last):
      File "{パス}\stable-diffusion-webui\modules\scripts.py", line 382, in load_scripts
        script_module = script_loading.load_module(scriptfile.path)
      File "{パス}\stable-diffusion-webui\modules\script_loading.py", line 10, in load_module
        module_spec.loader.exec_module(module)
      File "<frozen importlib._bootstrap_external>", line 883, in exec_module
      File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
      File "{パス}\stable-diffusion-webui\extensions\stable-diffusion-webui-wd14-tagger\scripts\tagger.py", line 5, in <module>
        from tagger.ui import on_ui_tabs
      File "{パス}\stable-diffusion-webui\extensions\stable-diffusion-webui-wd14-tagger\tagger\ui.py", line 10, in <module>
        from webui import wrap_gradio_gpu_call
    ImportError: cannot import name 'wrap_gradio_gpu_call' from 'webui' ({パス}\stable-diffusion-webui\webui.py)

解消法

1つ目

なんだろう…とおもいググってみると、1つ目は「循環インポート」というもので、他のpyファイルを見てみると循環していると気づきました。

ほかのファイルをいじるよりはtaggerのpyをいじったほうがいいだろう、ということで以下ようにファイルを更新して、解消しました。

修正ファイル

{パス}\stable-diffusion-webui\extensions\stable-diffusion-webui-wd14-tagger\preload.py

修正内容

from modules.shared import models_path

import argparse
import os

modules_path = os.path.dirname(os.path.realpath(__file__))

parser_pre = argparse.ArgumentParser(add_help=False)
parser_pre.add_argument("--data-dir", type=str, default=os.path.dirname(modules_path), help="base path where all user data is stored", )
cmd_opts_pre = parser_pre.parse_known_args()[0]
data_path = cmd_opts_pre.data_dir

models_path = os.path.join(data_path, "models")

2つ目

ググってもHitせず、偶然見つけた外国の方の記事の質問へのコメントで以下のように修正するといいよとあったので、深くは調べずひとまず変更したら治りました。

なんで治ったかはこれから調べますね…

修正ファイル

{パス}\stable-diffusion-webui\extensions\stable-diffusion-webui-wd14-tagger\tagger\ui.py

修正内容

from webui import wrap_gradio_gpu_call

from modules.call_queue import wrap_gradio_gpu_call

すると…

FireShot Capture 002 - Stable Diffusion - 127.0.0.1.png

見事解消しました。。よかった…。

12
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4