有可能的。您只需将搜索路径添加到 ScriptEngine 对象,如下所示:
var paths = engine.GetSearchPaths();
paths.Add(yourLibsPath); // add directory to search
或者
engine.SetSearchPaths(paths);
然后你可以使用目录中的任何模块,你添加:
import pyFileName # without extension .py
更新
确定。如果您想使用像模块这样的嵌入式资源字符串,您可以使用以下代码:
var scope = engine.CreateScope(); // Create ScriptScope to use it like a module
engine.Execute("import clr\n" +
"clr.AddReference(\"System.Windows.Forms\")\n" +
"import System.Windows.Forms\n" +
"def Hello():\n" +
"\tSystem.Windows.Forms.MessageBox.Show(\"Hello World!\")", scope); // Execute code from string in scope.
现在您有了一个包含所有已执行函数的 ScriptScope 对象(代码中的范围)。您可以将它们插入另一个范围,如下所示:
foreach (var keyValuePair in scope.GetItems())
{
if(keyValuePair.Value != null)
anotherScope.SetVariable(keyValuePair.Key, keyValuePair.Value);
}
或者您可以直接在此 ScriptScope 中执行您的脚本:
dynamic executed = engine.ExecuteFile("Filename.py", scope);
executed.SomeFuncInFilename();
在这个脚本中,你可以使用所有没有import的函数:
def SomeFuncInFilename():
Hello() # uses function from your scope