diff --git a/airflow/utils/python_virtualenv.py b/airflow/utils/python_virtualenv.py index 2da609690da1c..9344c6a3d647c 100644 --- a/airflow/utils/python_virtualenv.py +++ b/airflow/utils/python_virtualenv.py @@ -18,6 +18,7 @@ # """Utilities for creating a virtual environment""" import os +import sys from collections import deque from typing import List, Optional @@ -27,7 +28,7 @@ def _generate_virtualenv_cmd(tmp_dir: str, python_bin: str, system_site_packages: bool) -> List[str]: - cmd = ['virtualenv', tmp_dir] + cmd = [sys.executable, '-m', 'virtualenv', tmp_dir] if system_site_packages: cmd.append('--system-site-packages') if python_bin is not None: diff --git a/tests/utils/test_python_virtualenv.py b/tests/utils/test_python_virtualenv.py index 01ff8803c4151..dc4ee7aa8153f 100644 --- a/tests/utils/test_python_virtualenv.py +++ b/tests/utils/test_python_virtualenv.py @@ -16,6 +16,7 @@ # specific language governing permissions and limitations # under the License. # +import sys import unittest from unittest import mock @@ -29,7 +30,9 @@ def test_should_create_virtualenv(self, mock_execute_in_subprocess): venv_directory="/VENV", python_bin="pythonVER", system_site_packages=False, requirements=[] ) assert "/VENV/bin/python" == python_bin - mock_execute_in_subprocess.assert_called_once_with(['virtualenv', '/VENV', '--python=pythonVER']) + mock_execute_in_subprocess.assert_called_once_with( + [sys.executable, '-m', 'virtualenv', '/VENV', '--python=pythonVER'] + ) @mock.patch('airflow.utils.python_virtualenv.execute_in_subprocess') def test_should_create_virtualenv_with_system_packages(self, mock_execute_in_subprocess): @@ -38,7 +41,7 @@ def test_should_create_virtualenv_with_system_packages(self, mock_execute_in_sub ) assert "/VENV/bin/python" == python_bin mock_execute_in_subprocess.assert_called_once_with( - ['virtualenv', '/VENV', '--system-site-packages', '--python=pythonVER'] + [sys.executable, '-m', 'virtualenv', '/VENV', '--system-site-packages', '--python=pythonVER'] ) @mock.patch('airflow.utils.python_virtualenv.execute_in_subprocess') @@ -51,7 +54,9 @@ def test_should_create_virtualenv_with_extra_packages(self, mock_execute_in_subp ) assert "/VENV/bin/python" == python_bin - mock_execute_in_subprocess.assert_any_call(['virtualenv', '/VENV', '--python=pythonVER']) + mock_execute_in_subprocess.assert_any_call( + [sys.executable, '-m', 'virtualenv', '/VENV', '--python=pythonVER'] + ) mock_execute_in_subprocess.assert_called_with(['/VENV/bin/pip', 'install', 'apache-beam[gcp]'])