From a0b1aba50e4a24d919efb2b28230b62536c8dce1 Mon Sep 17 00:00:00 2001 From: Maksim Totmin Date: Mon, 1 Jun 2026 00:55:12 +0700 Subject: [PATCH] fix: resolve iOpenPod import conflict by removing src/ from sys.path during iop imports iTunesDB_Writer's internal 'from ipod_device import ChecksumType' was resolving to our local src/ipod_device.py instead of iOpenPod's version, even with iop path at sys.path[0] (Python 3.14 import resolution quirk). Now temporarily removes project src/ from sys.path during iOpenPod imports, restoring it afterwards. The validated flow: main.py imports local ipod_device first, then _import_iop evicts and replaces it when iPod tab is used. --- src/ipod_nano7_db.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/ipod_nano7_db.py b/src/ipod_nano7_db.py index 8b23081..3984d20 100644 --- a/src/ipod_nano7_db.py +++ b/src/ipod_nano7_db.py @@ -88,19 +88,30 @@ def _import_iop(module_name: str): return _IOP_CACHE[module_name] if not _IOP_READY: - # Evict local shadows ONCE so iOpenPod modules resolve correctly. sys.modules.pop("ipod_device", None) _IOP_READY = True logger.debug("iOpenPod boot: evicted local ipod_device") + src_paths = [p for p in sys.path if p.endswith('/src') or p == 'src'] + for p in src_paths: + sys.path.remove(p) + had_iop = _IOP_ROOT in sys.path if not had_iop: sys.path.insert(0, _IOP_ROOT) + importlib.invalidate_caches() + try: mod = importlib.import_module(module_name) finally: + for p in src_paths: + if p not in sys.path: + sys.path.insert(0, p) if not had_iop: - sys.path.remove(_IOP_ROOT) + try: + sys.path.remove(_IOP_ROOT) + except ValueError: + pass _IOP_CACHE[module_name] = mod return mod