diff --git a/roles/docker_sdk/defaults/main.yml b/roles/docker_sdk/defaults/main.yml
index 4a5fa76..23698ea 100644
--- a/roles/docker_sdk/defaults/main.yml
+++ b/roles/docker_sdk/defaults/main.yml
@@ -3,7 +3,7 @@
 docker_sdk_packages:
   - "python3-setuptools"
   - "python3-pip"
-  - "{% if ansible_facts.distribution_release == 'bookworm' and virtualenv is none %}python3-docker{% endif %}"
+  - "{% if docker_sdk_python_externally_managed | default(false) and virtualenv is none %}python3-docker{% endif %}"
 
 # List of Python packages to install via Pip.
 # NOTE(mnasiadka) docker 3.0.0 is in kolla-ansible requirements
diff --git a/roles/docker_sdk/tasks/main.yml b/roles/docker_sdk/tasks/main.yml
index f9ca898..7b338e5 100644
--- a/roles/docker_sdk/tasks/main.yml
+++ b/roles/docker_sdk/tasks/main.yml
@@ -1,4 +1,23 @@
 ---
+- name: Handling for Python3.10+ externally managed environments
+  block:
+    - name: Get Python
+      ansible.builtin.command: "{{ ansible_facts.python.executable }} -c 'import sysconfig; print(sysconfig.get_path(\"stdlib\", sysconfig.get_default_scheme()))'"
+      changed_when: false
+      register: python_default_scheme_path
+
+    - name: Check if Python environment is externally managed
+      ansible.builtin.stat:
+        path: "{{ python_default_scheme_path.stdout }}/EXTERNALLY-MANAGED"
+      register: python_externally_managed
+
+    - name: Set docker_sdk_python_externally_managed fact
+      set_fact:
+        docker_sdk_python_externally_managed: true
+      when: python_externally_managed.stat.exists
+
+  when: ansible_facts.python.version.major == 3 and ansible_facts.python.version.minor >= 10
+
 - name: Install packages
   package:
     name: "{{ docker_sdk_packages | select | list }}"
@@ -18,7 +37,7 @@
   become_user: "{{ docker_sdk_virtualenv_owner }}"
   when: virtualenv is not none
 
-- name: Install docker SDK for python
+- name: Install docker SDK for python using pip
   pip:
     name: "{{ docker_sdk_pip_packages }}"
     executable: "{{ virtualenv is none | ternary('pip3', omit) }}"
@@ -28,4 +47,4 @@
     virtualenv_command: "{{ virtualenv is none | ternary(omit, 'python' ~ host_python_version ~ ' -m venv') }}"
   become: true
   become_user: "{{ virtualenv is none | ternary(omit, docker_sdk_virtualenv_owner) }}"
-  when: not (ansible_facts.distribution_release == "bookworm" and virtualenv is none)
+  when: not (docker_sdk_python_externally_managed | default(false) and virtualenv is none)
diff --git a/roles/podman_sdk/defaults/main.yml b/roles/podman_sdk/defaults/main.yml
index 10b25f1..40e7c02 100644
--- a/roles/podman_sdk/defaults/main.yml
+++ b/roles/podman_sdk/defaults/main.yml
@@ -3,7 +3,7 @@
 podman_sdk_packages:
   - "python3-setuptools"
   - "python3-pip"
-  - "{% if ansible_facts.distribution_release == 'bookworm' and virtualenv is none %}python3-podman{% endif %}"
+  - "{% if podman_sdk_python_externally_managed | default(false) and virtualenv is none %}python3-podman{% endif %}"
 
 # List of Python packages to install via Pip.
 # NOTE(kevko) podman 4.7.0 is built in debian as apt package, so..
diff --git a/roles/podman_sdk/tasks/main.yml b/roles/podman_sdk/tasks/main.yml
index b8679ab..b8809c1 100644
--- a/roles/podman_sdk/tasks/main.yml
+++ b/roles/podman_sdk/tasks/main.yml
@@ -1,4 +1,23 @@
 ---
+- name: Handling for Python3.10+ externally managed environments
+  block:
+    - name: Get Python
+      ansible.builtin.command: "{{ ansible_facts.python.executable }} -c 'import sysconfig; print(sysconfig.get_path(\"stdlib\", sysconfig.get_default_scheme()))'"
+      changed_when: false
+      register: python_default_scheme_path
+
+    - name: Check if Python environment is externally managed
+      ansible.builtin.stat:
+        path: "{{ python_default_scheme_path.stdout }}/EXTERNALLY-MANAGED"
+      register: python_externally_managed
+
+    - name: Set podman_sdk_python_externally_managed fact
+      set_fact:
+        podman_sdk_python_externally_managed: true
+      when: python_externally_managed.stat.exists
+
+  when: ansible_facts.python.version.major == 3 and ansible_facts.python.version.minor >= 10
+
 - name: Configure osbpo apt repository
   block:
     - name: Ensure apt sources list directory exists
@@ -44,6 +63,7 @@
         update_cache: true
   when:
     - ansible_facts.distribution == 'Debian'
+    - podman_sdk_python_externally_managed | default(false)
     - virtualenv is none
   become: True
 
@@ -76,4 +96,4 @@
     virtualenv_command: "{{ virtualenv is none | ternary(omit, 'python' ~ host_python_version ~ ' -m venv') }}"
   become: true
   become_user: "{{ virtualenv is none | ternary(omit, podman_sdk_virtualenv_owner) }}"
-  when: not (ansible_facts.distribution_release == "bookworm" and virtualenv is none)
+  when: not (podman_sdk_python_externally_managed | default(false) and virtualenv is none)