Skip to content

Commit fcc40eb

Browse files
authored
Mypy Dev Requirement Installation Fix (#42973)
* python exe path fix * add install_dev_reqs function * remove print * minor clean * safety * minor comment fix
1 parent eb0ecce commit fcc40eb

File tree

3 files changed

+42
-7
lines changed

3 files changed

+42
-7
lines changed

eng/tools/azure-sdk-tools/azpysdk/Check.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import traceback
55
import sys
66
import shutil
7+
import tempfile
78

89
from typing import Sequence, Optional, List, Any, Tuple
9-
from subprocess import check_call
10-
10+
from subprocess import CalledProcessError, check_call
1111

1212
from ci_tools.parsing import ParsedSetup
1313
from ci_tools.functions import discover_targeted_packages, get_venv_call, install_into_venv, get_venv_python
@@ -111,3 +111,40 @@ def get_targeted_directories(self, args: argparse.Namespace) -> List[ParsedSetup
111111
logger.error(traceback.format_exc())
112112

113113
return targeted
114+
115+
def install_dev_reqs(self, executable: str, args: argparse.Namespace, package_dir: str) -> None:
116+
"""Install dev requirements for the given package."""
117+
dev_requirements = os.path.join(package_dir, "dev_requirements.txt")
118+
119+
requirements = []
120+
if os.path.exists(dev_requirements):
121+
requirements += ["-r", dev_requirements]
122+
else:
123+
logger.warning(f"No dev_requirements.txt found for {package_dir}, skipping installation of dev requirements.")
124+
return
125+
126+
temp_req_file = None
127+
if not getattr(args, "isolate", False):
128+
# don't install azure-sdk-tools when not isolated
129+
with open(dev_requirements, "r") as f:
130+
filtered_req_lines = [
131+
line.strip()
132+
for line in f
133+
if "eng/tools/azure-sdk-tools" not in line
134+
]
135+
with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_req_file:
136+
temp_req_file.write("\n".join(filtered_req_lines))
137+
if temp_req_file.name:
138+
requirements = ["-r", temp_req_file.name]
139+
try:
140+
logger.info(f"Installing dev requirements for {package_dir}")
141+
install_into_venv(executable, requirements, package_dir)
142+
except CalledProcessError as e:
143+
logger.error("Failed to install dev requirements:", e)
144+
raise e
145+
finally:
146+
if temp_req_file and temp_req_file.name:
147+
try:
148+
os.remove(temp_req_file.name)
149+
except Exception as cleanup_error:
150+
logger.warning(f"Failed to remove temporary requirements file: {cleanup_error}")

eng/tools/azure-sdk-tools/azpysdk/mypy.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,13 @@ def run(self, args: argparse.Namespace) -> int:
5252
for parsed in targeted:
5353
package_dir = parsed.folder
5454
package_name = parsed.name
55-
dev_requirements = os.path.join(package_dir, "dev_requirements.txt")
5655
additional_requirements = ADDITIONAL_LOCKED_DEPENDENCIES
5756

5857
executable, staging_directory = self.get_executable(args.isolate, args.command, sys.executable, package_dir)
5958
logger.info(f"Processing {package_name} for mypy check")
6059

6160
# # need to install dev_requirements to ensure that type-hints properly resolve
62-
if os.path.exists(dev_requirements):
63-
additional_requirements += ["-r", dev_requirements]
61+
self.install_dev_reqs(executable, args, package_dir)
6462

6563
# install mypy
6664
try:

eng/tools/azure-sdk-tools/ci_tools/functions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,8 @@ def get_venv_python(venv_path: str) -> str:
505505

506506
# cross-platform python in a venv
507507
bin_dir = "Scripts" if os.name == "nt" else "bin"
508-
return os.path.join(venv_path, bin_dir, "python")
508+
python_exe = "python.exe" if os.name == "nt" else "python"
509+
return os.path.join(venv_path, bin_dir, python_exe)
509510

510511

511512
def install_into_venv(
@@ -526,7 +527,6 @@ def install_into_venv(
526527

527528
if pip_cmd[0] == "uv":
528529
cmd += ["--python", py]
529-
530530
# todo: clean this up so that we're using run_logged from #42862
531531
subprocess.check_call(cmd, cwd=working_directory)
532532

0 commit comments

Comments
 (0)