feat: Working exercise implementation.
Small things may be missing, but this is the gist of it. All runs in rootless container images (who think internally that they are root).main
commit
6d72287d07
|
@ -0,0 +1,36 @@
|
|||
# DTU Python Support Exercises
|
||||
Implements the exercises at https://pythonsupport.dtu.dk/internal/exercises.html.
|
||||
|
||||
You'll need:
|
||||
- `bash`: To run the `.sh` script.
|
||||
- `podman`: To run the exercises in rootless containers.
|
||||
- `python3`, `python3-pip`, `python3-future`: To pass Exercise 4 (too lazy to containerize `pip show`).
|
||||
|
||||
## Running the Exercises
|
||||
Each exercise will run the corresponding `run.sh` in a rootless container, with `bash -x` (so you can see what they're doing exactly).
|
||||
|
||||
To run them all, run:
|
||||
```
|
||||
for exer in { exer_1_2 exer_2 exer_3 exer_4 exer_5 exer_6 exer_7 exer_8 }; do
|
||||
./run.sh $exer
|
||||
done
|
||||
```
|
||||
|
||||
Each exercise will exit into a bash shell within the container, so you can play around.
|
||||
|
||||
**NOTE**: Exercise 3 should fail, as `numpy==1.23` is not compatible with Python 3.11.
|
||||
|
||||
**NOTE**: Exercise 4 will fail if system-level `pip` and `future` isn't installed.
|
||||
|
||||
## Reuse
|
||||
These `run.sh` files can be used as templates for the described end-to-end installation procedure.
|
||||
Note the MIT license.
|
||||
|
||||
## Running with Non-Debian Image
|
||||
This may be useful for testing / as a baseline for testing installation procedures on any OS.
|
||||
|
||||
In `run.sh`, simply replace
|
||||
```
|
||||
IMAGE="docker.io/debian:bookworm-slim"
|
||||
```
|
||||
with the Docker image of the OS you wish to test.
|
|
@ -0,0 +1,2 @@
|
|||
miniconda-prefix
|
||||
install-miniconda.sh
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/bash
|
||||
|
||||
apt update
|
||||
apt install wget -y
|
||||
|
||||
if [ ! -f /data/install-miniconda.sh ]; then
|
||||
wget -O /data/install-miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
|
||||
chmod +x /data/install-miniconda.sh
|
||||
fi
|
||||
|
||||
/data/install-miniconda.sh -b -f -p /data/miniconda-prefix
|
||||
ln -s /data/miniconda-prefix/bin/conda /usr/local/bin/conda
|
||||
|
||||
bash
|
|
@ -0,0 +1,2 @@
|
|||
.venv-1
|
||||
.venv-2
|
|
@ -0,0 +1,31 @@
|
|||
#!/bin/bash
|
||||
set -e ## Exit if Problems
|
||||
set -u ## Fail on Undefined Variable
|
||||
|
||||
SCRIPT_PATH="$(dirname "$(readlink -f "$0")")"
|
||||
|
||||
apt update
|
||||
apt install python3 python3-venv python-is-python3 -y
|
||||
|
||||
cd "$SCRIPT_PATH"
|
||||
if [ ! -d .venv-1 ]; then
|
||||
python3 -m venv ".venv-1"
|
||||
fi
|
||||
if [ ! -d .venv-2 ]; then
|
||||
python3 -m venv ".venv-2"
|
||||
fi
|
||||
|
||||
. .venv-1/bin/activate
|
||||
pip install numpy==1.24
|
||||
pip install matplotlib==3.6
|
||||
python3 -c "import numpy as np; print(np.array([1, 2, 3]))"
|
||||
deactivate
|
||||
|
||||
. .venv-2/bin/activate
|
||||
pip install numpy==1.23
|
||||
pip install matplotlib==3.6
|
||||
python3 -c "import numpy as np; print(np.array([1, 2, 3]))"
|
||||
deactivate
|
||||
cd -
|
||||
|
||||
bash
|
|
@ -0,0 +1 @@
|
|||
.venv
|
|
@ -0,0 +1,21 @@
|
|||
#!/bin/bash
|
||||
set -e ## Exit if Problems
|
||||
set -u ## Fail on Undefined Variable
|
||||
|
||||
SCRIPT_PATH="$(dirname "$(readlink -f "$0")")"
|
||||
|
||||
apt update
|
||||
apt install python3 python3-venv python-is-python3 git -y
|
||||
|
||||
cd "$SCRIPT_PATH"
|
||||
if [ ! -d .venv ]; then
|
||||
python3 -m venv .venv
|
||||
fi
|
||||
. .venv/bin/activate
|
||||
pip install git+https://github.com/pyparsing/pyparsing.git@c8b76646bf7f883b40951a08365522d286af4963
|
||||
|
||||
pip freeze
|
||||
deactivate
|
||||
cd -
|
||||
|
||||
bash
|
|
@ -0,0 +1 @@
|
|||
02002students
|
|
@ -0,0 +1,26 @@
|
|||
#!/bin/bash
|
||||
set -e ## Exit if Problems
|
||||
set -u ## Fail on Undefined Variable
|
||||
|
||||
SCRIPT_PATH="$(dirname "$(readlink -f "$0")")"
|
||||
|
||||
apt update
|
||||
apt install python3 python3-venv python-is-python3 git -y
|
||||
|
||||
if [ ! -d "$SCRIPT_PATH/02002students" ]; then
|
||||
git clone https://lab.compute.dtu.dk/cp/02002students.git
|
||||
fi
|
||||
|
||||
cd "$SCRIPT_PATH/02002students"
|
||||
if [ ! -d .venv ]; then
|
||||
python3 -m venv .venv
|
||||
fi
|
||||
. .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
python3 -c "import dtumathtools; dir(dtumathtools)"
|
||||
|
||||
pip check
|
||||
deactivate
|
||||
cd -
|
||||
|
||||
bash
|
|
@ -0,0 +1,95 @@
|
|||
#!/bin/bash
|
||||
set -e ## Exit if Problems
|
||||
set -u ## Fail on Undefined Variable
|
||||
|
||||
SCRIPT_PATH="$(dirname "$(readlink -f "$0")")"
|
||||
|
||||
IMAGE="docker.io/debian:bookworm-slim"
|
||||
|
||||
####################
|
||||
# - Actions
|
||||
####################
|
||||
action_exer_1_2() {
|
||||
echo -e "Running Exercise 1.2...\n"
|
||||
podman run \
|
||||
--rm -it \
|
||||
-v "$SCRIPT_PATH/exer_1/exer_1_2":/data \
|
||||
-w /data \
|
||||
"$IMAGE" \
|
||||
bash -x run.sh
|
||||
echo
|
||||
echo
|
||||
}
|
||||
action_exer_2() {
|
||||
echo -e "Running Exercise 2...\n"
|
||||
podman run \
|
||||
--rm -it \
|
||||
-v "$SCRIPT_PATH/exer_2":/data \
|
||||
-w /data \
|
||||
"$IMAGE" \
|
||||
bash -x run.sh
|
||||
echo
|
||||
echo
|
||||
}
|
||||
action_exer_3() {
|
||||
echo -e "Running Exercise 3...\n"
|
||||
podman run \
|
||||
--rm -it \
|
||||
-v "$SCRIPT_PATH/exer_3":/data \
|
||||
-w /data \
|
||||
"$IMAGE" \
|
||||
bash -x run.sh
|
||||
echo
|
||||
echo
|
||||
}
|
||||
action_exer_4() {
|
||||
echo -e "Running Exercise 4...\n"
|
||||
pip show "${2-future}" | grep Location | cut -d ' ' -f 2
|
||||
echo
|
||||
echo
|
||||
}
|
||||
action_exer_5() {
|
||||
echo -e "Running Exercise 5...\n"
|
||||
echo "VSCodium: Activate the venv in the embedded terminal, and use that to run things. pip freeze for package list."
|
||||
echo
|
||||
echo
|
||||
}
|
||||
action_exer_6() {
|
||||
echo -e "Running Exercise 6...\n"
|
||||
echo "This does not use VSCode, as I do not consent to its proprietary licensing. See https://lab.compute.dtu.dk/cp/02002students/-/issues/1 ."
|
||||
echo
|
||||
echo
|
||||
|
||||
podman run \
|
||||
--rm -it \
|
||||
-v "$SCRIPT_PATH/exer_6":/data \
|
||||
-w /data \
|
||||
debian:bookworm-slim \
|
||||
bash run.sh
|
||||
}
|
||||
action_exer_7() {
|
||||
echo "'pip check' is run in exer_6."
|
||||
}
|
||||
action_exer_8() {
|
||||
echo "At this level, it's identical (but slower than) venv. Just replace 'python3 -m venv' with 'virtualenv'. https://virtualenv.pypa.io/en/latest/"
|
||||
}
|
||||
|
||||
####################
|
||||
# - Check Dependencies
|
||||
####################
|
||||
case $1 in
|
||||
exer_1_2)
|
||||
action_exer_1_2
|
||||
;;
|
||||
exer_2)
|
||||
action_exer_2
|
||||
;;
|
||||
exer_3)
|
||||
action_exer_3
|
||||
;;
|
||||
exer_4)
|
||||
action_exer_4
|
||||
;;
|
||||
exer_6)
|
||||
action_exer_6
|
||||
esac
|
Loading…
Reference in New Issue