diff --git a/roles/ensure-tox/README.rst b/roles/ensure-tox/README.rst
index 937c0f847..b81aef3d1 100644
--- a/roles/ensure-tox/README.rst
+++ b/roles/ensure-tox/README.rst
@@ -1,7 +1,7 @@
 Ensure tox is installed
 
-Look for ``tox``, and if not found, install it via ``pip`` into a
-virtual environment for the current user.
+Look for ``tox``, and if not found, install it via ``pip`` in the user
+install directory (i.e., ``pip install --user``).
 
 **Role Variables**
 
diff --git a/roles/ensure-tox/defaults/main.yaml b/roles/ensure-tox/defaults/main.yaml
index 7479455e6..2e2266d2b 100644
--- a/roles/ensure-tox/defaults/main.yaml
+++ b/roles/ensure-tox/defaults/main.yaml
@@ -1,3 +1,2 @@
 tox_executable: tox
-tox_venv_path: '{{ ansible_user_dir }}/.local/tox'
 tox_prefer_python2: false
diff --git a/roles/ensure-tox/tasks/main.yaml b/roles/ensure-tox/tasks/main.yaml
index 8c8fa68e4..39b8402bb 100644
--- a/roles/ensure-tox/tasks/main.yaml
+++ b/roles/ensure-tox/tasks/main.yaml
@@ -4,33 +4,41 @@
   vars:
     ensure_pip_from_packages_with_python2: '{{ tox_prefer_python2 }}'
 
-- name: Check if tox is installed
+- name: Ensure tox is installed
   shell: |
-    command -v {{ tox_executable }} || exit 1
+    set -euo pipefail
+
+    {% if tox_prefer_python2 %}
+    if command -v pip; then
+      PIP=pip
+    elif command -v pip3; then
+      PIP=pip3
+    fi
+    {% else %}
+    if command -v pip3; then
+      PIP=pip3
+    elif command -v pip; then
+      PIP=pip
+    fi
+    {% endif %}
+
+    type {{ tox_executable }} || $PIP install --user tox
   args:
     executable: /bin/bash
-  register: tox_preinstalled
-  failed_when: false
+  register: result
+  changed_when: "'Successfully installed' in result.stdout"
 
-- name: Export preinstalled tox_exectuable
+- name: Set tox_executable fact to pip installed
   set_fact:
-    tox_executable: '{{ tox_executable }}'
+    tox_executable: "{{ ansible_user_dir }}/.local/bin/tox"
     cacheable: true
-  when: tox_preinstalled.rc == 0
+  when: result is changed
 
-- name: Install tox to local env
-  when: tox_preinstalled.rc != 0
-  block:
-    - name: Install tox to local venv
-      pip:
-        name: tox
-        virtualenv_command: '{{ ensure_pip_virtualenv_command }}'
-        virtualenv: '{{ tox_venv_path }}'
-
-    - name: Export installed tox_executable path
-      set_fact:
-        tox_executable: '{{ tox_venv_path }}/bin/tox'
-        cacheable: true
+- name: Set tox_exectuable fact to found tox
+  set_fact:
+    tox_executable: "{{ tox_executable }}"
+    cacheable: true
+  when: result is not changed
 
 - name: Output tox version
   command: "{{ tox_executable }} --version"
diff --git a/test-playbooks/ensure-tox.yaml b/test-playbooks/ensure-tox.yaml
index 854b37b39..67a0001c1 100644
--- a/test-playbooks/ensure-tox.yaml
+++ b/test-playbooks/ensure-tox.yaml
@@ -27,7 +27,7 @@
     - name: Verify tox_executable is set
       assert:
         that:
-          - tox_executable == "{{ ansible_user_dir }}/.local/tox/bin/tox"
+          - tox_executable == "{{ ansible_user_dir }}/.local/bin/tox"
     - name: Verify tox is installed
       command: "{{ tox_executable }} --version"
       register: result