diff --git a/roles/jupyter-lab/files/jupyter.service b/roles/jupyter-lab/files/jupyter.service
index cd84905bd1a633123b1364315da0fc883ffacd2c..bdbf4478cc954609169ed9a7aa7ed1ac12b5abee 100644
--- a/roles/jupyter-lab/files/jupyter.service
+++ b/roles/jupyter-lab/files/jupyter.service
@@ -5,8 +5,7 @@ Description=Jupyter Lab
 Type=simple
 PIDFile=/run/jupyter.pid
 # Password: [empty string]
-ExecStart=/usr/bin/python3 -m jupyterlab --ip="0.0.0.0"
---notebook-dir=/home/{{ target_user }}/notebooks --no-browser --NotebookApp.password='sha1:9a2d316959ac:843b251c27024afb46174ce40ce0ebebcf29217b'
+ExecStart=/home/{{ target_user }}/.ml-venv/bin/jupyter-lab --ip="0.0.0.0" --notebook-dir=/home/{{ target_user }}/notebooks --no-browser --NotebookApp.password='sha1:9a2d316959ac:843b251c27024afb46174ce40ce0ebebcf29217b'
 User={{ target_user }}
 Group={{ target_user }}
 Restart=always
diff --git a/roles/jupyter-lab/tasks/main.yml b/roles/jupyter-lab/tasks/main.yml
index adb63c14ad7dc4d79f9191fc89c9adceddeb2333..13f4c1bca79bf170298a9533670c9dfe88fd0662 100644
--- a/roles/jupyter-lab/tasks/main.yml
+++ b/roles/jupyter-lab/tasks/main.yml
@@ -19,9 +19,9 @@
     update_cache: true
 
 - name: Install jupyter-lab
-  become: true
   pip:
-    executable: pip3
+    virtualenv_command: /usr/bin/python3 -m venv
+    virtualenv: "/home/{{ target_user }}/.ml-venv"
     name: jupyterlab
     state: present
 
@@ -39,3 +39,4 @@
     state: started
     enabled: true
     daemon_reload: true
+
diff --git a/roles/ml-python-packages/files/requirements.txt b/roles/ml-python-packages/files/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4a89ed45d5ecb42a6855f0f8a97963ee4d3cf356
--- /dev/null
+++ b/roles/ml-python-packages/files/requirements.txt
@@ -0,0 +1,6 @@
+numpy==1.21.*
+matplotlib==3.4.*
+pandas==1.3.*
+Pillow==8.4.*
+scikit-learn==1.0.*
+
diff --git a/roles/ml-python-packages/tasks/main.yml b/roles/ml-python-packages/tasks/main.yml
index 359f487e855c68e7bd4f9c9dbc9bec901f5feebc..ee1c3cf783e0c088e45077b4421e4ca39fe6ba75 100644
--- a/roles/ml-python-packages/tasks/main.yml
+++ b/roles/ml-python-packages/tasks/main.yml
@@ -12,25 +12,23 @@
     state: present
     update_cache: true
 
-- name: Remove conflicting apt packages
-  become: true
-  apt:
-    name:
-      - python3-pil
-      - python3-numpy
-    state: absent
+- name: Copy requirements.txt to remote fs
+  copy:
+    src: files/requirements.txt
+    dest: /tmp/ml-requirements.txt
 
 - name: Install ml python packages
-  become: true
   pip:
-    executable: pip3
-    name:
-      - numpy
-      - sklearn
-      - matplotlib
-      - pandas
-      - Pillow
+    virtualenv_command: /usr/bin/python3 -m venv
+    requirements: /tmp/ml-requirements.txt
+    virtualenv: "/home/{{ target_user }}/.ml-venv"
+    # name:
+      # - numpy
+      # - sklearn
+      # - matplotlib
+      # - pandas
+      # - Pillow
       # - torch
       # - torchvision
       # - fastai
-    state: present
+    # state: present