无法在Visual Studio中使用IronPython运行带有库的python脚本

时间:2016-10-03 22:31:03

标签: c# python visual-studio ironpython

我尝试使用IronPython在Visual Studio中运行python脚本,直到我尝试使用python脚本中的任何库,使用此代码。

viewWillAppear

Test.py看起来像这样。

var ipy = Python.CreateRuntime();
dynamic test = ipy.UseFile("C:/Python/Test.py");
var whatever = test.python_string();
MessageBox.Show(whatever);

我尝试添加

def python_string():
    return "Okay"

或Visual Studio程序不会执行的python代码的任何其他libary import语句。

我正在使用Visual Studio 2015,我完全按照他们的网站设置IronPython。我猜我必须将库添加到Visual Studio中的某个位置,但我不知道在哪里或如何。

希望我明白这一点。提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用SharpDevelop时遇到了同样的问题。按照here说明操作,为外部模块/包创建类库(DLL)。将输出DLL添加到项目引用中。然后在C#main()中加载这样的程序集:

// make sure to include "using System.IO"

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "serial.dll");            
engine.Runtime.LoadAssembly(Assembly.LoadFile(path));

engine指的是您的Python ScriptEngine

我用它来为pyserial模块构建一个程序集,并将它们包含在C#/ IronPython项目中。我不知道是否有更好的方法,但经过数小时的挫折,这对我有用。

答案 1 :(得分:0)

当我遇到这个问题时,Stack上有另外一个类似性质的问题,但我现在没有任何运气。 (如果有人遇到它,请在评论中删除一个链接。)

我使用它的方法是向脚本引擎添加路径,就像这样。

        ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null);
        ScriptRuntime runtime = new ScriptRuntime(setup);
        ScriptEngine engine = Python.GetEngine(runtime);

        var paths = engine.GetSearchPaths();
        paths.Add(prod.GetImportScope());
        paths.Add(AppDomain.CurrentDomain.BaseDirectory + "Lib");
        paths.Add(AppDomain.CurrentDomain.BaseDirectory + "selenium");
        engine.SetSearchPaths(paths);

当您在IronPython中运行脚本时,它不会在Python文件的通常范围内运行。因此,您必须告诉它在哪里可以找到Python StdLib以及您要导入的任何其他文件。即使脚本本身运行正常,但如果没有告诉它在哪里找到它的资源,它就不会在IronPython中运行。

我不是IronPython专家,所以可能有一种更有效的方法。