add scripts and dependencies

This commit is contained in:
Ondrej Samohel 2021-01-28 18:02:07 +01:00
parent 097f6f8808
commit 7dda7b37ac
5 changed files with 245 additions and 86 deletions

View file

@ -16,9 +16,9 @@ Requirements
------------
Pype will run on most typical hardware configurations commonly found in studios around the world.
It is installed on artist computer and can take up 3Gb of space depending on number of versions
and other dependencies.
and other dependencies.
For well functioning [ftrack](https://www.ftrack.com/en/) event server, we recommend a
For well functioning [ftrack](https://www.ftrack.com/en/) event server, we recommend a
linux virtual server with [Ubuntu](https://ubuntu.com/) or [CentosOS](https://www.centos.org/).
CPU and RAM allocation need differ based on the studio size, but a 2GB of RAM, with a
dual core CPU and around 4GB of storage should suffice.
@ -57,6 +57,27 @@ it will install it on current computer.
Pype is build using [CX_Freeze](https://cx-freeze.readthedocs.io/en/latest) to freeze itself and all dependencies.
### MacOS
You will need [Python 3.7 and newer](https://www.python.org/downloads/) and [git](https://git-scm.com/downloads). You'll need also other tools to build
some Pype dependencies like [CMake](https://cmake.org/) and **XCode Command Line Tools** (or some other build system).
You can install **XCode Command Line Tools** from Terminal:
```sh
xcode-select --install
```
Before building Pype be sure to make **CMake** available in `PATH`:
```sh
export PATH=$PATH:/Applications/CMake.app/Contents/bin
```
#### To build Pype:
1) Run `.\tools\create_env.sh` to create virtual environment in `.\venv`
2) Run `.\tools\build.sh` to build Pype executables in `.\build\`
Running Pype
------------
@ -103,4 +124,4 @@ Running tests
To run tests, execute `.\tools\run_tests.ps1`.
**Note that it needs existing virtual environment.**
**Note that it needs existing virtual environment.**

View file

@ -14,8 +14,9 @@ ffmpeg-python
google-api-python-client
jsonschema
keyring
jinxed
log4mongo
git+https://github.com/pypeclub/OpenTimelineIO.git@develop
git+https://github.com/PixarAnimationStudios/OpenTimelineIO.git
pathlib2
Pillow
pyblish-base

View file

@ -53,8 +53,7 @@ include_files = [
"schema",
"vendor",
"LICENSE",
"README.md",
"pype/version.py"
"README.md"
]
if sys.platform == "win32":
@ -75,7 +74,7 @@ executables = [
Executable("start.py", base=None,
target_name="pype_console", icon=icon_path.as_posix()),
Executable("start.py", base=base,
target_name="pype", icon=icon_path.as_posix())
target_name="pype_gui", icon=icon_path.as_posix())
]
setup(

113
tools/build.sh Normal file → Executable file
View file

@ -1,4 +1,10 @@
#!/usr/bin/env bash
# This script will detect Python installation, create venv and install
# all necessary packages from `requirements.txt` needed by Pype to be
# included during application freeze on Unix.
art () {
cat <<-EOF
____________
@ -47,70 +53,6 @@ BICyan='\033[1;96m' # Cyan
BIWhite='\033[1;97m' # White
###############################################################################
# Test if Xcode Command Line tools are installed in MacOS
###############################################################################
have_command_line_tools() {
[[ -e "/Library/Developer/CommandLineTools/usr/bin/git" ]]
}
###############################################################################
# Get command any key from user
###############################################################################
getc() {
local save_state
save_state=$(/bin/stty -g)
/bin/stty raw -echo
IFS= read -r -n 1 -d '' "$@"
/bin/stty "$save_state"
}
###############################################################################
# Test if we have access via sudo
# Used in MacOS
###############################################################################
have_sudo_access() {
if [[ -z "${HAVE_SUDO_ACCESS-}" ]]; then
/usr/bin/sudo -l mkdir &>/dev/null
HAVE_SUDO_ACCESS="$?"
fi
if [[ "$HAVE_SUDO_ACCESS" -ne 0 ]]; then
echo -e "${BIRed}!!!${RST} Need sudo access on MacOS"
return 1
fi
return "$HAVE_SUDO_ACCESS"
}
###############################################################################
# Execute command and report failure
###############################################################################
execute() {
if ! "$@"; then
echo -e "${BIRed}!!!${RST} Failed execution of ${BIWhite}[ $@ ]${RST}"
fi
}
###############################################################################
# Execute command using sudo
# This is used on MacOS to handle Xcode command line tools installation
###############################################################################
execute_sudo() {
local -a args=("$@")
if [[ -n "${SUDO_ASKPASS-}" ]]; then
args=("-A" "${args[@]}")
fi
if have_sudo_access; then
echo -e "${BIGreen}>->${RST} sudo: [${BIWhite} ${args[@]} ${RST}]"
execute "/usr/bin/sudo" "${args[@]}"
else
echo -e "${BIGreen}>->${RST} [${BIWhite} ${args[@]} ${RST}]"
execute "${args[@]}"
fi
}
##############################################################################
# Detect required version of python
# Globals:
@ -122,7 +64,7 @@ execute_sudo() {
# None
###############################################################################
detect_python () {
echo -e "${BIYellow}>>>${RST} Forced using python at [ ${BIWhite}[ $PYPE_PYTHON_EXE ]${RST} ... \c"
echo -e "${BIGreen}>>>${RST} Using Python \c"
local version_command="import sys;print('{0}.{1}'.format(sys.version_info[0], sys.version_info[1]))"
local python_version="$(python3 <<< ${version_command})"
oIFS="$IFS"
@ -130,7 +72,7 @@ detect_python () {
set -- $python_version
IFS="$oIFS"
if [ "$1" -ge "3" ] && [ "$2" -ge "6" ] ; then
echo -e "${BIGreen}$1.$2${RST}"
echo -e "${BIWhite}[${RST} ${BIGreen}$1.$2${RST} ${BIWhite}]${RST}"
PYTHON="python3"
else
command -v python3 >/dev/null 2>&1 || { echo -e "${BIRed}FAILED${RST} ${BIYellow} Version [${RST}${BICyan}$1.$2${RST}]${BIYellow} is old and unsupported${RST}"; return 1; }
@ -147,27 +89,40 @@ detect_python () {
# None
###############################################################################
clean_pyc () {
path=${1:-$PYPE_SETUP_PATH}
echo -e "${IGreen}>>>${RST} Cleaning pyc at [ ${BIWhite}$path${RST} ] ... \c"
path=${1:-$pype_root}
echo -e "${BIGreen}>>>${RST} Cleaning pyc at [ ${BIWhite}$path${RST} ] ... \c"
find "$path" -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
echo -e "${BIGreen}DONE${RST}"
}
realpath () {
echo $(cd $(dirname "$1"); pwd)/$(basename "$1")
}
# Main
art
detect_python || return 1
version_command="import version;print(version.__version__)"
pype_version="$(python3 <<< ${version_command})"
echo -e "${IGreen}>>>${RST} Building Pype [${IGreen} v$pype_version ${RST}]"
echo -e "${IGreen}>>>${RST} Creating virtual env ..."
python3 -m venv venv
echo -e "${IGreen}>>>${RST} Entering venv ..."
# Directories
current_dir=$(realpath "$(pwd)")
pype_root=$(realpath "${BASH_SOURCE[0]}")
pushd "$pype_root" > /dev/null
version_command="from pathlib import Path;version = {};pype_root = '$pype_root';with open(pype_root / 'pype' / 'version.py') as fp exec(fp.read(), version);print(version['__version__'])"
# pype_version="$(python3 <<< ${version_command})"
echo -e "${BIYellow}---${RST} Cleaning build directory ..."
rm -rf "$pype_root/build" && mkdir "$pype_root/build" > /dev/null
# echo -e "${BIGreen}>>>${RST} Building Pype [${IGreen} v$pype_version ${RST}]"
echo -e "${BIGreen}>>>${RST} Entering venv ..."
source venv/bin/activate
echo -e "${IGreen}>>>${RST} Installing packages to new venv ..."
pip install -r requirements.txt
echo -e "${IGreen}>>>${RST} Cleaning cache files ..."
echo -e "${BIGreen}>>>${RST} Cleaning cache files ..."
clean_pyc
echo -e "${IGreen}>>>${RST} Building ..."
python setup.py build
echo -e "${BIGreen}>>>${RST} Building ..."
python "$pype_root/setup.py" build > "$pype_root/build/build.log"
python -B "$pype_root/tools/build_dependencies.py"
echo -e "${BIGreen}>>>${RST} Deactivating venv ..."
deactivate
echo -e "${BICyan}>>>${RST} All done. You will find Pype and build log in \c"
echo -e "${BIWhite}$pype_root/build${RST} directory."

183
tools/create_env.sh Executable file
View file

@ -0,0 +1,183 @@
#!/usr/bin/env bash
# This script will detect Python installation, create venv and install
# all necessary packages from `requirements.txt` needed by Pype to be
# included during application freeze on Unix.
art () {
cat <<-EOF
____________
/\\ \\
\\ \\ --- \\
\\ \\ _____/ ______
\\ \\ \\___/ /\\ \\
\\ \\____\\ \\ \\_____\\
\\/____/ \\/_____/ PYPE Club .
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
###############################################################################
# Test if Xcode Command Line tools are installed in MacOS
###############################################################################
have_command_line_tools() {
[[ -e "/Library/Developer/CommandLineTools/usr/bin/git" ]]
}
###############################################################################
# Get command any key from user
###############################################################################
getc() {
local save_state
save_state=$(/bin/stty -g)
/bin/stty raw -echo
IFS= read -r -n 1 -d '' "$@"
/bin/stty "$save_state"
}
###############################################################################
# Test if we have access via sudo
# Used in MacOS
###############################################################################
have_sudo_access() {
if [[ -z "${HAVE_SUDO_ACCESS-}" ]]; then
/usr/bin/sudo -l mkdir &>/dev/null
HAVE_SUDO_ACCESS="$?"
fi
if [[ "$HAVE_SUDO_ACCESS" -ne 0 ]]; then
echo -e "${BIRed}!!!${RST} Need sudo access on MacOS"
return 1
fi
return "$HAVE_SUDO_ACCESS"
}
###############################################################################
# Execute command and report failure
###############################################################################
execute() {
if ! "$@"; then
echo -e "${BIRed}!!!${RST} Failed execution of ${BIWhite}[ $@ ]${RST}"
fi
}
###############################################################################
# Execute command using sudo
# This is used on MacOS to handle Xcode command line tools installation
###############################################################################
execute_sudo() {
local -a args=("$@")
if [[ -n "${SUDO_ASKPASS-}" ]]; then
args=("-A" "${args[@]}")
fi
if have_sudo_access; then
echo -e "${BIGreen}>->${RST} sudo: [${BIWhite} ${args[@]} ${RST}]"
execute "/usr/bin/sudo" "${args[@]}"
else
echo -e "${BIGreen}>->${RST} [${BIWhite} ${args[@]} ${RST}]"
execute "${args[@]}"
fi
}
##############################################################################
# Detect required version of python
# Globals:
# colors
# PYTHON
# Arguments:
# None
# Returns:
# None
###############################################################################
detect_python () {
echo -e "${BIGreen}>>>${RST} Using python \c"
local version_command="import sys;print('{0}.{1}'.format(sys.version_info[0], sys.version_info[1]))"
local python_version="$(python3 <<< ${version_command})"
oIFS="$IFS"
IFS=.
set -- $python_version
IFS="$oIFS"
if [ "$1" -ge "3" ] && [ "$2" -ge "6" ] ; then
echo -e "${BIWhite}[${RST} ${BIGreen}$1.$2${RST} ${BIWhite}]${RST}"
PYTHON="python3"
else
command -v python3 >/dev/null 2>&1 || { echo -e "${BIRed}FAILED${RST} ${BIYellow} Version [${RST}${BICyan}$1.$2${RST}]${BIYellow} is old and unsupported${RST}"; return 1; }
fi
}
##############################################################################
# Clean pyc files in specified directory
# Globals:
# None
# Arguments:
# Optional path to clean
# Returns:
# None
###############################################################################
clean_pyc () {
path=${1:-$pype_root}
echo -e "${IGreen}>>>${RST} Cleaning pyc at [ ${BIWhite}$path${RST} ] ... \c"
find "$path" -regex '^.*\(__pycache__\|\.py[co]\)$' -delete
echo -e "${BIGreen}DONE${RST}"
}
# Main
art
detect_python || return 1
# Directories
current_dir="$(pwd)"
pype_root=`dirname $(dirname "${BASH_SOURCE[0]}")`
pushd "$pype_root" > /dev/null
echo -e "${BIYellow}---${RST} Cleaning venv directory ..."
rm -rf "$pype_root/venv" && mkdir "$pype_root/venv"
echo -e "${BIGreen}>>>${RST} Creating venv ..."
python3 -m venv "$pype_root/venv"
echo -e "${BIGreen}>>>${RST} Entering venv ..."
source "$pype_root/venv/bin/activate"
echo -e "${BIGreen}>>>${RST} Installing packages to new venv ..."
pip install -r "$pype_root/requirements.txt"
echo -e "${BIGreen}>>>${RST} Cleaning cache files ..."
clean_pyc
deactivate