Skip to content
Snippets Groups Projects
Commit ba42e681 authored by François  LAURENT's avatar François LAURENT
Browse files

feat(install.sh): --free-python-dependencies flag

parent 9ae6a5b9
No related branches found
No related tags found
1 merge request!22Set of commits to be tagger v0.19
Pipeline #143181 passed
......@@ -6,6 +6,7 @@ if [ -z "$BIN_DIR" ]; then
BIN_DIR=~/.local/bin
else
echo "Using environment variable: BIN_DIR= $BIN_DIR"
echo "Only ~/.local/bin is fully supported at the moment"
fi
if [ -z "$LARVATAGGER_PATH" ]; then
LARVATAGGER_PATH=~/.local/share/larvatagger
......@@ -22,6 +23,21 @@ if [ "$1" = "--uninstall" ]; then
done
rm -rf "$BIN_DIR/larvatagger"
rm -rf "$LARVATAGGER_PATH"
# testing only; does not apply to all platforms; do not pass the --full option!
if [ "$2" = "--full" ]; then
PYTHON="python3"
if [[ "`python3 -V`" =~ "Python 3.6" ]] && command -v python3.8 &>/dev/null; then
# issue on Maestro
PYTHON="python3.8"
fi
command -v poetry &>/dev/null && curl -sSL https://install.python-poetry.org | $PYTHON - --uninstall
command -v pyenv &>/dev/null && rm -rf $(pyenv root)
command -v juliaup &>/dev/null && juliaup self uninstall
rm -rf ~/.juliaup
# TODO: clean up .bash_profile for pyenv-related stuff and restart the shell
rm -rf ~/.julia
fi
else
PYTHON_VERSION=3.8
......@@ -30,6 +46,7 @@ PYTHON_VERSION=3.8
# determine whether or not to report externally sourced variables
internal_WITH_BACKEND=
internal_MAGGOTUBA_ADAPTER_BRANCH=
internal_MAGGOTUBA_ADAPTER_FREE_DEPENDENCIES=
for arg in "$@"; do
if [ "$arg" = "--with-default-backend" ]; then
WITH_BACKEND=1
......@@ -45,9 +62,13 @@ for arg in "$@"; do
MAGGOTUBA_ADAPTER_BRANCH=torch2
internal_MAGGOTUBA_ADAPTER_BRANCH=1
PYTHON_VERSION=3.11
elif [ "$arg" = "--free-python-dependencies" ]; then
internal_MAGGOTUBA_ADAPTER_FREE_DEPENDENCIES=1
fi
done
PYTHON="python$PYTHON_VERSION"
if ! command -v curl &>/dev/null; then
if command -v brew &>/dev/null; then
# macOS users are not given the choice as they usually do not care about freedom
......@@ -76,20 +97,97 @@ if ! command -v realpath &>/dev/null; then
fi
fi
if ! command -v julia &>/dev/null; then
if [ -z "$JULIA_VERSION" ]; then
JULIA_VERSION=1.10
else
echo "Using environment variable: JULIA_VERSION= $JULIA_VERSION"
fi
JULIA="julia"
install_juliaup() {
if [ -z "$JULIA_INSTALL_ARGS" ]; then
JULIA_INSTALL_ARGS=-y
else
echo "Using environment variable: JULIA_INSTALL_ARGS= $JULIA_INSTALL_ARGS"
fi
curl -fsSL https://install.julialang.org | sh -s -- $JULIA_INSTALL_ARGS
if [ -f ~/.bashrc ]; then
curl -fsSL https://install.julialang.org | sh -s -- $JULIA_INSTALL_ARGS --default-channel $JULIA_VERSION
if [ -f ~/.bashrc -a -n "`grep "# >>> juliaup initialize >>>" ~/.bashrc`" ]; then
source ~/.bashrc
elif [ -f ~/.bash_profile ]; then
elif [ -f ~/.bash_profile -a -n "`grep "# >>> juliaup initialize >>>" ~/.bash_profile`" ]; then
source ~/.bash_profile
fi
}
if ! command -v $JULIA &>/dev/null; then
install_juliaup
elif ! [[ "`$JULIA -v`" =~ "julia version $JULIA_VERSION" ]]; then
install_juliaup
fi
add_local_bin_to_path() {
if [ "`realpath $BIN_DIR`" = "`realpath ~/.local/bin`" ]; then
# ~/.local/bin not in $PATH?
if [ "$SHELL" = "/bin/zsh" ]; then
rcfile=~/.zshrc
elif [ "$SHELL" = "/bin/bash" ]; then
if [ -f ~/.bashrc ]; then
rcfile=~/.bashrc
elif [ -f ~/.bash_profile ]; then
rcfile=~/.bash_profile
fi
fi
echo "Extending the PATH environment variable in $rcfile"
cat <<"EOF" >>$rcfile
export PATH=$PATH:~/.local/bin
EOF
else
echo "the larvatagger command is available in directory:"
echo " $BIN_DIR"
echo "consider adding the directory to the PATH variable"
fi
export PATH=$PATH:$BIN_DIR
}
install_pyenv_on_ubuntu2004() {
echo
echo "INFO: installing pyenv and its dependencies"
echo
if ! [ -d ~/.pyenv ]; then
sudo apt-get update
sudo apt-get install --no-install-recommends curl build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev xz-utils libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev #tk-dev
curl https://pyenv.run | bash
fi
export PATH=~/.pyenv/bin:$PATH
eval "$(~/.pyenv/bin/pyenv init -)"
cat <<"EOF" >>~/.bash_profile
command -v pyenv &>/dev/null || export PATH=~/.pyenv/bin:$PATH
eval "$(~/.pyenv/bin/pyenv init -)"
EOF
pyenv install $PYTHON_VERSION
}
install_pyenv() {
echo
echo "INFO: installing pyenv"
echo
if ! [ -d ~/.pyenv ]; then
curl https://pyenv.run | bash
fi
if ! command -v pyenv &>/dev/null; then
export PATH=~/.pyenv/bin:$PATH
eval "$(~/.pyenv/bin/pyenv init -)"
cat <<"EOF" >>~/.bash_profile
command -v pyenv &>/dev/null || export PATH=~/.pyenv/bin:$PATH
eval "$(~/.pyenv/bin/pyenv init -)"
EOF
fi
pyenv install $PYTHON_VERSION
pyenv shell $PYTHON_VERSION
}
if [ -n "$WITH_BACKEND" ]; then
if [ "`uname`" = "Darwin" ]; then
echo "WARNING: the default tagging backend is not supported by macOS"
......@@ -98,28 +196,18 @@ if [ -n "$WITH_BACKEND" ]; then
if command -v pyenv &>/dev/null; then
[ `pyenv versions | grep $PYTHON_VERSION` ] || pyenv install $PYTHON_VERSION
elif [[ "`uname -r`" =~ "-microsoft-standard-WSL2" ]]; then
echo
echo "INFO: installing pyenv and its dependencies"
echo
if ! [ -d ~/.pyenv ]; then
sudo apt-get update
sudo apt-get install --no-install-recommends curl build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev xz-utils libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev #tk-dev
curl https://pyenv.run | bash
fi
export PATH=~/.pyenv/bin:$PATH
eval "$(~/.pyenv/bin/pyenv init -)"
cat <<"EOF" >>~/.bashrc
command -v pyenv &>/dev/null || export PATH=~/.pyenv/bin:$PATH
eval "$(~/.pyenv/bin/pyenv init -)"
EOF
pyenv install $PYTHON_VERSION
install_pyenv_on_ubuntu2004
elif [[ "`hostname`" =~ ".cluster.embl.de" ]]; then
install_pyenv
elif [ "`hostname`" = "maestro-submit" ]; then
# we could use `module load Python/<version>` but modules are removed without notice
install_pyenv
else
check_brew
if command -v brew &>/dev/null; then
brew install python@$PYTHON_VERSION
else
echo "WARNING: command python$PYTHON_VERSION not found"
echo "WARNING: command $PYTHON not found"
fi
fi
fi
......@@ -127,7 +215,9 @@ EOF
if command -v pipx &>/dev/null; then
pipx install poetry
else
curl -fsSL https://install.python-poetry.org | python3 -
# explicit Python version for Maestro
curl -fsSL https://install.python-poetry.org | $PYTHON -
command -v poetry &>/dev/null || add_local_bin_to_path
fi
fi
fi
......@@ -158,8 +248,8 @@ else
curl -fsSL https://gitlab.pasteur.fr/nyx/larvatagger.jl/-/archive/${LARVATAGGER_BRANCH}/larvatagger.jl-${LARVATAGGER_BRANCH}.tar.gz | tar zxv
mv larvatagger.jl-${LARVATAGGER_BRANCH} LarvaTagger.jl
fi
(cd LarvaTagger.jl && julia --project=. -e 'using Pkg; Pkg.instantiate()')
[ -d PlanarLarvae ] && (cd LarvaTagger.jl && julia --project=. -e 'using Pkg; Pkg.develop(path="../PlanarLarvae")')
(cd LarvaTagger.jl && $JULIA --project=. -e 'using Pkg; Pkg.instantiate()')
[ -d PlanarLarvae ] && (cd LarvaTagger.jl && $JULIA --project=. -e 'using Pkg; Pkg.develop(path="../PlanarLarvae")')
if [ -z "$WITH_BACKEND" ]; then
......@@ -167,7 +257,16 @@ mkdir -p "$BIN_DIR"
cat <<EOF >"$BIN_DIR"/larvatagger
#!/usr/bin/env bash
if command -v juliaup &>/dev/null; then
PREVIOUS_CHANNEL=\`juliaup status | grep '*' | cut -d'*' -f2 | cut -d\\ -f3\`
juliaup default $JULIA_VERSION &>/dev/null
fi
OPEN_BROWSER=1 "$LARVATAGGER_PATH/LarvaTagger.jl/scripts/larvatagger" \$@
if command -v juliaup &>/dev/null; then
juliaup default \$PREVIOUS_CHANNEL &>/dev/null
fi
EOF
else
......@@ -191,8 +290,8 @@ else
curl -fsSL https://gitlab.pasteur.fr/nyx/TaggingBackends/-/archive/${TAGGINGBACKENDS_BRANCH}/TaggingBackends-${TAGGINGBACKENDS_BRANCH}.tar.gz | tar zxv
mv TaggingBackends-${TAGGINGBACKENDS_BRANCH} TaggingBackends
fi
(cd TaggingBackends && julia --project=. -e 'using Pkg; Pkg.instantiate()')
[ -d PlanarLarvae ] && (cd TaggingBackends && julia --project=. -e 'using Pkg; Pkg.develop(path="../PlanarLarvae")')
(cd TaggingBackends && activate && PYTHON=`command -v python` && $JULIA --project=. -e 'using Pkg; Pkg.instantiate()')
[ -d PlanarLarvae ] && (cd TaggingBackends && $JULIA --project=. -e 'using Pkg; Pkg.develop(path="../PlanarLarvae")')
(cd TaggingBackends && activate && JULIA_PROJECT=$(pwd) poetry install)
if [ -d MaggotUBA-core ]; then
......@@ -221,46 +320,37 @@ else
fi
# setting JULIA_PROJECT may not be necessary at this point
export JULIA_PROJECT=$(realpath TaggingBackends)
(cd MaggotUBA && activate && (cat requirements.txt | xargs -I % sh -c 'poetry add "%"' || true) && poetry install -v)
if [ -z "$internal_MAGGOTUBA_ADAPTER_FREE_DEPENDENCIES" ]; then
(cd MaggotUBA && activate && (cat requirements.txt | xargs -I % sh -c 'poetry add "%"' || true) && poetry install -v)
else
(cd MaggotUBA && activate && poetry install -v)
fi
[ -d TaggingBackends ] && (cd MaggotUBA && activate && poetry remove taggingbackends && poetry add ../TaggingBackends)
[ -d MaggotUBA-core ] && (cd MaggotUBA && activate && poetry remove maggotuba-core && poetry add ../MaggotUBA-core)
(cd MaggotUBA && scripts/make_models.jl default)
(cd MaggotUBA && scripts/make_models.jl default) # julia version does not matter here
mkdir -p "$BIN_DIR"
cat <<EOF >"$BIN_DIR"/larvatagger
#!/usr/bin/env bash
if command -v juliaup &>/dev/null; then
PREVIOUS_CHANNEL=\`juliaup status | grep '*' | cut -d'*' -f2 | cut -d\\ -f3\`
juliaup default $JULIA_VERSION &>/dev/null
fi
JULIA_PROJECT="$(realpath "$LARVATAGGER_PATH/TaggingBackends")" BACKENDS_PATH="$LARVATAGGER_PATH" OPEN_BROWSER=1 "$LARVATAGGER_PATH/LarvaTagger.jl/scripts/larvatagger" \$@
if command -v juliaup &>/dev/null; then
juliaup default \$PREVIOUS_CHANNEL &>/dev/null
fi
EOF
fi
chmod a+x "$BIN_DIR/larvatagger"
if ! command -v larvatagger &>/dev/null; then
if [ "`realpath $BIN_DIR`" = "`realpath ~/.local/bin`" ]; then
# ~/.local/bin not in $PATH?
if [ "$SHELL" = "/bin/zsh" ]; then
rcfile=~/.zshrc
elif [ "$SHELL" = "/bin/bash" ]; then
if [ -f ~/.bashrc ]; then
rcfile=~/.bashrc
elif [ -f ~/.bash_profile ]; then
rcfile=~/.bash_profile
fi
fi
echo "Extending the PATH environment variable in $rcfile"
cat <<"EOF" >>$rcfile
export PATH=$PATH:~/.local/bin
EOF
else
echo "the larvatagger command is available in directory:"
echo " $BIN_DIR"
echo "consider adding the directory to the PATH variable"
fi
export PATH=$PATH:$BIN_DIR
fi
command -v larvatagger &>/dev/null || add_local_bin_to_path
##
popd
......
......@@ -23,10 +23,10 @@ open)
shift
ltargs=
if [ -n "$BACKENDS_PATH" ]; then
ltargs="--backends=\"$BACKENDS_PATH\" $args"
ltargs="--backends=\"$BACKENDS_PATH\" $ltargs"
fi
if [ -n "$OPEN_BROWSER" ]; then
ltargs="--browser $args"
ltargs="--browser $ltargs"
fi
eval "\"$currentdir/larvatagger-gui.jl\" $jlargs\"$datapath\" $ltargs$@"
;;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment