113 lines (81 sloc) 3.67 KB

pythonnet - Python for .NET

Join the chat at

appveyor shield travis shield codecov shield coverity shield

license shield pypi package version python supported shield stackexchange shield slack

Python for .NET is a package that gives Python programmers nearly seamless integration with the .NET Common Language Runtime (CLR) and provides a powerful application scripting tool for .NET developers. It allows Python code to interact with the CLR, and may also be used to embed Python into a .NET application.

Calling .NET code from Python

Python for .NET allows CLR namespaces to be treated essentially as Python packages.

import clr
from System import String
from System.Collections import *

To load an assembly, use the AddReference function in the clr module:

import clr
from System.Windows.Forms import Form

Embedding Python in .NET

  • All calls to python should be inside a using (Py.GIL()) {/* Your code here */} block.
  • Import python modules using dynamic mod = Py.Import("mod"), then you can call functions as normal, eg mod.func(args).
  • Use mod.func(args,"keywordargname", keywordargvalue)) or mod.func(args, keywordargname: keywordargvalue) to apply keyword arguments.
  • All python objects should be declared as dynamic type.
  • Mathematical operations involving python and literal/managed types must have the python object first, eg. np.pi * 2 works, 2 * np.pi doesn't.


static void Main(string[] args)
    using (Py.GIL())
        dynamic np = Py.Import("numpy");
        Console.WriteLine(np.cos(np.pi * 2));

        dynamic sin = np.sin;

        double c = np.cos(5) + sin(5);

        dynamic a = np.array(new List<float> { 1, 2, 3 });

        dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32);

        Console.WriteLine(a * b);


[  6.  10.  12.]

Information on installation, FAQ, troubleshooting, debugging, and projects using pythonnet can be found in the Wiki: