如何在c#中创建一个包以便在IronPython中使用

时间:2010-03-02 18:32:38

标签: c# ironpython

我在IronPython邮件列表上看到过描述如何在c#中编写扩展模块的文档。我已经能够遵循文档,它工作正常。但是,有没有人知道如何在c#中生成分层扩展PACKAGE?例如,你应该为模块做这样的事情:

[assembly: PythonModule("my_module", typeof(test.MyModule))]
namespace test
{

    public static class MyModule
    {
        public static void hello_world()
        {
            Console.WriteLine("hello world");
        }
}

但你如何创建一个名为testme UNDER my_module的模块,你可以这样导入:

from my_module import testme

一个简短的例子或向正确的方向轻轻推动将是美好的!

2 个答案:

答案 0 :(得分:2)

我所做的就是像往常一样创建我的C#库。

namespace foo.bar{

  public class Meh{
     public void CanDoSomething(){
       //does something
     }
  }

}

然后去

import clr
clr.AddReference("My.DLL") # You may want to change it to AddReferenceByPath or depending on your needs

from foo.bar import Meh

mehvar = Meh()
mehvar.CanDoSomething()

您可以在http://www.theautomatedtester.co.uk/seleniumtraining/selenium_two_ironpython.htm

看到一些适合我的代码

答案 1 :(得分:1)

PyCrypto使用.pyd文件作为其本机代码,这些代码与Python文件位于同一文件夹中。我不相信IronPython支持这种安排。

理想情况下,您只想实现PyCrypto的本机部分,以便可以利用现有的Python包。一个选项可能是创建一个包含必要类的单个模块(比如IronPyCrypto)并修改PyCrypto中的__init__.py文件来说

# for the Hash package
if sys.platfrom == 'cli':
    from IronPyCrypto import MD2, MD4, SHA256

你失去了与PyCrypto源的完全兼容性,但至少它会起作用。