mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
1219c39d78
* add logic for finding the root (runtime) directory This commit fixes the root search logic to be as follows: 1) The `--root_dir` command line argument 2) The contents of environment variable INVOKEAI_ROOT 3) The VIRTUAL_ENV environment variable, plus '..' 4) $HOME/invokeai (3) is the new feature. Since we are now recommending to install InvokeAI and its dependencies into the .venv in the root directory, this should be a reliable choice. * make installer scripts more robust This commits improves the installer .sh and .bat scripts in the following ways: 1. They now handle folder/directory names containing spaces. 2. Pip will be installed into the .venv using the `ensurepip` module. This addresses issues identified by @vargol in Issue #1941 * add --prefer-binary option to pip install * fix unset variable crash * add patch level to zip file name * Fix crash introduced in #1948
222 lines
7.4 KiB
Batchfile
222 lines
7.4 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 this should be changed to the tagged release!
|
|
@rem set INVOKE_AI_SRC=https://github.com/invoke-ai/InvokeAI/archive/main.zip
|
|
set INVOKE_AI_SRC=https://github.com/invoke-ai/InvokeAI/archive/refs/tags/v2.2.4.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. Before you start,
|
|
echo 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. Some users have found they need to install the Visual C++ core
|
|
echo libraries or else they experience DLL loading problems at the end of the install.
|
|
echo Visual C++ is very likely already installed on your system, but if you get DLL
|
|
echo issues, please download and install the libraries by going to:
|
|
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:"=%
|
|
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
|
|
|
|
copy environments-and-requirements\requirements-win-colab-cuda.txt .\requirements.txt
|
|
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
|