Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add a python binding to C#?

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).

like image 526
Stefan Steiger Avatar asked Nov 06 '22 07:11

Stefan Steiger


1 Answers

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.

like image 54
Jim Brissom Avatar answered Nov 09 '22 04:11

Jim Brissom