Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfc47172

Browse files
committed
TryToImport is more robust
1 parentff38409 commitfc47172

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

‎src/embed_tests/TestPythonEngineProperties.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,17 @@ public void SetPythonPath()
228228

229229
stringListModules()
230230
{
231-
varpkg_resources=Py.Import("pkg_resources");
232-
varlocals=newPyDict();
233-
locals.SetItem("pkg_resources",pkg_resources);
234-
returnPythonEngine.Eval(@"sorted(['%s==%s' % (i.key, i.version) for i in pkg_resources.working_set])",null,locals.Handle).ToString();
231+
try
232+
{
233+
varpkg_resources=Py.Import("pkg_resources");
234+
varlocals=newPyDict();
235+
locals.SetItem("pkg_resources",pkg_resources);
236+
returnPythonEngine.Eval(@"sorted(['%s==%s' % (i.key, i.version) for i in pkg_resources.working_set])",null,locals.Handle).ToString();
237+
}
238+
catch(PythonExceptionex)
239+
{
240+
returnex.ToString();
241+
}
235242
}
236243

237244
voidCheckImport(stringmoduleName)
@@ -240,12 +247,13 @@ void CheckImport(string moduleName)
240247
module_name = r'{moduleName}'
241248
import sys
242249
import importlib.util
243-
spec = importlib.util.find_spec(module_name)
244-
if spec is None:
245-
raise ImportError('find_spec returned None')
246-
module = importlib.util.module_from_spec(spec)
247-
sys.modules[module_name] = module
248-
spec.loader.exec_module(module)
250+
if module_name not in sys.modules:
251+
spec = importlib.util.find_spec(module_name)
252+
if spec is None:
253+
raise ImportError('find_spec returned None')
254+
module = importlib.util.module_from_spec(spec)
255+
sys.modules[module_name] = module
256+
spec.loader.exec_module(module)
249257
");
250258
}
251259

@@ -254,7 +262,7 @@ void TryToImport(IEnumerable<string> moduleNames, string message)
254262
List<Exception>exceptions=newList<Exception>();
255263
foreach(varmoduleNameinmoduleNames)
256264
{
257-
varexception=TryToImport(moduleName," before setting PythonPath");
265+
varexception=TryToImport(moduleName,message);
258266
if(exception!=null)exceptions.Add(exception);
259267
}
260268
if(exceptions.Count>0)
@@ -280,9 +288,7 @@ Exception TryToImport(string moduleName, string message)
280288
$"{folder} contains{string.Join(Path.PathSeparator.ToString(),Directory.EnumerateFileSystemEntries(folder).Select(fullName=>Path.GetFileName(fullName)).ToArray())}":
281289
"").ToArray();
282290
stringfolderContents=string.Join(" ",messages);
283-
object[]meta_paths=Py.Import("sys").GetAttr("meta_path").As<object[]>();
284-
stringmeta_path=string.Join(Path.PathSeparator.ToString(),meta_paths);
285-
returnnewException($"Py.Import(\"{moduleName}\") failed{message}, sys.path={path}{folderContents} pkg_resources.working_set={ListModules()} sys.meta_path={meta_path}",ex);
291+
returnnewException($"Py.Import(\"{moduleName}\") failed{message}, sys.path={path}{folderContents} pkg_resources.working_set={ListModules()}",ex);
286292
}
287293
}
288294
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp