#!/bin/bash # Run this in a terminal in the troggle directory: 'bash venv-trog.sh' echo 'Run this in a terminal in the troggle directory: "bash venv-trog.sh"' # Expects an Ubuntu 20.04 relatively clean install. # Running using SQLite 3.31.1 2020-01-27 19:55:54 # Many permissions conflicts under WSL2 mean more sudo needed # If you have not already installed these on your clean Ubuntu install DO THIS FIRST # /usr/bin/python --version : ensure python is an alias for python3 not python2.7 # sudo apt install sqlite3 # sudo apt install python3-pip # this installs a shed-load of other stuff: binutils etc. # sudo apt install python3.9 # sudo apt install python3.9-venv # sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 # on WSL there is an oddity that creating a venv trips over a PowerShell permissions issue # and of course: # sudo apt update # sudo apt dist-upgrade # On a clean debian 11 (bullseye) installation with Xfce & ssh, # as debian does not install everything that ubuntu does, you need: # sudo usermod -a -G sudo expo # to put expo in sudoers group, re-login required # sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 # sudo apt install python3-pip # sudo apt install python3-venv # copy this file and requirements.txt into the directory above where you want to install the VENV VENAME=dj32 # python3.9 and django 3.2 if [ -d requirements.txt ]; then echo "No requirements.txt found. Copy it from your most recent installation." exit 1 fi python --version # LOOK HERE: we go up a level so that /$VENAME is parallel to /troggle cd .. if [ ! -d $VENAME ]; then echo "### Creating venv $VENAME" sudo python -m venv $VENAME else echo "/$VENAME/ already exists ! Delete it first." exit 1 fi # Activate the virtual env and see what the default packages are echo "### Activating $VENAME" cd $VENAME source bin/activate echo "### Activated." # update local version of pip, more recent than OS version # debian bullseye installs pip 20.3.4 which barfs, we want >22.0.3 echo "### installing later version of pip inside $VENAME" python -m pip install --upgrade pip PIP=pip $PIP list > original-pip.list $PIP freeze >original.txt ln -s ../expoweb expoweb ln -s ../troggle troggle ln -s ../loser loser ln -s ../drawings drawings ln -s ../expofiles expofiles # Package Version # ------------- ---------- echo '### links to expoweb, troggle etc. complete' echo '###' echo '### now installing requirements.txt' echo '###' $PIP install -r troggle/requirements.txt echo '### install from requirements.txt completed.' echo '### ' $PIP freeze > requirements.txt # so that we can track requirements more easily with git # because we do not install these with pip, but they are listed by the freeze command # Now find out what we actually installed by subtracting the stuff virtualenv installed anyway sort original.txt > 1 sort requirements.txt >2 comm -3 1 2 --check-order | awk '{ print $1}'>fresh-requirements.txt rm 1 rm 2 cp requirements.txt requirements-$VENAME.txt cp requirements-$VENAME.txt troggle/requirements-$VENAME.txt $PIP list > installed-pip.list $PIP list -o > installed-pip-o.list REQ=installation-record mkdir $REQ mv requirements-$VENAME.txt $REQ mv original.txt $REQ #mv requirements.txt $REQ mv original-pip.list $REQ mv installed-pip.list $REQ mv installed-pip-o.list $REQ cp fresh-requirements.txt ../requirements.txt mv fresh-requirements.txt $REQ cp troggle/`basename "$0"` $REQ python --version echo "Django version:" django-admin --version echo "### Now do 'cd ../$VENAME' 'source bin/activate' 'cd troggle' 'python manage.py test -v 3' "