Stable Diffusion web UIで「No Python at」で起動できなくなった場合の対処法

友人から、「PC買い換えてStable Diffusion web UIを移動したら起動できなくなった」という話を聞いた。

状況聞いて解決できたが、エンジニアじゃない人にはちょっと面倒かなあと思いメモ。

問題

Stable Diffusion web UIをフォルダごと、古いPC(Windows 10)から新しいPC(Windows 11)にコピー。この時、保存先は同じパスにした模様。

新しいPCでGit for WindowsおよびPython3.10をインストールし、Stable Diffusion web UIの webui-user.bat を実行すると、 No Python at 'C:\Python310\python.exe' で起動に失敗するとのこと。

Pythonは、古いPCでは C:\Python310 にインストールした模様。新しいPCではMicrosoft Storeからインストールしたため、 どこにインストールされたかはわかっていなかった。

調査

webui-user.bat の内容を教えてもらうと、 set PYTHON= があったので、そこに where python した結果( C:\Users\<ユーザー名>\AppData\Local\Microsoft\WindowsApps\python.exe )を設定してもらったが変わらず。

上記のパスの python.exe は0KBのため、シンボリックリンクっぽい。実ファイルパスを入れてみるかとも思ったが、それよりも set VENV_DIR=webui-user.bat にあるのが気になる。

エラーメッセージと venvGitHubを検索すると、以下のissueが見つかった。

github.com

こちらのコメントにあるように、 venv フォルダを削除すればよい。

対応

webui-user.batVENV_DIR を設定していればそのディレクトリ、未設定であれば webui-user.bat と同じフォルダ内の venv フォルダを削除(Windowsのゴミ箱に入れればいい)し、 webui-user.bat を実行することで解消した。

このフォルダには、PythonがStable Diffusion web UIを実行するために必要なモジュール等の保存をしているが、そこに webui-user.bat を最初に実行したときのPythonのパスも保存されており、それが原因で動かなくなっていた模様。

削除後の実行では、モジュールのダウンロード等が再度実行されるため多少時間はかかるが、 venv フォルダが一番手っ取り早い。

同じPC上でも、Pythonを更新してパスが変わった場合には、同様の問題が発生しそう。また、フォルダを移動したら動かなくなった、という話もちらほら見かけたが、それも同様の原因だと思う。

なお、設定ファイルなどは venv に保存されていないため、安心して削除していい。

ユーザー設定は、Settingsタブでの設定が config.json 、txt2imgやimg2imgタブの設定が ui-config.json、保存したStyleは styles.csv に保存されている模様。

git pull で更新できない問題

ついでに、「git pull で更新しようとしたらできない」ということで相談を受けた。

git status してもらうと、一部の py ファイル等に変更があるが、心当たりはないとのこと。

適当なファイルをメモ帳で開いてもらうと、改行コードがCRLFになっていた。Git Bashgit config --get core.autocrlf を実行してもらうと true となっていたため、それが原因でpullした際に改行コードが変換され、それが変更差分として扱われたものと思われる。

git config --global core.autocrlf false を実行してもらい、リポジトリの変更は git reset --hard で切り戻した。

config.json など、ユーザー設定ファイルや、 models , outputs といったフォルダ配下の変更は差し戻されないか聞かれたが、いずれも .gitignore に記載されているため、対象外となっている。

注意点として、 webui-user.bat および webui-user.sh.gitignore に記載されているが、すでにGit管理下に含まれているため、おそらくユーザーが変更する可能性のあるファイルのうち、これらのファイルに加えた変更のみ git reset で差し戻される可能性がある。

友人は COMMANDLINE_ARGS を変更していたため、そこだけバックアップしてもらい、 git reset --hard および git pull を実行してもらうと、最新の状態に更新できた。

振り返り

インストールにGitを使ってPythonで動かすとか、なかなか非エンジニアにはインストールが面倒そうだなぁと思った。

最近はDockerでも動かせるようだが、Docker使うよりはGit+Pythonのほうが楽か。

しかし、ChatGPTといいStable Diffusionといい、すごい時代になったなぁ。

ところで、Stable Diffusion web UIのメインのブランチ名、 master なのね。すっかり main に慣れたので、逆に珍しいと感じた。