fix: ensure the constraint file is followed also for setuptools

Currently, when the venv is installed or updated, we attempt to
automatically update pip and setuptools within the venv. Unfortunately,
the setuptools package is installed or updated without adhering to the
constraints file, which restricts the setuptools version due to
https://github.com/pypa/setuptools/issues/4480. Resolve this issue by
applying the constraints file to the installation and update of both pip
and setuptools.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
This commit is contained in:
Frantisek Hrbata 2024-07-31 16:15:11 +02:00
parent d92c09a0ad
commit 1679ed83ea

View File

@ -2604,18 +2604,12 @@ def action_install_python_env(args): # type: ignore
warn(f'Removing the existing Python environment in {idf_python_env_path}') warn(f'Removing the existing Python environment in {idf_python_env_path}')
shutil.rmtree(idf_python_env_path) shutil.rmtree(idf_python_env_path)
venv_can_upgrade = False
if os.path.exists(virtualenv_python): if os.path.exists(virtualenv_python):
check_python_venv_compatibility(idf_python_env_path, idf_version) check_python_venv_compatibility(idf_python_env_path, idf_version)
else: else:
if subprocess.run([sys.executable, '-m', 'venv', '-h'], check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode == 0: if subprocess.run([sys.executable, '-m', 'venv', '-h'], check=False, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL).returncode == 0:
# venv available # venv available
virtualenv_options = ['--clear'] # delete environment if already exists virtualenv_options = ['--clear'] # delete environment if already exists
if sys.version_info[:2] >= (3, 9):
# upgrade pip & setuptools
virtualenv_options += ['--upgrade-deps']
venv_can_upgrade = True
info(f'Creating a new Python environment in {idf_python_env_path}') info(f'Creating a new Python environment in {idf_python_env_path}')
@ -2656,17 +2650,19 @@ def action_install_python_env(args): # type: ignore
warn('Found PIP_USER="yes" in the environment. Disabling PIP_USER in this shell to install packages into a virtual environment.') warn('Found PIP_USER="yes" in the environment. Disabling PIP_USER in this shell to install packages into a virtual environment.')
env_copy['PIP_USER'] = 'no' env_copy['PIP_USER'] = 'no'
if not venv_can_upgrade: constraint_file = get_constraints(idf_version) if use_constraints else None
info('Upgrading pip and setuptools...')
subprocess.check_call([virtualenv_python, '-m', 'pip', 'install', '--upgrade', 'pip', 'setuptools'], info('Upgrading pip and setuptools...')
stdout=sys.stdout, stderr=sys.stderr, env=env_copy) run_args = [virtualenv_python, '-m', 'pip', 'install', '--upgrade', 'pip', 'setuptools']
if constraint_file:
run_args += ['--constraint', constraint_file]
subprocess.check_call(run_args, stdout=sys.stdout, stderr=sys.stderr, env=env_copy)
run_args = [virtualenv_python, '-m', 'pip', 'install', '--no-warn-script-location'] run_args = [virtualenv_python, '-m', 'pip', 'install', '--no-warn-script-location']
requirements_file_list = get_requirements(args.features) requirements_file_list = get_requirements(args.features)
for requirement_file in requirements_file_list: for requirement_file in requirements_file_list:
run_args += ['-r', requirement_file] run_args += ['-r', requirement_file]
if use_constraints: if constraint_file:
constraint_file = get_constraints(idf_version)
run_args += ['--upgrade', '--constraint', constraint_file] run_args += ['--upgrade', '--constraint', constraint_file]
if args.extra_wheels_dir: if args.extra_wheels_dir:
run_args += ['--find-links', args.extra_wheels_dir] run_args += ['--find-links', args.extra_wheels_dir]
@ -2680,7 +2676,7 @@ def action_install_python_env(args): # type: ignore
run_args += ['--find-links', wheels_dir] run_args += ['--find-links', wheels_dir]
info('Installing Python packages') info('Installing Python packages')
if use_constraints: if constraint_file:
info(f' Constraint file: {constraint_file}') info(f' Constraint file: {constraint_file}')
info(' Requirement files:') info(' Requirement files:')
info(os.linesep.join(f' - {path}' for path in requirements_file_list)) info(os.linesep.join(f' - {path}' for path in requirements_file_list))