Single-file installer script, micromamba will now be downloaded automatically on the first run; Activate the base environment before running the rest of the conda commands; Don't download conda/git again if it's already been installed by the installer

This commit is contained in:
cmdr2 2022-10-26 15:30:48 +05:30 committed by tildebyte
parent 83f20c23aa
commit c00da1702f
3 changed files with 36 additions and 62 deletions

View File

@ -1,55 +1,5 @@
**Important:** These instructions are for the developers of this project, not for users! The users should use the pre-created zip files for installation. **Important:** These instructions are for the developers of this project, not for users! The users should use the pre-created zip files for installation.
This guide explains how to create the zip files that users will use for installing. Just distribute the `install.bat` or `install.sh` file.
The installer zip contains two files: the script, and the micromamba binary. Running that file will download the invokeAI repository into the same folder as the script, and install the required dependencies.
Micromamba is a single ~8mb binary file, that acts like a package manager (drop-in replacement for conda).
# Download micromamba from:
* Windows x64: `curl -Ls https://micro.mamba.pm/api/micromamba/win-64/latest | tar -xvj bin/micromamba_win_x64.exe`
* Linux x64: `curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba_linux_x64`
* Linux arm64: `curl -Ls https://micro.mamba.pm/api/micromamba/linux-aarch64/latest | tar -xvj bin/micromamba_linux_arm64`
* Mac x64: `curl -Ls https://micro.mamba.pm/api/micromamba/osx-64/latest | tar -xvj bin/micromamba_mac_x64`
* Mac arm64 (M1/Apple Silicon): `curl -Ls https://micro.mamba.pm/api/micromamba/osx-arm64/latest | tar -xvj bin/micromamba_mac_arm64`
The download link provides tar.bz2 files.
(source https://mamba.readthedocs.io/en/latest/installation.html)
# Create the installer
Create the following folder structure, and zip it up.
For Linux/Mac: Make sure the `chmod u+x` permission is granted to `install.sh` and the corresponding `micromamba` binary.
### Windows x64:
```
.\install.bat
.\installer_files\micromamba_win_x64.exe
```
### Linux x64:
```
.\install.sh
.\installer_files\micromamba_linux_x64
```
### Linux arm64:
```
.\install.sh
.\installer_files\micromamba_linux_arm64
```
### Mac x64:
```
.\install.sh
.\installer_files\micromamba_mac_x64
```
### Mac arm64 (M1/Apple Silicon):
```
.\install.sh
.\installer_files\micromamba_mac_arm64
```

View File

@ -12,9 +12,12 @@
@rem config @rem config
set MAMBA_ROOT_PREFIX=%cd%\installer_files\mamba set MAMBA_ROOT_PREFIX=%cd%\installer_files\mamba
set INSTALL_ENV_DIR=%cd%\installer_files\env set INSTALL_ENV_DIR=%cd%\installer_files\env
set MICROMAMBA_BINARY_FILE=%cd%\installer_files\micromamba_win_x64.exe set MICROMAMBA_DOWNLOAD_URL=https://github.com/cmdr2/stable-diffusion-ui/releases/download/v1.1/micromamba.exe
@rem Change the download URL to an InvokeAI repo's release URL
@rem figure out whether git and conda needs to be installed @rem figure out whether git and conda needs to be installed
if exist "%INSTALL_ENV_DIR%" set PATH=%INSTALL_ENV_DIR%;%INSTALL_ENV_DIR%\Library\bin;%INSTALL_ENV_DIR%\Scripts;%INSTALL_ENV_DIR%\Library\usr\bin;%PATH%
set PACKAGES_TO_INSTALL= set PACKAGES_TO_INSTALL=
call conda --version >.tmp1 2>.tmp2 call conda --version >.tmp1 2>.tmp2
@ -25,10 +28,12 @@ if "%ERRORLEVEL%" NEQ "0" set PACKAGES_TO_INSTALL=%PACKAGES_TO_INSTALL% git
@rem (if necessary) install git and conda into a contained environment @rem (if necessary) install git and conda into a contained environment
if "%PACKAGES_TO_INSTALL%" NEQ "" ( if "%PACKAGES_TO_INSTALL%" NEQ "" (
@rem initialize micromamba @rem download micromamba
if not exist "%MAMBA_ROOT_PREFIX%" ( if not exist "%MAMBA_ROOT_PREFIX%\micromamba.exe" (
echo "Downloading micromamba from %MICROMAMBA_DOWNLOAD_URL% to %MAMBA_ROOT_PREFIX%\micromamba.exe"
mkdir "%MAMBA_ROOT_PREFIX%" mkdir "%MAMBA_ROOT_PREFIX%"
copy "%MICROMAMBA_BINARY_FILE%" "%MAMBA_ROOT_PREFIX%\micromamba.exe" call curl -L "%MICROMAMBA_DOWNLOAD_URL%" > "%MAMBA_ROOT_PREFIX%\micromamba.exe"
@rem test the mamba binary @rem test the mamba binary
echo Micromamba version: echo Micromamba version:
@ -43,6 +48,12 @@ if "%PACKAGES_TO_INSTALL%" NEQ "" (
echo "Packages to install:%PACKAGES_TO_INSTALL%" echo "Packages to install:%PACKAGES_TO_INSTALL%"
call "%MAMBA_ROOT_PREFIX%\micromamba.exe" install -y --prefix "%INSTALL_ENV_DIR%" -c conda-forge %PACKAGES_TO_INSTALL% call "%MAMBA_ROOT_PREFIX%\micromamba.exe" install -y --prefix "%INSTALL_ENV_DIR%" -c conda-forge %PACKAGES_TO_INSTALL%
if not exist "%INSTALL_ENV_DIR%" (
echo "There was a problem while installing%PACKAGES_TO_INSTALL% using micromamba. Cannot continue."
pause
exit /b
)
) )
set PATH=%INSTALL_ENV_DIR%;%INSTALL_ENV_DIR%\Library\bin;%INSTALL_ENV_DIR%\Scripts;%PATH% set PATH=%INSTALL_ENV_DIR%;%INSTALL_ENV_DIR%\Library\bin;%INSTALL_ENV_DIR%\Scripts;%PATH%
@ -56,6 +67,9 @@ if not exist ".git" (
call git checkout origin/main -ft call git checkout origin/main -ft
) )
@rem activate the base env
call conda activate
@rem create the environment @rem create the environment
call conda env create call conda env create
call conda activate invokeai call conda activate invokeai

View File

@ -19,17 +19,22 @@ esac
OS_ARCH=$(uname -m) OS_ARCH=$(uname -m)
case "${OS_ARCH}" in case "${OS_ARCH}" in
x86_64*) OS_ARCH="x64";; x86_64*) OS_ARCH="64";;
arm64*) OS_ARCH="arm64";; arm64*) OS_ARCH="arm64";;
*) echo "Unknown system architecture: $OS_ARCH! This script runs only on x86_64 or arm64" && exit *) echo "Unknown system architecture: $OS_ARCH! This script runs only on x86_64 or arm64" && exit
esac esac
# https://mamba.readthedocs.io/en/latest/installation.html
if [ "$OS_NAME" == "linux" ] && [ "$OS_ARCH" == "arm64" ]; then OS_ARCH="aarch64"; fi
# config # config
export MAMBA_ROOT_PREFIX="$(pwd)/installer_files/mamba" export MAMBA_ROOT_PREFIX="$(pwd)/installer_files/mamba"
INSTALL_ENV_DIR="$(pwd)/installer_files/env" INSTALL_ENV_DIR="$(pwd)/installer_files/env"
MICROMAMBA_BINARY_FILE="$(pwd)/installer_files/micromamba_${OS_NAME}_${OS_ARCH}" MICROMAMBA_DOWNLOAD_URL="https://micro.mamba.pm/api/micromamba/${OS_NAME}-${OS_ARCH}/latest"
# figure out whether git and conda needs to be installed # figure out whether git and conda needs to be installed
if [ -e "$INSTALL_ENV_DIR" ]; then export PATH="$INSTALL_ENV_DIR/bin:$PATH"; fi
PACKAGES_TO_INSTALL="" PACKAGES_TO_INSTALL=""
if ! hash "conda" &>/dev/null; then PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL conda"; fi if ! hash "conda" &>/dev/null; then PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL conda"; fi
@ -37,10 +42,14 @@ if ! hash "git" &>/dev/null; then PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL git"
# (if necessary) install git and conda into a contained environment # (if necessary) install git and conda into a contained environment
if [ "$PACKAGES_TO_INSTALL" != "" ]; then if [ "$PACKAGES_TO_INSTALL" != "" ]; then
# initialize micromamba # download micromamba
if [ ! -e "$MAMBA_ROOT_PREFIX" ]; then if [ ! -e "$MAMBA_ROOT_PREFIX/micromamba" ]; then
echo "Downloading micromamba from $MICROMAMBA_DOWNLOAD_URL to $MAMBA_ROOT_PREFIX/micromamba"
mkdir -p "$MAMBA_ROOT_PREFIX" mkdir -p "$MAMBA_ROOT_PREFIX"
cp "$MICROMAMBA_BINARY_FILE" "$MAMBA_ROOT_PREFIX/micromamba" curl -L "$MICROMAMBA_DOWNLOAD_URL" | tar -xvj bin/micromamba -O > "$MAMBA_ROOT_PREFIX/micromamba"
chmod u+x "$MAMBA_ROOT_PREFIX/micromamba"
# test the mamba binary # test the mamba binary
echo "Micromamba version:" echo "Micromamba version:"
@ -77,8 +86,9 @@ fi
CONDA_BASEPATH=$(conda info --base) CONDA_BASEPATH=$(conda info --base)
source "$CONDA_BASEPATH/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script) source "$CONDA_BASEPATH/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script)
conda activate
if [ "$OS_NAME" == "mac" ]; then if [ "$OS_NAME" == "mac" ]; then
if [ "$OS_ARCH" == "x64" ]; then OS_ARCH="64"; fi
PIP_EXISTS_ACTION=w CONDA_SUBDIR=osx-${OS_ARCH} conda env create -f environment-mac.yml PIP_EXISTS_ACTION=w CONDA_SUBDIR=osx-${OS_ARCH} conda env create -f environment-mac.yml
else else
conda env create -f environment.yml conda env create -f environment.yml