Skip to content

Commit 1d4feef

Browse files
committed
fix: Windows MSVC detection + managed interpreter Lib/ path
- dispatcher.py: find cl.exe via filesystem glob when vcvarsall not run - core.py: sync_interpreter now detects Lib/ vs lib/ dynamically for Windows managed interpreters (fixes uv_ffi never syncing to cpython-X.Y) - egg cleanup and dist-info cleanup both use same Windows-aware path logic Modified: • src/omnipkg/core.py (+12/-6 lines) • src/omnipkg/dispatcher.py (+14/-1 lines) [gitship-generated]
1 parent 4a7f05f commit 1d4feef

2 files changed

Lines changed: 26 additions & 7 deletions

File tree

src/omnipkg/core.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6806,8 +6806,10 @@ def sync_interpreter(py_ver, target_exe):
68066806
# Detect egg-based pip (e.g. pip 20.2.2 on Python 3.7)
68076807
# and inject it into PYTHONPATH so -m pip works in subprocess
68086808
import glob, os
6809-
sp = Path(target_exe).parent.parent / "lib"
6810-
egg_paths = glob.glob(str(sp / "python*/site-packages/pip-*.egg"))
6809+
_interp_root = Path(target_exe).parent.parent
6810+
_lib_dir = _interp_root / "Lib" if (_interp_root / "Lib").exists() else _interp_root / "lib"
6811+
sp = _lib_dir
6812+
egg_paths = glob.glob(str(sp / "python*/site-packages/pip-*.egg")) or glob.glob(str(sp / "site-packages/pip-*.egg"))
68116813
env = os.environ.copy()
68126814
if egg_paths:
68136815
existing = env.get("PYTHONPATH", "")
@@ -6832,9 +6834,11 @@ def sync_interpreter(py_ver, target_exe):
68326834
except Exception:
68336835
pass
68346836
try:
6835-
sp_path = Path(target_exe).parent.parent / "lib"
6837+
_ir = Path(target_exe).parent.parent
6838+
sp_path = _ir / "Lib" if (_ir / "Lib").exists() else _ir / "lib"
68366839
import glob as _glob
6837-
for sp_dir in _glob.glob(str(sp_path / "python*/site-packages")):
6840+
_sp_dirs = _glob.glob(str(sp_path / "python*/site-packages")) or _glob.glob(str(sp_path / "site-packages"))
6841+
for sp_dir in _sp_dirs:
68386842
sp_dir = Path(sp_dir)
68396843
egg_link = sp_dir / "omnipkg.egg-link"
68406844
if egg_link.exists():
@@ -6852,9 +6856,11 @@ def sync_interpreter(py_ver, target_exe):
68526856
# Clean up stale omnipkg dist-info dirs (leave only current version)
68536857
if result.returncode == 0:
68546858
try:
6855-
sp_path = Path(target_exe).parent.parent / "lib"
6859+
_ir2 = Path(target_exe).parent.parent
6860+
sp_path = _ir2 / "Lib" if (_ir2 / "Lib").exists() else _ir2 / "lib"
68566861
import glob as _glob2
6857-
for sp_dir in _glob2.glob(str(sp_path / "python*/site-packages")):
6862+
_sp_dirs2 = _glob2.glob(str(sp_path / "python*/site-packages")) or _glob2.glob(str(sp_path / "site-packages"))
6863+
for sp_dir in _sp_dirs2:
68586864
sp_dir = Path(sp_dir)
68596865
for di in sp_dir.glob("omnipkg-*.dist-info"):
68606866
ver_in_name = di.name.replace("omnipkg-", "").replace(".dist-info", "")

src/omnipkg/dispatcher.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,21 @@ def _maybe_install_c_dispatcher():
366366
compiler_args = []
367367

368368
if sys.platform == "win32":
369-
# Try MSVC cl.exe first, then MinGW gcc
369+
# Try MSVC cl.exe first (in PATH or common VS install locations)
370370
cl = shutil.which("cl")
371+
if not cl:
372+
# vcvarsall not run — search common MSVC install paths directly
373+
import glob as _cgl
374+
_vs_patterns = [
375+
r"C:\Program Files\Microsoft Visual Studio\*\*\VC\Tools\MSVC\*in\Hostx64d\cl.exe",
376+
r"C:\Program Files (x86)\Microsoft Visual Studio\*\*\VC\Tools\MSVC\*in\Hostx64d\cl.exe",
377+
r"C:\Program Files (x86)\Microsoft Visual Studio\*\*\VC\Tools\MSVC\*in\HostX86d\cl.exe",
378+
]
379+
for _pat in _vs_patterns:
380+
_matches = _cgl.glob(_pat)
381+
if _matches:
382+
cl = _matches[0]
383+
break
371384
if cl:
372385
compiler = cl
373386
compiler_args = ["/O2", "/Fe:{out}", "{src}", "ws2_32.lib"]

0 commit comments

Comments
 (0)