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