From 6feab5ae3cd903168e3bbfda0916b4c557633f63 Mon Sep 17 00:00:00 2001
From: MilesCranmer <miles.cranmer@gmail.com>
Date: Sun, 5 Nov 2023 21:41:31 +0000
Subject: [PATCH] Ensure we can find spec from JuliaModule

---
 src/julia/core.py | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/julia/core.py b/src/julia/core.py
index a5cd3aea..5120b28f 100644
--- a/src/julia/core.py
+++ b/src/julia/core.py
@@ -191,7 +191,7 @@ def __try_getattr(self, name):
         if self._julia.isamodule(jl_fullname):
             realname = self._julia.fullname(self._julia.eval(jl_fullname))
             if self._julia.isdefined(realname):
-                return self.__loader__.load_module("julia." + realname)
+                return self.__loader__.create_module(_find_spec_from_fullname("julia." + realname))
             # Otherwise, it may be, e.g., "Main.anonymous", created by
             # Module().
 
@@ -225,14 +225,17 @@ def __setattr__(self, name, value):
 class JuliaImporter(MetaPathFinder):
 
     def find_spec(self, fullname, path=None, target=None):
-        if fullname.startswith("julia."):
-            filename = fullname.split(".", 2)[1]
-            filepath = os.path.join(os.path.dirname(__file__), filename)
-            if os.path.isfile(filepath + ".py") or os.path.isdir(filepath):
-                return
-            return ModuleSpec(fullname, JuliaModuleLoader(), origin=filepath)
+        return _find_spec_from_fullname(fullname)
 
 
+def _find_spec_from_fullname(fullname):
+    if fullname.startswith("julia."):
+        filename = fullname.split(".", 2)[1]
+        filepath = os.path.join(os.path.dirname(__file__), filename)
+        if os.path.isfile(filepath + ".py") or os.path.isdir(filepath):
+            return
+        return ModuleSpec(fullname, JuliaModuleLoader(), origin=filepath)
+
 class JuliaModuleLoader(Loader):
     @property
     def julia(self):