2010-09-13 265 views
3

我遵循这里最好的答案,以一个T,用Pyc.py编译的例子。IronPython,导入模块

Build Python scripts and call methods from C#

我在pyScope = pyEngine.ImportModule("MyClass");

no module named MyClass 

我相信这是一个错误,因为有时候与Pyc.py重新编译会产生一个dll ImportModule认识得到一个异常,但有时它不。

结论:正如下面digEmAll所指出的那样,用Pyc.py编译模块可以产生随机结果。而是手动调用clr.CompileModules。

回答

7

行, 我明白了。

模块名称是原始.py模块的(区分大小写)名称,而不是编译后的dll。

我的意思是,如果你原来的模块名称是myClass.py,那么你在MyClass.dll编译它,你必须ImportModule("myClass")ImportModule("MyClass")


编辑:

前面的代码是指以下编译方法:

import clr 
clr.CompileModules("CompiledScript.dll", "script.py") 

开相反,使用pyc.py,生成的dll包含一个名为__main__的模块,而不是.py文件名。

这是非常奇怪......

IIRC,在Python模块调用本身__main__如果它的运行独立的(即不是由另一个叫),但我还是不掌握连接...

+1

啊,要导入的模块仍然采用组件创建的脚本的名称,而不是组件本身。我可以证实这是真的。 – 2010-09-13 22:01:35

+0

谢谢,但这并没有解决问题,因为'MyClass'这个短语不会出现在我的项目中的任何地方,而只是'MyClass'。我认为Jeff M对版本的评论是我下一步调查的途径。您使用的是哪个版本的IronPython和.NET?一定会想要从开发者那里听到这件事。 – cory 2010-09-13 22:02:41

+0

尝试重命名您的.py,但不是MyClass.py。无论如何,我成功地运行它,针对.NET 2.0/4.0,IronPython.dll 2.6.10920.0 – digEmAll 2010-09-13 22:08:04