@@ -218,9 +218,11 @@ jobs:
218218
219219 spec = importlib.util.find_spec("mlx.backend.metal.kernels")
220220 if spec and spec.origin:
221- candidate = pathlib.Path(spec.origin).resolve().parent
222- if candidate.exists():
223- kernels_dir = candidate
221+ candidate_origin = spec.origin
222+ if candidate_origin:
223+ candidate = pathlib.Path(candidate_origin).resolve().parent
224+ if candidate.exists():
225+ kernels_dir = candidate
224226
225227 if kernels_dir is None:
226228 try:
@@ -230,12 +232,21 @@ jobs:
230232 if resource is not None:
231233 try:
232234 with resources.as_file(resource) as extracted:
233- extracted_path = pathlib.Path(extracted)
234- if extracted_path.exists():
235- kernels_dir = extracted_path
235+ if extracted is not None:
236+ extracted_path = pathlib.Path(extracted)
237+ if extracted_path.exists():
238+ kernels_dir = extracted_path
236239 except FileNotFoundError:
237240 pass
238241
242+ if kernels_dir is None:
243+ package_file = getattr(mlx, "__file__", None)
244+ if package_file:
245+ package_dir = pathlib.Path(package_file).resolve().parent
246+ candidate = package_dir / "backend" / "metal" / "kernels"
247+ if candidate.exists():
248+ kernels_dir = candidate
249+
239250 if kernels_dir is None or not kernels_dir.exists():
240251 print("::error::Could not locate the MLX metal kernels directory; checked module spec and importlib resources.")
241252 sys.exit(1)
0 commit comments