mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
201 lines
6.3 KiB
Bash
Executable file
201 lines
6.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# This script will detect Python installation, create venv with Poetry
|
|
# and install all necessary packages from `poetry.lock` or `pyproject.toml`
|
|
# needed by OpenPype to be included during application freeze on unix.
|
|
|
|
art () {
|
|
cat <<-EOF
|
|
|
|
. . .. . ..
|
|
_oOOP3OPP3Op_. .
|
|
.PPpo~· ·· ~2p. ·· ···· · ·
|
|
·Ppo · .pPO3Op.· · O:· · · ·
|
|
.3Pp · oP3'· 'P33· · 4 ·· · · · ·· · · ·
|
|
·~OP 3PO· .Op3 : · ·· _____ _____ _____
|
|
·P3O · oP3oP3O3P' · · · · / /·/ /·/ /
|
|
O3:· O3p~ · ·:· · ·/____/·/____/ /____/
|
|
'P · 3p3· oP3~· ·.P:· · · ·· · · ·· · · ·
|
|
· ': · Po' ·Opo'· .3O· . o[ by Pype Club ]]]==- - - · ·
|
|
· '_ .. · . _OP3·· · ·https://openpype.io·· ·
|
|
~P3·OPPPO3OP~ · ·· ·
|
|
· ' '· · ·· · · · ·· ·
|
|
|
|
EOF
|
|
}
|
|
|
|
# Colors for terminal
|
|
|
|
RST='\033[0m' # Text Reset
|
|
|
|
# Regular Colors
|
|
Black='\033[0;30m' # Black
|
|
Red='\033[0;31m' # Red
|
|
Green='\033[0;32m' # Green
|
|
Yellow='\033[0;33m' # Yellow
|
|
Blue='\033[0;34m' # Blue
|
|
Purple='\033[0;35m' # Purple
|
|
Cyan='\033[0;36m' # Cyan
|
|
White='\033[0;37m' # White
|
|
|
|
# Bold
|
|
BBlack='\033[1;30m' # Black
|
|
BRed='\033[1;31m' # Red
|
|
BGreen='\033[1;32m' # Green
|
|
BYellow='\033[1;33m' # Yellow
|
|
BBlue='\033[1;34m' # Blue
|
|
BPurple='\033[1;35m' # Purple
|
|
BCyan='\033[1;36m' # Cyan
|
|
BWhite='\033[1;37m' # White
|
|
|
|
# Bold High Intensity
|
|
BIBlack='\033[1;90m' # Black
|
|
BIRed='\033[1;91m' # Red
|
|
BIGreen='\033[1;92m' # Green
|
|
BIYellow='\033[1;93m' # Yellow
|
|
BIBlue='\033[1;94m' # Blue
|
|
BIPurple='\033[1;95m' # Purple
|
|
BICyan='\033[1;96m' # Cyan
|
|
BIWhite='\033[1;97m' # White
|
|
|
|
|
|
poetry_verbosity=""
|
|
while :; do
|
|
case $1 in
|
|
--verbose)
|
|
poetry_verbosity="-vvv"
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
*)
|
|
break
|
|
esac
|
|
shift
|
|
done
|
|
|
|
|
|
##############################################################################
|
|
# Detect required version of python
|
|
# Globals:
|
|
# colors
|
|
# PYTHON
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# None
|
|
###############################################################################
|
|
detect_python () {
|
|
echo -e "${BIGreen}>>>${RST} Using python \c"
|
|
command -v python >/dev/null 2>&1 || { echo -e "${BIRed}- NOT FOUND${RST} ${BIYellow}You need Python 3.7 installed to continue.${RST}"; return 1; }
|
|
local version_command="import sys;print('{0}.{1}'.format(sys.version_info[0], sys.version_info[1]))"
|
|
local python_version="$(python <<< ${version_command})"
|
|
oIFS="$IFS"
|
|
IFS=.
|
|
set -- $python_version
|
|
IFS="$oIFS"
|
|
if [ "$1" -ge "3" ] && [ "$2" -ge "6" ] ; then
|
|
if [ "$2" -gt "7" ] ; then
|
|
echo -e "${BIWhite}[${RST} ${BIRed}$1.$2 ${BIWhite}]${RST} - ${BIRed}FAILED${RST} ${BIYellow}Version is new and unsupported, use${RST} ${BIPurple}3.7.x${RST}"; return 1;
|
|
else
|
|
echo -e "${BIWhite}[${RST} ${BIGreen}$1.$2${RST} ${BIWhite}]${RST}"
|
|
fi
|
|
else
|
|
command -v python >/dev/null 2>&1 || { echo -e "${BIRed}$1.$2$ - ${BIRed}FAILED${RST} ${BIYellow}Version is old and unsupported${RST}"; return 1; }
|
|
fi
|
|
}
|
|
|
|
install_poetry () {
|
|
echo -e "${BIGreen}>>>${RST} Installing Poetry ..."
|
|
export POETRY_HOME="$openpype_root/.poetry"
|
|
command -v curl >/dev/null 2>&1 || { echo -e "${BIRed}!!!${RST}${BIYellow} Missing ${RST}${BIBlue}curl${BIYellow} command.${RST}"; return 1; }
|
|
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
|
|
}
|
|
|
|
##############################################################################
|
|
# Clean pyc files in specified directory
|
|
# Globals:
|
|
# None
|
|
# Arguments:
|
|
# Optional path to clean
|
|
# Returns:
|
|
# None
|
|
###############################################################################
|
|
clean_pyc () {
|
|
local path
|
|
path=$openpype_root
|
|
echo -e "${BIGreen}>>>${RST} Cleaning pyc at [ ${BIWhite}$path${RST} ] ... \c"
|
|
find "$path" -path ./build -o -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
|
|
echo -e "${BIGreen}DONE${RST}"
|
|
}
|
|
|
|
##############################################################################
|
|
# Return absolute path
|
|
# Globals:
|
|
# None
|
|
# Arguments:
|
|
# Path to resolve
|
|
# Returns:
|
|
# None
|
|
###############################################################################
|
|
realpath () {
|
|
echo $(cd $(dirname "$1"); pwd)/$(basename "$1")
|
|
}
|
|
|
|
main () {
|
|
# Main
|
|
if [[ -z $_inside_openpype_tool ]]; then
|
|
echo -e "${BGreen}"
|
|
art
|
|
echo -e "${RST}"
|
|
fi
|
|
detect_python || return 1
|
|
|
|
# Directories
|
|
openpype_root=$(realpath $(dirname $(dirname "${BASH_SOURCE[0]}")))
|
|
|
|
if [[ -z $POETRY_HOME ]]; then
|
|
export POETRY_HOME="$openpype_root/.poetry"
|
|
fi
|
|
|
|
|
|
pushd "$openpype_root" > /dev/null || return > /dev/null
|
|
|
|
echo -e "${BIGreen}>>>${RST} Reading Poetry ... \c"
|
|
if [ -f "$POETRY_HOME/bin/poetry" ]; then
|
|
echo -e "${BIGreen}OK${RST}"
|
|
else
|
|
echo -e "${BIYellow}NOT FOUND${RST}"
|
|
install_poetry || { echo -e "${BIRed}!!!${RST} Poetry installation failed"; return 1; }
|
|
fi
|
|
|
|
if [ -f "$openpype_root/poetry.lock" ]; then
|
|
echo -e "${BIGreen}>>>${RST} Updating dependencies ..."
|
|
else
|
|
echo -e "${BIGreen}>>>${RST} Installing dependencies ..."
|
|
fi
|
|
|
|
"$POETRY_HOME/bin/poetry" install --no-root $poetry_verbosity || { echo -e "${BIRed}!!!${RST} Poetry environment installation failed"; return 1; }
|
|
if [ $? -ne 0 ] ; then
|
|
echo -e "${BIRed}!!!${RST} Virtual environment creation failed."
|
|
return 1
|
|
fi
|
|
|
|
echo -e "${BIGreen}>>>${RST} Cleaning cache files ..."
|
|
clean_pyc
|
|
|
|
# reinstall these because of bug in poetry? or cx_freeze?
|
|
# cx_freeze will crash on missing __pychache__ on these but
|
|
# reinstalling them solves the problem.
|
|
echo -e "${BIGreen}>>>${RST} Post-venv creation fixes ..."
|
|
local openpype_index=$("$POETRY_HOME/bin/poetry" run python "$openpype_root/tools/parse_pyproject.py" tool.poetry.source.0.url)
|
|
echo -e "${BIGreen}- ${RST} Using index: ${BIWhite}$openpype_index${RST}"
|
|
"$POETRY_HOME/bin/poetry" run pip install setuptools==49.6.0
|
|
"$POETRY_HOME/bin/poetry" run pip install --disable-pip-version-check --force-reinstall wheel
|
|
"$POETRY_HOME/bin/poetry" run python -m pip install --disable-pip-version-check --force-reinstall pip
|
|
}
|
|
|
|
return_code=0
|
|
main || return_code=$?
|
|
exit $return_code
|