StableDiffusion本地部署 4 整合包猜想

还是不死心,在接着想想。

第一次运行SD,根据webui-user的代码走一遍步骤:

  1. 定义路径

    if not defined PYTHON (set PYTHON=python)
    if defined GIT (set "GIT_PYTHON_GIT_EXECUTABLE=%GIT%") # 所以一开始,只需要设置git这个参数?
    if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")
    
    set SD_WEBUI_RESTART=tmp/restart
    set ERROR_REPORTING=FALSE
    
    mkdir tmp 2>NUL
    
  2. # 检查pyhton是否可用。安装时设置了python全局路径,所以可以运行
    %PYTHON% -c "" >tmp/stdout.txt 2>tmp/stderr.txt  
    if %ERRORLEVEL% == 0 goto :check_pip
    
  3. # 检查pip。全局python路径下的scrips中有pip,可以运行
    :check_pip
    %PYTHON% -mpip --help >tmp/stdout.txt 2>tmp/stderr.txt  
    if %ERRORLEVEL% == 0 goto :start_venv
    
  4. :start_venv
    if ["%VENV_DIR%"] == ["-"] goto :skip_venv # 第一次不运行
    if ["%SKIP_VENV%"] == ["1"] goto :skip_venv # 第一次不运行
    
    # 查看是否有\Scripts\Python.exe,第一次结果为没有,所以不跳转,执行下面的代码
    dir "%VENV_DIR%\Scripts\Python.exe" >tmp/stdout.txt 2>tmp/stderr.txt 
    if %ERRORLEVEL% == 0 goto :activate_venv
    
    for /f "delims=" %%i in ('CALL %PYTHON% -c "import sys; print(sys.executable)"') do set PYTHON_FULLNAME="%%i"
    # 有句echo,没用我就删除了
    
    # 使用全局python.exe创建一个虚拟环境,地址为~\venv
    %PYTHON_FULLNAME% -m venv "%VENV_DIR%" >tmp/stdout.txt 2>tmp/stderr.txt 
    # 成功后跳转去更新pip
    if %ERRORLEVEL% == 0 goto :upgrade_pip 
    

​ 我自己试着用python创建环境env,目录结构如下:

在这里插入图片描述

  1. # 更新 ~\venv环境的pip
    :upgrade_pip
    "%VENV_DIR%\Scripts\Python.exe" -m pip install --upgrade pip 
    if %ERRORLEVEL% == 0 goto :activate_venv
    
  2. :activate_venv
    # 使用创建的venv环境下的python.exe,并激活改环境
    set PYTHON="%VENV_DIR%\Scripts\Python.exe" # 解释器在这里换了一次。
    call "%VENV_DIR%\Scripts\activate.bat" 
    
  3. # 使用env\sripts\python.exe 启动项目,并传入所有参数。
    # 第一次启动后,我估计lacunch会将ACCELERATE改为true,并创建Scripts\accelerate.exe
    :launch
    %PYTHON% launch.py %* 
    if EXIST tmp/restart goto :skip_venv
    pause
    exit /b
    
  4. :skip_venv
    if [%ACCELERATE%] == ["True"] goto :accelerate 
    goto :launch
    
  5. # 第一次lacunch后,就可以用accelerate启动了。
    :accelerate
    # echo
    set ACCELERATE="%VENV_DIR%\Scripts\accelerate.exe"
    if EXIST %ACCELERATE% goto :accelerate_launch
    
    :accelerate_launch
    echo Accelerating
    %ACCELERATE% launch --num_cpu_threads_per_process=6 launch.py
    if EXIST tmp/restart goto :skip_venv
    pause
    exit /b
    

总结:

  1. 用全局的python(安装的时候配置环境变量)创建了一个环境venv。如果我们指定非全局的python.exe创建环境按道理也可以?
  2. 这个全局的python只是起一个临时的作用,就是为了创建环境venv。存储python解释器的变量更新为venv下的解释器。
  3. 存储环境文件夹的参数也会更新为venv,安装的依赖包都存储在这个环境中。也就是使用~\venv\scripts\python.exe运行pip,下载到~\venv\Lib\site-packages

现在我就一目了然了!!!

好,如果我已经运行过一遍了,那么我就需要改一些参数,以保证相对路径可以打包整个环境。

接下来SD打包的可执行猜测(当然没这么简单):

  • 在第一次运行之后,修改webui.bat文件,全用相对路径或者%~dp0
@echo off

set PYTHON= 创建的venv环境下的python.exe目录,使用使用%~dp0表示当前运行路径。安装的所有依赖包估计就在这里
set GIT= git的地址
set VENV_DIR=创建的venv环境目录
set COMMANDLINE_ARGS=

call webui.bat
  • 秋叶大佬整合包中没有webui.bat文件,用的webui.py进行启动的。也就是启动器做了重大修改。我猜测她创建环境在了.\python之下,因为所有的依赖文件都在其中。而官方启动中是独立创建了一个venv

官方environment.bat文件,仅做自己的参考

@echo off

set DIR=%~dp0

set PATH=%DIR%\git\bin;%DIR%\python;%DIR%\python\Scripts;%PATH%
set PY_LIBS=%DIR%\python\Scripts\Lib;%DIR%\python\Scripts\Lib\site-packages
set PY_PIP=%DIR%\python\Scripts
set SKIP_VENV=1
set PIP_INSTALLER_LOCATION=%DIR%\python\get-pip.py
set TRANSFORMERS_CACHE=%DIR%\transformers-cache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值