mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
746e97ea1d
1. create_installers.sh now asks before tagging and committing the current repo 2. trailing whitespace removed from user-provided location of invokeai directory in install.bat
231 lines
7.3 KiB
Batchfile
231 lines
7.3 KiB
Batchfile
@echo off
|
|
setlocal EnableExtensions EnableDelayedExpansion
|
|
|
|
@rem This script requires the user to install Python 3.9 or higher. All other
|
|
@rem requirements are downloaded as needed.
|
|
|
|
@rem change to the script's directory
|
|
PUSHD "%~dp0"
|
|
|
|
set "no_cache_dir=--no-cache-dir"
|
|
if "%1" == "use-cache" (
|
|
set "no_cache_dir="
|
|
)
|
|
|
|
@rem Config
|
|
@rem The version in the next line is replaced by an up to date release number
|
|
@rem when create_installer.sh is run. Change the release number there.
|
|
set INVOKEAI_VERSION=latest
|
|
set INVOKE_AI_SRC=https://github.com/invoke-ai/InvokeAI/archive/refs/tags/%INVOKEAI_VERSION%.zip
|
|
set INSTRUCTIONS=https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/
|
|
set TROUBLESHOOTING=https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting
|
|
set PYTHON_URL=https://www.python.org/downloads/windows/
|
|
set MINIMUM_PYTHON_VERSION=3.9.0
|
|
set PYTHON_URL=https://www.python.org/downloads/release/python-3109/
|
|
|
|
set err_msg=An error has occurred and the script could not continue.
|
|
|
|
@rem --------------------------- Intro -------------------------------
|
|
echo This script will install InvokeAI and its dependencies.
|
|
echo.
|
|
echo BEFORE YOU START PLEASE MAKE SURE TO DO THE FOLLOWING
|
|
echo 1. Install python 3.9 or higher.
|
|
echo 2. Double-click on the file WinLongPathsEnabled.reg in order to
|
|
echo enable long path support on your system.
|
|
echo 3. Install the Visual C++ core libraries.
|
|
echo Please download and install the libraries from:
|
|
echo https://learn.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist?view=msvc-170
|
|
echo.
|
|
echo See %INSTRUCTIONS% for more details.
|
|
echo.
|
|
pause
|
|
|
|
@rem ---------------------------- check Python version ---------------
|
|
echo ***** Checking and Updating Python *****
|
|
|
|
call python --version >.tmp1 2>.tmp2
|
|
if %errorlevel% == 1 (
|
|
set err_msg=Please install Python 3.9 or higher. See %INSTRUCTIONS% for details.
|
|
goto err_exit
|
|
)
|
|
|
|
for /f "tokens=2" %%i in (.tmp1) do set python_version=%%i
|
|
if "%python_version%" == "" (
|
|
set err_msg=No python was detected on your system. Please install Python version %MINIMUM_PYTHON_VERSION% or higher. We recommend Python 3.10.9 from %PYTHON_URL%
|
|
goto err_exit
|
|
)
|
|
|
|
call :compareVersions %MINIMUM_PYTHON_VERSION% %python_version%
|
|
if %errorlevel% == 1 (
|
|
set err_msg=Your version of Python is too low. You need at least %MINIMUM_PYTHON_VERSION% but you have %python_version%. We recommend Python 3.10.9 from %PYTHON_URL%
|
|
goto err_exit
|
|
)
|
|
|
|
@rem Cleanup
|
|
del /q .tmp1 .tmp2
|
|
|
|
@rem --------------------- Get the requirements file ------------
|
|
echo.
|
|
echo Setting up requirements file for your system.
|
|
copy /y environments-and-requirements\requirements-win-colab-cuda.txt .\requirements.txt
|
|
|
|
@rem --------------------- Get the root directory for installation ------------
|
|
set "rootdir="
|
|
set "response="
|
|
set "selection="
|
|
:pick_rootdir
|
|
if defined rootdir goto :done
|
|
set /p selection=Select the path to install InvokeAI's directory into [%UserProfile%]:
|
|
if not defined selection set selection=%UserProfile%
|
|
set selection=%selection:"=%
|
|
call :Trim selection !selection!
|
|
set dest="%selection%\invokeai"
|
|
if exist %dest% (
|
|
set response=y
|
|
set /p response=The directory %dest% exists. Do you wish to resume install from a previous attempt? [Y/n]:
|
|
if !response! == "" set response=y
|
|
if /I !response! == y (set rootdir=%dest%) else (goto :pick_rootdir)
|
|
) else (
|
|
set rootdir=!dest!
|
|
)
|
|
set response=y
|
|
set /p response="You have chosen to install InvokeAI into %rootdir%. OK? [Y/n]: "
|
|
if !response! == "" set response=y
|
|
if /I !response! neq y set "rootdir="
|
|
goto :pick_rootdir
|
|
:done
|
|
|
|
set rootdir=%rootdir:"=%
|
|
|
|
|
|
|
|
@rem ---------------------- Initialize the runtime directory ---------------------
|
|
echo.
|
|
echo *** Creating Runtime Directory %rootdir% ***
|
|
if not exist "%rootdir%" mkdir "%rootdir%"
|
|
@rem for unknown reasons the mkdir works but returns an error code
|
|
if not exist "%rootdir%" (
|
|
set err_msg=Could not create the directory %rootdir%. Please check the directory's permissions and try again.
|
|
goto :err_exit
|
|
)
|
|
echo Successful.
|
|
|
|
@rem --------------------------- Create and populate .venv ---------------------------
|
|
echo.
|
|
echo ** Creating Virtual Environment for InvokeAI **
|
|
call python -mvenv "%rootdir%\.venv"
|
|
if %errorlevel% neq 0 (
|
|
set err_msg=Could not create virtual environment %rootdir%\.venv. Please check the directory's permissions and try again.
|
|
goto :err_exit
|
|
)
|
|
echo Successful.
|
|
|
|
echo.
|
|
echo *** Installing InvokeAI Requirements ***
|
|
echo Activating environment
|
|
call "%rootdir%\.venv\Scripts\activate.bat"
|
|
|
|
set PYTHON=%rootdir%\.venv\Scripts\python
|
|
echo updating pip with "%PYTHON%"
|
|
call "%PYTHON%" -mensurepip --upgrade
|
|
call "%PYTHON%" -mpip install --prefer-binary -r requirements.txt
|
|
if %errorlevel% neq 0 (
|
|
set err_msg=Requirements installation failed. See above for errors and check %TROUBLESHOOTING% for potential solutions.
|
|
goto :err_exit
|
|
)
|
|
echo Installation successful.
|
|
|
|
echo.
|
|
echo *** Installing InvokeAI Modules and Executables ***
|
|
call "%PYTHON%" -mpip install %INVOKE_AI_SRC%
|
|
if %errorlevel% neq 0 (
|
|
set err_msg=Installation of InvokeAI failed. See above for errors and check %TROUBLESHOOTING% for potential solutions.
|
|
goto :err_exit
|
|
)
|
|
echo Installation successful.
|
|
|
|
@rem --------------------------- Set up the root directory ---------------------------
|
|
xcopy /E /Y .\templates\rootdir "%rootdir%"
|
|
PUSHD "%rootdir%"
|
|
call "%PYTHON%" .venv\Scripts\configure_invokeai.py "--root=%rootdir%"
|
|
if %errorlevel% neq 0 (
|
|
set err_msg=Configuration failed. See above for error messages and check %TROUBLESHOOTING% for potential solutions.
|
|
goto :err_exit
|
|
)
|
|
POPD
|
|
|
|
copy .\templates\invoke.bat.in "%rootdir%\invoke.bat"
|
|
copy .\templates\update.bat.in "%rootdir%\update.bat"
|
|
|
|
@rem so that update.bat works
|
|
mkdir "%rootdir%\environments-and-requirements"
|
|
xcopy /I /Y .\environments-and-requirements "%rootdir%\environments-and-requirements"
|
|
copy .\requirements.txt "%rootdir%\requirements.txt"
|
|
|
|
|
|
echo.
|
|
echo ***** Finished configuration *****
|
|
echo All done. Execute the file %rootdir%\invoke.bat to start InvokeAI.
|
|
pause
|
|
deactivate
|
|
exit
|
|
|
|
@rem ------------------------ Subroutines ---------------
|
|
@rem routine to do comparison of semantic version numbers
|
|
@rem found at https://stackoverflow.com/questions/15807762/compare-version-numbers-in-batch-file
|
|
:compareVersions
|
|
::
|
|
:: Compares two version numbers and returns the result in the ERRORLEVEL
|
|
::
|
|
:: Returns 1 if version1 > version2
|
|
:: 0 if version1 = version2
|
|
:: -1 if version1 < version2
|
|
::
|
|
:: The nodes must be delimited by . or , or -
|
|
::
|
|
:: Nodes are normally strictly numeric, without a 0 prefix. A letter suffix
|
|
:: is treated as a separate node
|
|
::
|
|
setlocal enableDelayedExpansion
|
|
set "v1=%~1"
|
|
set "v2=%~2"
|
|
call :divideLetters v1
|
|
call :divideLetters v2
|
|
:loop
|
|
call :parseNode "%v1%" n1 v1
|
|
call :parseNode "%v2%" n2 v2
|
|
if %n1% gtr %n2% exit /b 1
|
|
if %n1% lss %n2% exit /b -1
|
|
if not defined v1 if not defined v2 exit /b 0
|
|
if not defined v1 exit /b -1
|
|
if not defined v2 exit /b 1
|
|
goto :loop
|
|
|
|
|
|
:parseNode version nodeVar remainderVar
|
|
for /f "tokens=1* delims=.,-" %%A in ("%~1") do (
|
|
set "%~2=%%A"
|
|
set "%~3=%%B"
|
|
)
|
|
exit /b
|
|
|
|
|
|
:divideLetters versionVar
|
|
for %%C in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set "%~1=!%~1:%%C=.%%C!"
|
|
exit /b
|
|
|
|
:err_exit
|
|
echo %err_msg%
|
|
echo The installer will exit now.
|
|
pause
|
|
exit /b
|
|
|
|
pause
|
|
|
|
:Trim
|
|
SetLocal EnableDelayedExpansion
|
|
set Params=%*
|
|
for /f "tokens=1*" %%a in ("!Params!") do EndLocal & set %1=%%b
|
|
exit /b
|
|
|