??在 [SD] 本地搭建相对独立的stable-diffusion运行环境 中我介绍了在移动硬盘里搭建stable-diffusion-webui的操作。这个环境可以跟着我们移动,可以很方便的在不同电脑上启动。唯一的不足是,每次换了电脑,如果移动硬盘盘符发生改变,需要修改venv的配置文件,把Python的绝对路径更新下。今天就把这个不足也满足掉。
??为了提高SD的运行速度,我换了一个SSD的移动硬盘。目录结构顺带做了个小调整,当前的目录结构为:
SD
├── Python
├── webui
| └── venv
| └── pyvenv.template
├── 1run.bat
??1run.bat
就是启动SD的脚本,在这里面加上设置Python路径的功能。创建pyvenv.template模板配置文件,里面把Python路径的部分,全部写为[PATH]标记。每次启动时,把标记替换为实际路径,并写入到实际的配置文件里。
@echo off
:: 1run.bat所在的目录
set CUR_DIR=%~dp0
:: 再向上找一级目录,也就是SD目录的完整路径
set SD_DIR=%CUR_DIR:~0,-1%
for %%d in (%SD_DIR%) do set SD_DIR=%%~dpd
:: Python目录
set PY_DIR=%SD_DIR%Python
:: 将pyvenv.template里的[PATH]标记,全部替换为Python目录,并写入到pyvenv.cfg文件
powershell -Command "(Get-Content '.\venv\pyvenv.template') | ForEach-Object { $_ -replace '\[PATH\]', '%PY_DIR%' } | Set-Content '.\venv\pyvenv.cfg'"
set PYTHON=..\Python\python.exe
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=
call webui.bat
pyvenv.template的内容:
home = [PATH]
implementation = CPython
version_info = 3.10.6.final.0
virtualenv = 20.23.0
include-system-site-packages = false
base-prefix = [PATH]
base-exec-prefix = [PATH]
base-executable = [PATH]\python.exe
小插曲:
新买的SSD移动硬盘,文件系统是exFAT,在启动SD时遇到了报错:
fatal: detected dubious ownership in repository
这是因为 exFAT 文件系统不支持 Linux 文件系统的文件所有者和权限,导致 git 不能正确地管理文件的权限。
解决:执行命令 git config --global --add safe.directory "*"
忽略所有目录的安全检查。
参考:
[Bug]: stderr: fatal: detected dubious ownership in repository #9924
[2023-08-19]补充
??今天把硬盘连到公司电脑启动,发现还会下载一些东西。经过调查,是adetailer、transformer等会从huggingface下载一些模型文件,缓存到本地电脑上。
默认的缓存地址是:C:\Users\admin\.cache\huggingface\hub
可以通过设置环境变量,改变缓存地址:
:: 把huggingface的缓存地址,改为SD\webui\.cache\huggingface,这样就能跟着移动硬盘走了
set HF_HOME=.cache\huggingface
set HUGGINGFACE_HUB_CACHE=.cache\huggingface\hub