2010-09-13 261 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