使用IronPython DLR Hosting API运行python代码时,Python导入包不起作用

时间:2013-06-04 19:37:23

标签: c# ironpython

我搜索过StackOverflow,但没有找到解决我问题的方法。 我正在使用Iron Python 2.7.3 DLR Hosting API。 我要做的是从C#代码调用纯python脚本的python函数。我从here中取了示例,这个简单的代码就像一个魅力。 但我的用例稍微复杂一点,在我的python模块中,我正在进行非标准软件包和模块的导入。

MyModule.py

import sys
sys.path.append(r"C:\Program Files (x86)\IronPython 2.7")
sys.path.append(r"C:\Program Files (x86)\IronPython 2.7\Lib")
sys.path.append(r"C:\Program Files (x86)\IronPython 2.7\Lib\lib2to3")

import os
import clr

sys.path.append(r'C:\MyPythonCodeLocation')
# mypackage are located at C:\MyPythonCodeLocation
import mypackage

def foo(p):
    print '{0}: module - {1}, package - {2}'.format(p,__name__,__package__);

然后我从c#这样调用foo函数

var pyRuntime = Python.CreateRuntime();
ScriptEngine pyEng = pyRuntime.GetEngine("python");
ScriptSource source = pyEng.CreateScriptSourceFromFile("MyModule.py");
ScriptScope scope = pyEng.CreateScope();
source.Execute(scope);               
Func<int, bool> f = bis.GetVariable<Func<int, bool>>("foo");
f(1);

但是Source.Execute(scope);会抛出异常 - ValueError:在非包中尝试相对导入

如果我从脚本中删除import mypackage,一切都会顺利进行。当然在python控制台中,这个脚本运行正常,所有导入都正确解析。 还有一件事要提一下,我的Visual Studio项目位于C:\ users \ Me \ MyDocuments ...... \ PythonDLRTest,当然还有从那里运行。导入如脚本所示的包,我猜测我面临的问题是与这些路径有关的问题。

可能有人可以解释我做错了什么以及如何解决这个导入问题。理解python和ironpython之间的低级差异以及为什么导入分辨率应该不同,这将是非常有趣的。

0 个答案:

没有答案