From 1e1d42149110cb0fe6b953f15d536c6aec72f841 Mon Sep 17 00:00:00 2001
From: Michael <m.langguth@fz-juelich.de>
Date: Thu, 27 Jan 2022 10:37:02 +0100
Subject: [PATCH] Introduce base directory to set up virtual environments for
 use in the TF1.15 singularity container.

---
 .../env_setup/create_env.sh                   | 14 +++----
 .../env_setup/install_venv_container.sh       | 41 ++++++++++++-------
 2 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/video_prediction_tools/env_setup/create_env.sh b/video_prediction_tools/env_setup/create_env.sh
index 9693d145..4ebfd58e 100755
--- a/video_prediction_tools/env_setup/create_env.sh
+++ b/video_prediction_tools/env_setup/create_env.sh
@@ -48,7 +48,7 @@ ENV_NAME=$1
 THIS_DIR="$(pwd)"
 WORKING_DIR="$(dirname "$THIS_DIR")"
 EXE_DIR="$(basename "$THIS_DIR")"
-ENV_DIR=${WORKING_DIR}/${ENV_NAME}
+ENV_DIR=${WORKING_DIR}/virtual_envs/${ENV_NAME}
 TF_CONTAINER=${WORKING_DIR}/HPC_scripts/tensorflow_21.09-tf1-py3.sif
 
 ## perform sanity checks
@@ -98,14 +98,10 @@ if [[ "$ENV_EXIST" == 0 ]]; then
   info_str="Virtual environment ${ENV_DIR} has been set up successfully."
 elif [[ "$ENV_EXIST" == 1 ]]; then
   # loading modules of postprocessing and activating virtual env are suifficient
-  if [[ "${bool_container}" == 0 ]]; then
-    source ${ENV_SETUP_DIR}/modules_postprocess.sh
-    # activate virtual envirionment
-    source ${ENV_DIR}/bin/activate
-  else
-    # activate virtual envirionment with path-adaption
-    source ${ENV_DIR}/${ENV_NAME}/bin/activate
-  fi
+  source ${ENV_SETUP_DIR}/modules_postprocess.sh
+  # activate virtual envirionment
+  source ${ENV_DIR}/bin/activate
+  
   info_str="Virtual environment ${ENV_DIR} has been activated successfully."
 fi
 
diff --git a/video_prediction_tools/env_setup/install_venv_container.sh b/video_prediction_tools/env_setup/install_venv_container.sh
index d5d8b99c..33f3929b 100755
--- a/video_prediction_tools/env_setup/install_venv_container.sh
+++ b/video_prediction_tools/env_setup/install_venv_container.sh
@@ -10,9 +10,9 @@
 
 # set some basic variables
 BASE_DIR="$(pwd)"
-VENV_BASE=$1
-VENV_NAME="$(basename "${VENV_BASE}")"
-VENV_DIR=${VENV_BASE}/${VENV_NAME}
+VENV_DIR=$1
+VENV_NAME="$(basename "${VENV_DIR}")"
+VENV_BASE="$(dirname "${VENV_DIR}")"
 VENV_REQ=${BASE_DIR}/requirements.txt
 
 # sanity checks
@@ -40,15 +40,26 @@ if [ ! -f "${VENV_REQ}" ]; then
   return
 fi
 
+# create or change to  base directory for virtual environment (i.e. where the virtualenv-module is placed)
+if ! [[ -d "${VENV_BASE}" ]]; then
+  mkdir "${VENV_BASE}"
+  # Install virtualenv in this directory
+  echo "Installing virtualenv under ${VENV_BASE}..."
+  pip install --target="${VENV_BASE}/" virtualenv
+  # Change into the base-directory of virtual environments...
+  cd "${VENV_BASE}" || return
+else
+  # Change into the base-directory of virtual environments...
+  cd "${VENV_BASE}" || return
+  if ! python -m virtualenv --version >/dev/null; then
+    echo "ERROR: Base directory for virtual environment exists, but virtualenv-module is unavailable."
+    exit
+  fi
+  echo "Virtualenv is already installed."
+fi
+
 
-# create basic target directory for virtual environment
-mkdir "${VENV_BASE}"
-# Install virtualenv in this directory
-echo "Installing virtualenv under ${VENV_BASE}..."
-pip install --target="${VENV_BASE}/" virtualenv
-# Change into the directory...
-cd "${VENV_BASE}" || exit
-# .. to set-up virtual environment therein
+# Set-up virtual environment in base directory for virtual environments
 python -m virtualenv -p /usr/bin/python "${VENV_NAME}"
 # Activate virtual environment and install required packages
 echo "Actiavting virtual environment ${VENV_NAME} to install required Python modules..."
@@ -62,10 +73,10 @@ export PYTHONPATH=${WORKING_DIR}/model_modules:$PYTHONPATH
 export PYTHONPATH=${WORKING_DIR}/postprocess:$PYTHONPATH
 # ... also ensure that PYTHONPATH is appended when activating the virtual environment...
 echo 'export PYTHONPATH="/usr/local/lib/python3.8/dist-packages/"' >> "${ACT_VENV}"
-echo 'export PYTHONPATH=${WORKING_DIR}:$PYTHONPATH' >> ${ACT_VENV}
-echo 'export PYTHONPATH=${WORKING_DIR}/utils:$PYTHONPATH' >> ${ACT_VENV}
-echo 'export PYTHONPATH=${WORKING_DIR}/model_modules:$PYTHONPATH' >> ${ACT_VENV}
-echo 'export PYTHONPATH=${WORKING_DIR}/postprocess:$PYTHONPATH' >> ${ACT_VENV}
+echo 'export PYTHONPATH='${WORKING_DIR}':$PYTHONPATH' >> ${ACT_VENV}
+echo 'export PYTHONPATH='${WORKING_DIR}'/utils:$PYTHONPATH' >> ${ACT_VENV}
+echo 'export PYTHONPATH='${WORKING_DIR}'/model_modules:$PYTHONPATH' >> ${ACT_VENV}
+echo 'export PYTHONPATH='${WORKING_DIR}'/postprocess:$PYTHONPATH' >> ${ACT_VENV}
 # ... install requirements
 pip install --no-cache-dir -r "${VENV_REQ}"
 
-- 
GitLab