When you want to call C from python开发者_运维问答, you write a module like this:
http://docs.python.org/extending/extending.html
Now, I have a question:
I want to write a module for use in Python with C#.
How can I get C# to interact with native Python ?
(Note: I'm not interested in Python.NET or IronPython).I know you are probably not gonna like this answer, but honestly: write it in C++, using boost::python or directly in Cython.
It'd be possible to write an extension using C#, but you'd have to convert the data structures used by Python, import a good deal of the Python C API, marshal everything back and forth between managed and unmanaged code, map object lifetimes between both Python's and C#'s garbage collector etc., which is most likely just not worth it.
You would also induce a dependency on the .NET framework, loose platform independence (probably even with Mono) while in general providing little benefit.
If you want to consume C# assemblies in CPython, your best bet actually is pywin32's win32com module on the Python side, and COM Interop on the .NET side. It allows you to expose your C# objects as COM classes with a few added attributes at the source level and easily import them into Python as objects, with events and everything. I had a lot of success integrating both platforms that way.
精彩评论